当使用隐式等待,as advised here,我仍然有时要断言立即隐形或元件的不存在。暂时绕过隐等待用的webdriver
换句话说,我知道一些元素应该被隐藏,并希望我的测试让这种说法快速,而不需要花费几秒钟,因为(否则很有用)隐含的等待。
有一两件事我想是一个辅助方法是这样的:
// 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);
}
但是,这是不是很优雅,我想。 有没有更简单的方法来绕过隐含的等待时间?
我不'我相信界面上有任何东西都是你想要的。我唯一能想到的就是调用findElements而不是findElement。但我不确定是否绕过了隐含的等待。 –
@MikeKwan不,['findElements()'](http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebDriver.html#findElements%28org.openqa.selenium .By%29)也会在至少找到一个元素后尝试等待并返回。 –
对于lambdas来说,这将是一个很好的例子 'public void bypassImplicitWaits {Bypass bypass} {return 0ffImplicitWaits(); bypass.do(); turnOnImplicitWaits(); }' – michaelsnowden