WebDriver - czekaj na element używając Java
Szukam czegoś podobnegowaitForElementPresent
aby sprawdzić, czy element jest wyświetlany przed jego kliknięciem. Myślałem, że można to zrobić przezimplicitWait
, więc użyłem następujących:
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
a następnie kliknij
driver.findElement(By.id(prop.getProperty(vName))).click();
Niestety, czasami czeka na element, a czasami nie. Spojrzałem przez chwilę i znalazłem to rozwiązanie:
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();
I czekał dobrze, ale przed upływem czasu musiał czekać 10 razy 5, 50 sekund. Trochę dużo. Ustawiłem więc domyślnie oczekiwanie na 1 sekundę i wszystko wydawało się do tej pory w porządku. Ponieważ teraz niektóre rzeczy czekają 10s przed upływem limitu czasu, ale niektóre inne rzeczy wygasają po 1s.
Jak pokrywasz oczekiwanie na element obecny / widoczny w kodzie? Każda wskazówka jest znacząca.