Dee*_*kar 10 java selenium selenium-webdriver
我在FluentWait
和之间感到困惑WebDriverWait
。
FluentWait
并且WebDriverwait
两者都使用相同的功能,例如忽略异常、更改轮询时间间隔、预期条件等。
根据我的理解,两者都实现了Wait
接口。另外WebDriverWait
扩展FluentWait
(这意味着所有功能也存在于 中WebDriverWait
)。
WebDriverWait
中不存在的额外功能是FluentWait
什么?
小智 8
两者之间实际上差别很小。根据WebDriverWait
源代码它说:
它将忽略
NotFoundException
在until
条件中默认遇到(抛出)的实例,并立即传播所有其他实例。您可以通过调用将更多内容添加到忽略列表中ignoring(exceptions to add)
唯一的区别是默认情况下,元素未找到异常在WebDriverWait
. 其余功能与FluentWait
因为WebDriverWait
扩展它完全相同。
FluentWait 和 WebDriverWait 都是 Wait 接口的实现。
使用 Fluent WebDriver Explicit Wait 和 WebDriver Explicit Wait 的目标或多或少是相同的。但是,在少数情况下,FluentWait 可以更灵活。由于这两个类都是相同 Wait 接口的实现,因此或多或少都具有相同的功能,除了FluentWait 具有在 until 方法中接受谓词或函数作为参数的功能。另一方面,WebDriverWait在until 方法中只接受作为ExpectedCondition 的函数,这限制了您只能使用布尔返回。当您在FluentWait 中使用Predicate 时,它允许您从until 方法返回任何对象。
仔细看这里:https : //seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/support/ui/FluentWait.html#until-com.google.common.base.Predicate-
示例: FluentWait 将 Function 作为参数 in until with String return:
public void exampleOfFluentWait() {
WebElement foo = driver.findElement(By.id("foo"));
new FluentWait<WebElement>(foo)
.withTimeout(10, TimeUnit.SECONDS)
.pollingEvery(2, TimeUnit.SECONDS)
.until(new Function<WebElement, String>() {
@Override
public String apply(WebElement element) {
return element.getText();
}
});
}
Run Code Online (Sandbox Code Playgroud)
相同的 FluentWait 具有以布尔值返回的函数作为直到方法中的参数。
public void exampleOfFluentWait() {
WebElement foo = driver.findElement(By.id("foo"));
new FluentWait<WebElement>(foo)
.withTimeout(10, TimeUnit.SECONDS)
.pollingEvery(2, TimeUnit.SECONDS)
.until(new Function<WebElement, Boolean>() {
@Override
public Boolean apply(WebElement element) {
return element.getText().contains("foo");
}
});
}
Run Code Online (Sandbox Code Playgroud)
又一个带有谓词的 FluentWait。
public void exampleOfFluentWithPredicate() {
WebElement foo = driver.findElement(By.id("foo"));
new FluentWait<WebElement>(foo)
.withTimeout(10, TimeUnit.SECONDS)
.pollingEvery(100, TimeUnit.MILLISECONDS)
.until(new Predicate<WebElement>() {
@Override
public boolean apply(WebElement element) {
return element.getText().endsWith("04");
}
});
}
Run Code Online (Sandbox Code Playgroud)
WebDriverWait 示例:
public void exampleOfWebDriverWait() {
WebElement foo = driver.findElement(By.id("foo"));
new WebDriverWait(driver, 10)
.pollingEvery(2, TimeUnit.SECONDS)
.withTimeout(10, TimeUnit.SECONDS)
.until(ExpectedConditions.visibilityOf(foo));
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9491 次 |
最近记录: |