WebDriverWait
WebDriverWait 是使用 WebDriver 实例的 FluentWait 的特化。
构造函数是:
WebDriverWait(WebDriver driver, java.time.Clock clock, Sleeper sleeper, long timeOutInSeconds, long sleepTimeOut)
-
WebDriverWait(WebDriver driver, long timeOutInSeconds):诱导此等待 将忽略在“直到”条件下默认遇到(抛出)的NotFoundException 实例,并立即传播所有其他实例。
-
WebDriverWait(WebDriver driver, long timeOutInSeconds, long sleepInMillis):诱导这个 Wait 将忽略在“直到”条件下默认遇到(抛出)的 NotFoundException 实例,并立即传播所有其他实例。
WebDriverWait 的 Lambda 实现
示例 A:
(new WebDriverWait(driver(), 5))
.until(new ExpectedCondition<WebElement>() {
public WebElement apply(WebDriver d) {
return d.findElement(By.linkText(""));
}
});
示例 B:
WebElement wer = new WebDriverWait(driver, 5).until((WebDriver dr1) -> dr1.findElement(By.id("q")));
示例 C:
(new WebDriverWait(driver(), 5)).until((driver) -> driver.findElement(By.linkText("Google")));
流利等待
FluentWait 是Wait 接口的实现,可以动态配置其超时和轮询间隔。
每个 FluentWait 实例定义等待条件的最长时间,以及检查条件的频率。此外,用户可以将等待配置为在等待时忽略特定类型的异常,例如在页面上搜索元素时的NoSuchElementExceptions。
示例用法:
// Waiting 30 seconds for an element to be present on the page, checking for its presence once every 500 milliseconds.
Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
.withTimeout(Duration.ofSeconds(30))
.pollingEvery(Duration.ofMillis(500))
.ignoring(NoSuchElementException.class);
WebElement foo = wait.until(new Function<WebDriver, WebElement>() {
public WebElement apply(WebDriver driver) {
return driver.findElement(By.name("q"));
}
});
注意:这个类不保证线程安全。
您可以在讨论Selenium Webdriver 3.0.1: Selenium showing error for FluentWait Class
中找到
FluentWait 的工作示例