WebDriver - Javaを使用して要素を待機する 質問する

WebDriver - Javaを使用して要素を待機する 質問する

要素をクリックする前に、要素が表示されているかどうかを確認するために、 に似たものを探していますwaitForElementPresent。 これは で実行できると思ったimplicitWaitので、次のものを使用しました。

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

そしてクリックして

driver.findElement(By.id(prop.getProperty(vName))).click();

残念ながら、要素を待つ場合もあれば、待たない場合もあります。しばらく調べた結果、次の解決策を見つけました。

for (int second = 0;; second++) {
    Thread.sleep(sleepTime);
    if (second >= 10)
        fail("timeout : " + vName);
    try {
        if (driver.findElement(By.id(prop.getProperty(vName))).isDisplayed())
            break;
    } catch (Exception e) {
        writeToExcel("data.xls", e.toString(), parameters.currentTestRow, 46);
    }
}
driver.findElement(By.id(prop.getProperty(vName))).click();

そして、待機は正常に行われましたが、タイムアウトする前に 10 回 5 秒、つまり 50 秒待機する必要がありました。少し長すぎます。そのため、暗黙的に 1 秒待機するように設定したところ、これまではすべて正常に見えました。なぜなら、今ではタイムアウト前に 10 秒待機するものもあれば、1 秒後にタイムアウトするものもあるからです。

コード内で要素の存在/可視性を待機する方法をどのようにカバーしますか? ヒントがあればありがたいです。

ベストアンサー1

これが私のコードでのやり方です。

WebDriverWait wait = new WebDriverWait(webDriver, timeoutInSeconds);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id<locator>));

または

wait.until(ExpectedConditions.elementToBeClickable(By.id<locator>));

正確に言うと。

参照:

おすすめ記事