读了一篇关于JDK1.8和Lambda表达式的文章后,我意识到我这几年一直在使用的ExpectedCondition块可能适合表达为Lambda表达式。
鉴于此等待对象:
Wait<WebDriver> wait = new FluentWait<WebDriver>( driver )
.withTimeout(30, SECONDS)
.pollingEvery(5, SECONDS)
.ignoring( NoSuchElementException.class );
谁能告诉我如何将 Selenium 的这个 ExpectedCondition 表达式转换为 Lambda 表达式?
WebElement foo = wait.until( new ExpectedCondition<Boolean>() {
public WebElement apply( WebDriver webDriver ) {
return webDriver.findElement( By.id("foo") );
}
} );
最佳答案
从 Selenium 3.2.0 版开始,until() 方法将 只接受Function<T,K>
作为参数并接受 Predicate<T>
作为参数已弃用 .
上面的决定是使用 lambda 表达式。
所以回答你的问题:
Wait<WebDriver> wait = new FluentWait<WebDriver>( driver )
.withTimeout(30, SECONDS)
.pollingEvery(5, SECONDS)
.ignoring(NoSuchElementException.class);
//lamda expression:
WebElement foo = wait.until(d -> d.findElement(By.id("foo")));
关于与 Selenium2 ExpectedCondition 一起使用 Lambda 表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18552851/