gpt4 book ai didi

java - 流利等待 vs WebDriver 等待

转载 作者:塔克拉玛干 更新时间:2023-11-01 23:05:38 25 4
gpt4 key购买 nike

我对 FluentWaitWebDriverWait 感到困惑。

FluentWaitWebDriverwait 都使用相同的功能,如忽略异常、更改轮询时间间隔、预期条件等。

据我了解,两者都实现了 Wait 接口(interface)。此外,WebDriverWait 扩展了 FluentWait(这意味着所有功能也存在于 WebDriverWait 中)。

WebDriverWait 具有哪些 FluentWait 中没有的额外功能?

最佳答案

FluentWait 和WebDriverWait 都是Wait 接口(interface)的实现。

使用 Fluent WebDriver Explicit Wait 和 WebDriver Explicit Wait 的目的大致相同。但是,在少数情况下,FluentWait 可以更灵活。由于这两个类都是相同 Wait 接口(interface)的实现,因此或多或少都具有相同的功能,除了 FluentWait 具有接受谓词或函数作为 until 方法中的参数的功能。另一方面,WebDriverWait 只接受作为 ExpectedCondition 的函数。在 until 方法中,它限制您只能使用 boolean 返回。当您在 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 作为参数,直到返回字符串:

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();
}
});
}

相同的 FluentWait 在 until 方法中具有带有 boolean 返回值的函数作为参数。

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");
}
});
}

还有一个带 Predicate 的 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");
}
});
}

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));
}

关于java - 流利等待 vs WebDriver 等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40753321/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com