要素をクリックする前に、要素が表示されているかどうかを確認するために、 に似たものを探しています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>));
正確に言うと。
参照:
- org.openqa.selenium.support.ui.期待される条件さまざまな待機シナリオの同様のショートカット。
- org.openqa.selenium.support.ui.WebDriverWaitさまざまなコンストラクタ用。