WebDriverWait和FluentWait有什么区别。我理解WebDriverWait扩展了FluentWait。 Webdriverwait派生了FluentWait的所有方法。我何时使用WebdriverWait而不是FluentWait?
答案 0 :(得分:1)
以下是一些外部网站/博客,以极好的方式解释了硒中WAIT的区别:
1 - TOOLSQA - DIFFERENT SELENIUM WAITS
答案 1 :(得分:0)
在FluentWait实现中,您可以配置timeout
和frequency
来检查条件。除此之外,您还可以配置为忽略某些类型的异常。
示例:强>
// Waiting 30 seconds for an element to be present on the page, checking
// for its presence once every 5 seconds.
Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
.withTimeout(30, SECONDS)
.pollingEvery(5, SECONDS)
.ignoring(NoSuchElementException.class);
WebElement foo = wait.until(new Function<WebDriver, WebElement>() {
public WebElement apply(WebDriver driver) {
return driver.findElement(By.id("foo"));
}
});
您可以参考here
答案 2 :(得分:0)
FluentWait是Wait接口的一种实现,可以动态配置其超时和轮询间隔。
每个FluentWait实例定义等待条件的最长时间,以及检查条件的频率。此外,用户可以将等待配置为在等待时忽略特定类型的异常,例如在搜索页面上的元素时使用NoSuchElementExceptions。
样本用法:
//等待30秒,页面上有一个元素,检查 //每隔5秒钟出现一次。
Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
.withTimeout(30, SECONDS)
.pollingEvery(5, SECONDS)
.ignoring(NoSuchElementException.class);
WebElement foo = wait.until(new Function<WebDriver, WebElement>() {
public WebElement apply(WebDriver driver) {
return driver.findElement(By.id("foo"));
}
});
答案 3 :(得分:0)
回答这个问题可能要迟一点。但是,我很想回答它。
FluentWait是一个通用类,FluentWait&lt; T&gt; T可以是任何东西。它可以是WebElement,也可以是您要传递的自定义类。使用该类可以应用等待逻辑。请注意FluentWait的.until(&lt; Predicate&gt;或&lt; Function&gt;)方法。该方法将获得Predicate&lt; T&gt;。或函数&lt; T,Y&gt;基于你上面传递的T。
我们了解到,在FluentWait中,您可以传递任何引用类。这使得FluentWait适用于您要实现的任何等待逻辑。
相反,WebDriverWait仅为WebDriver配置。在WebDriverWait.until方法中,您始终可以创建谓词&lt; WebDriver&gt;或函数&lt; WebDriver,Y&gt;。
所以在伪代码中WenDriverWait = FluentWait&lt; WebDriver&gt;就是这样。要理解until方法,函数和谓词。我在这里写了一篇教程:http://toolsqa.com/selenium-webdriver/advance-webdriver-waits/