當使用隱式等待,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