При использовании неявных ожиданий как указано здесь, я по-прежнему иногда хочу утверждать невидимую немедленную или несуществование элементов.
Другими словами, я знаю, что некоторые элементы должны быть скрыты и хотят, чтобы мои тесты быстро выполняли это утверждение, не затрачивая несколько секунд из-за (в противном случае полезного) неявного ожидания.
Одна вещь, которую я пробовал, была вспомогательным методом, подобным этому:
// NB: doesn't seem to do what I want
private boolean isElementHiddenNow(String id) {
WebDriverWait zeroWait = new WebDriverWait(driver, 0);
ExpectedCondition<Boolean> 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()
является вспомогательным в общем суперэлементе селена:
protected void turnOffImplicitWaits() {
driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);
}
Но это не очень элегантно, я думаю. Есть ли какой-нибудь более чистый способ обхода неявного ожидания иногда?