当使用隐式等待时,正如这里所建议的那样,我有时仍然想断言元素的立即不可见或不存在。
换句话说,我知道一些元素应该被隐藏,并且希望我的测试能够快速做出断言,而不需要花费几秒钟,因为(否则有用)隐式等待。
我尝试过的一件事是这样的辅助方法:
// 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();
}
... 其中 egturnOffImplicitWaits()
是常见 Selenium 超类中的助手:
protected void turnOffImplicitWaits() {
driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);
}
但这不是很优雅,我认为。有什么更简洁的方法可以偶尔绕过隐式等待吗?