1. ホーム
  2. java

[解決済み] Javaを使用したSelenium WebDriverテストにおけるwaitForVisible/waitForElementPresentの等価性?

2022-03-13 03:50:18

質問

HTML" Selenium テスト (Selenium IDE または手動で作成したもの) では、いくつかの 非常に便利なコマンド のように WaitForElementPresent または WaitForVisible .

<tr>
    <td>waitForElementPresent</td>
    <td>id=saveButton</td>
    <td></td>
</tr>

SeleniumのテストをJavaでコーディングする場合(Webdriver / Selenium RC-ここでは用語がよくわかりません)。 に似たようなものが組み込まれていませんか? ?

例えば、(開くのに時間がかかる)ダイアログが表示されているかどうかをチェックするために......。

WebElement dialog = driver.findElement(By.id("reportDialog"));
assertTrue(dialog.isDisplayed());  // often fails as it isn't visible *yet*

最もクリーンなのは? 堅牢 のようなチェックの仕方を教えてください。

追加 Thread.sleep() をあちこちで呼び出すと、醜くて壊れやすいし、whileループを自作するのもかなり不器用そうだし...。

解決方法は?

暗黙の待機と明示の待機

暗黙の待機

暗黙の待機とは、WebDriver に一定時間 DOM をポーリングするように指示することです。 ある要素が見つからない場合、その要素を見つけるのに必要な時間です。 はすぐに利用できません。デフォルトでは0に設定されています。 暗黙の待機はWebDriverオブジェクトのインスタンスが存在する間、設定されます。

driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

明示的な待ち時間+α 期待される条件

明示的待機とは、特定の条件を待つために定義するコードです。 を発生させてから、それ以上コードを進める。これの最悪のケースは は Thread.sleep() で、これは条件を正確な時間に設定するものです。 を待ちます。を書くのに便利なメソッドがいくつか提供されています。 のコードでは、必要な時間だけ待つことになります。WebDriverWait とExpectedConditionの組み合わせは、この方法の1つです。 を実現します。

WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement element = wait.until(
        ExpectedConditions.visibilityOfElementLocated(By.id("someid")));