无法理解FluentWait中until()方法的实现

Hus*_*sam 5 java lambda selenium webdriver selenium-webdriver

until()在方法org.openqa.selenium.support.ui.FluentWait被重载Predicate<T>Function<? super T, V>作为参数的接口.

它应该作为以下之一的参数(实现该apply()方法):

  • 匿名课
  • Lambda表达式
  • 方法参考

我定义为此方法的参数的任何lambda都会抛出以下错误:

直到(Predicate)方法对于WebDriverWait类型是不明确的

我的Lambda:

x -> x.findElement(byLocator).isDisplayed()
Run Code Online (Sandbox Code Playgroud)

我假设任何lambda都是这种情况,因为apply()可以通过使用这些lambda来实现Function或Predicate.

所以我的问题是什么是使用Predicate作为参数的until方法?

更新:删除了@drkthng回答的问题的第一部分.

drk*_*hng 2

回答你的第一个问题:

查看ExpectedConditon 的 Selenium API 文档

我引用:

public interface ExpectedCondition<T>
extends com.google.common.base.Function<WebDriver,T>
Run Code Online (Sandbox Code Playgroud)

你看,ExpectedCondition继承自google的Function接口,因此你可以将它用作until()方法的参数。

至于你的第二个问题:

我认为你不能就这样交出 lambda 。直到方法正在等待谓词或函数(正如您正确提到的)。

关于谓词和 lambda 之间的差异,请查看此处的示例

所以你可以尝试这样的事情,仍然使用你的 lambda 表达式:

Predicate<WebDriver> myPredicate = x ->x.findElement(By.id("id")).isDisplayed();

WebDriverWait wait = (WebDriverWait)new WebDriverWait(driver, 10);
wait.until(myPredicate);
Run Code Online (Sandbox Code Playgroud)