Hus*_*sam 5 java lambda selenium webdriver selenium-webdriver
的until()在方法org.openqa.selenium.support.ui.FluentWait被重载Predicate<T>和Function<? super T, V>作为参数的接口.
它应该作为以下之一的参数(实现该apply()方法):
我定义为此方法的参数的任何lambda都会抛出以下错误:
直到(Predicate)方法对于WebDriverWait类型是不明确的
我的Lambda:
x -> x.findElement(byLocator).isDisplayed()
Run Code Online (Sandbox Code Playgroud)
我假设任何lambda都是这种情况,因为apply()可以通过使用这些lambda来实现Function或Predicate.
所以我的问题是什么是使用Predicate作为参数的until方法?
更新:删除了@drkthng回答的问题的第一部分.
回答你的第一个问题:
查看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)