PHP Selenium Webdriver (Facebook wrapper)で特定のelementまでscrollする

よくない処理

$this->driver->executeScript("window.scrollTo(400, 1000);");
$element = $this->driver->findElement(WebDriverBy::className('button'));
$element->click();

 上のコードのように、いつも一定量スクロールしてクリックするような処理を記述しているとエレメントのレイアウトを変更した時などに対応できません。  特にデスクトップ環境とモバイル環境両方で自動テストを実行したい時などはエレメントのレイアウトが大きく変わってしまうので注意が必要です。

改善後

 こういう状況では特定の要素までスクロールする処理にしましょう。

use Facebook\Webdriver\WebDriverPoint; //クラス追加


/*     処理部分     */
$element = $this->driver->findElement(WebDriverBy::className('button'));
$element->getLocationOnScreenOnceScrolledIntoView(); // ボタンが表示されるまでスクロール
$element->click();