使用 WebDriver 暂时绕过隐式等待
2022-09-01 20:37:06
当使用隐式等待时,正如这里所建议的那样,我有时仍然想断言元素的直接不可见或不存在。
换句话说,我知道一些元素应该被隐藏,并希望我的测试能够快速做出断言,而不会因为(否则有用的)隐式等待而花费几秒钟。
我尝试的一件事是像这样的帮助器方法:
// 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);
}
但我认为这并不是很优雅。有没有更清晰的方法来绕过偶尔的隐式等待?