1. ホーム
  2. java

[解決済み] WebDriver - Javaを使った要素の待ち時間

2023-06-01 05:29:58

質問

私は、以下のようなものを探しています。 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秒後にタイムアウトするようになったからです。

あなたのコードでは、要素の存在/可視の待ち時間をどのようにカバーしていますか?どんなヒントでもかまいません。

どのように解決するのですか?

これは、私のコードでそれを行う方法です。

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

または

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

を正確には

も参照してください。