Внутренне неявное ожидание просто вызывает findElement()
снова и снова, отбрасывая любые ElementNotFoundException
с, пока не будет возвращен элемент или не истечет время.
Вы могли бы написать свой собственный findElementImplicitlyWait()
, просто сделав это - он далек от совершенства, но это должно сработать.
- Установите
implicitlyWait
на 0.
- создайте новый метод
newFindElement()
, который вызывает findElement()
до тех пор, пока он не вернет элемент без исключения или до истечения 30 секунд.
- Используйте время по своему вкусу.
Приведенный ниже код (надеюсь, компилируемый =)) пытается сделать это и определить время ожидания.
private static final long WAIT_TIME = 30000;
public WebElement findElement(final By by) {
WebElement elem = null;
long targetTime = System.currentTimeMillis() + WAIT_TIME;
do {
try {
elem = driver.findElement(by);
} catch (NoSuchElementException ignored) {
// nothing to do, element not found
}
} while ((elem == null) && (System.currentTimeMillis() < targetTime));
if (elem == null) {
throw new NoSuchElementException("No such element found: " + by);
}
System.out.println("Waited for " + (targetTime - System.currentTimeMillis()) + " ms.");
return elem;
}