web-dev-qa-db-ja.com

scrollIntoView vs moveToElement

Selenium WebDriverには、要素を可視領域に入れる2つの主要な方法があります

  1. ビューへのスクロール

    ((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", element);
    
  2. moveToElementブラウザアクション を使用:

    Actions actions = new Actions(driver);
    actions.moveToElement(element);
    actions.perform();
    

これらの方法は同等であり、どちらを優先すべきですか?

29
alecxe

scrollIntoView

DOMメソッドscrollIntoViewは、要素をビューにスクロールするだけです。 scrollIntoViewが要素をスクロールしてビューに表示できない場合、サイレントで失敗します。不可視の要素をbodyの先頭に追加し、scrollIntoViewを呼び出しました。何もスクロールしませんでしたが、エラーはありませんでした。 scrollIntoViewよりもmoveToElementを使用して要素をスクロールするhowをさらに制御できることに注意してください。 Seleniumは、要素を表示してマウスを配置できるようにすることのみに関心があります。それがどのように行われるかについては何も言いません。ただし、scrollIntoViewを使用すると、たとえば、要素の上部または下部をスクロール可能な祖先に揃えるかどうかを指定できます。 (詳細については here をご覧ください。)

moveToElement

SeleniumのメソッドmoveToElementは2つのことを行います:要素をスクロールして表示し、要素の上にマウスを移動します。また、画面上の座標がなく、ここでもエラーがないため、スクロールまたは移動できない要素でテストしました。

1つを選択する

デフォルトではmoveToElementを使用しますが、次の例外があります。

  • Seleniumがマウスを置いた場所にまったく影響を与えたくないが、何かをスクロールして表示したい場合(少し奇妙ですが...可能)、scrollIntoViewを使用する必要があります。

  • scrollIntoViewが提供する制御の種類で要素をスクロールする必要がある場合(上記の配置オプションのように)、moveToElementではなく要素を使用する必要があります。

  • Seleniumのコマンドを使用してユーザーの動作をシミュレートすることが不可能な場合や、一連のSeleniumコマンドを送信することで非常にコストがかかる場合があります。 (各コマンドはネットワークへの往復です。テストサーバーがインターネットのどこかにある場合、合計されます。)そのような場合、SeleniumのexecuteScriptを使用します。そのような場合、スクリプトを終了し、scrollIntoViewを作成してスクロールを実行し、別のActionで操作全体を完了するのではなく、実行中のスクリプトでexecuteScriptを使用すると有利です。

34
Louis