При использовании неявных ожиданий,как советуется здесь , я по-прежнему иногдахочу установить ] немедленнаяневидимость или отсутствие элементов.
Другими словами, я знаю, что некоторые элементы должны быть скрыты, и хочу, чтобы мои тесты сделали это утверждение быстрым, не тратя несколько секунд из-за (в противном случае полезного) неявного ожидания.
Одна вещь, которую я попробовал, это вспомогательный метод, подобный этому:
// NB: doesn't seem to do what I want
private boolean isElementHiddenNow(String id) {
WebDriverWait zeroWait = new WebDriverWait(driver, 0);
ExpectedCondition c = invisibilityOfElementLocated(By.id(id));
try {
zeroWait.until(c);
return true;
} catch (TimeoutException e) {
return false;
}
}
Но в приведенном выше коде вызов until()
возвращает только после того, как прошло неявное время ожидания, т.е. он не делает то, что я хотел.
Это единственный способ, который я нашел до сих пор, который работает:
@Test
public void checkThatSomethingIsNotVisible() {
turnOffImplicitWaits();
// ... the actual test
turnOnImplicitWaits();
}
... где, например. turnOffImplicitWaits()
является помощником в общем суперклассе Selenium:
protected void turnOffImplicitWaits() {
driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);
}
Но я думаю, что это не очень элегантно. Есть ли более простой способ время от времени обходить неявное ожидание?