Ich suche nach etwas Ähnlichem, um waitForElementPresent
zu überprüfen, ob ein Element angezeigt wird, bevor ich darauf klicke. Ich dachte, dass dies durch getan werden kann implicitWait
, also habe ich Folgendes verwendet:
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
und dann auf klicken
driver.findElement(By.id(prop.getProperty(vName))).click();
Leider wartet es manchmal auf das Element und manchmal nicht. Ich habe eine Weile gesucht und diese Lösung gefunden:
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();
Und es hat gut gewartet, aber bevor es abgelaufen ist, musste es 10 mal 5, 50 Sekunden warten. Ein bisschen viel. Also habe ich das implizite Warten auf 1 Sekunde eingestellt und bis jetzt schien alles in Ordnung zu sein. Denn jetzt warten einige Dinge 10 Sekunden vor dem Timeout, andere nach 10 Sekunden.
Wie decken Sie das Warten auf das in Ihrem Code vorhandene / sichtbare Element ab? Jeder Hinweis ist spürbar.