Я ищу что-то похожее на 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 с.
Как вы покрываете ожидание присутствия/видимости элемента в вашем коде? Любой намек заметен.