SeleniumWebDriverで指定の要素が表示される位置に画面をスクロールする

SeleniumWebDriverで特定の要素の対してクリックなりsendkeysなりさせようとしても、なぜかエラーになって上手くいかない場合があります。

このときにたまにあるのが、操作対象の要素が画面内に表示されていなくてエラーになる場合。基本的にはWebDriver側が勝手に対象要素までスクロールして操作してくれるはずなのですが、稀にそれが効かない要素があり。

半分バッドノウハウですが、別途自分で明示的にスクロールさせて、それからクリック等の操作を行ってみるとよいでしょう。

指定の要素までスクロール

/**
* 指定した要素が画面内に表示されるようスクロールする。
* @param driver
* @param element 画面内に表示させたい要素
*/
public static void ScrollTo(WebDriver driver, WebElement element) {
    ((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(false);", element);
}

Javaの例です。JavaでJavaScriptを実行し、要素までスクロールさせる。コレだけです。

ちゃんと書いているはずなのになぜかエラーでうまくいかない、という場合に駄目元で試してみてください。

ABOUTこの記事をかいた人

都内でテストエンジニア&ブロガーをやっている@yoshikiitoです。 ソフトウェアエンジニアの学習方法や成長するための考え方、会社に依存せず自分の力で生きていけるエンジニアになる方法などについて興味があります。 こういった方法や考え方、自分が試したことなどをブログを通じて発信します。 仕事は主にソフトウェアテストやテスト自動化。 趣味は浦和レッズと読書と技術書を買って積むこと。 技術評論社から本を出すのが夢