Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
.withTimeout(Duration.ofSeconds(30))
.pollingEvery(Duration.ofMillis(500))
.ignoring(NoSuchElementException.class);
WebElement foo = wait.until(new Function<WebDriver, WebElement>() {
public WebElement apply(WebDriver driver) {
return driver.findElement(By.name("q"));
}
});
尝试使用 Selenium 3.141.59 进行 Fluent 等待实现,但收到指定的编译时错误。我主要关注"新功能方法">
FluentWait类型不是通用的;它不能用参数
我不相信这是重复的。问题可能听起来相同,但没有一个解决方案对我有用。
显示错误:
The type Function is not generic; it cannot be parameterized with arguments <WebDriver, WebElement>
你实际上想用这种明确的等待做什么?
您可以使用预定义的预期条件:
wait.until(ExpectedConditions.presenceOfElementLocated(By.name("q")));
您遇到问题的原因是您正在尝试创建一个函数的新实例,该实例是一个接口,您无法这样做。 您可以将上述预期条件重构为:
wait.until(new ExpectedCondition<WebElement>() {
@Override
public WebElement apply(WebDriver driver) {
return driver.findElement(By.name("q"));
}
});
它看起来与您的尝试非常接近,但它的可读性或可重用性不是很高。 我建议您使用自己的预期条件创建自己的辅助类,该类看起来像Selenium提供的标准预期条件类。