【发布时间】:2012-06-17 13:57:09
【问题描述】:
当使用隐式等待时,as advised here,我仍然有时想要断言元素的立即不可见或不存在。
换句话说,我知道应该隐藏一些元素,并且希望我的测试快速做出该断言,而无需花费几秒钟,因为(其他有用的)隐式等等。
我尝试过的一件事是这样的辅助方法:
// 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() 是普通 Selenium 超类的助手:
protected void turnOffImplicitWaits() {
driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);
}
但我认为这不是很优雅。 有什么更简洁的方法可以偶尔绕过隐式等待吗?
【问题讨论】:
-
我不相信接口定义的任何东西都可以满足您的需求。我唯一能想到的就是调用 findElements 而不是 findElement。但我也不确定是否会绕过隐式等待。
-
@MikeKwan 不,
findElements()也会在至少找到一个元素后尝试等待并返回。 -
对于 lambdas
public void bypassImplicitWaits(Bypass bypass) { turnOffImplicitWaits(); bypass.do(); turnOnImplicitWaits(); }来说是一个很好的案例@
标签: java selenium selenium-webdriver webdriver wait