0
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 类型不是通用的;它不能通过 Selenium 和 Java 使用 FluentWait 类的参数 <WebDriver> 错误进行参数化

我不相信这是重复的。问题听起来可能相同,但没有一个解决方案对我有用。

错误显示:

The type Function is not generic; it cannot be parameterized with arguments <WebDriver, WebElement>
4

1 回答 1

1

你到底想用这个明确的等待做什么?

您可以使用预定义的预期条件:

wait.until(ExpectedConditions.presenceOfElementLocated(By.name("q")));

您遇到问题的原因是您正在尝试创建作为接口的 Function 的新实例,您不能这样做。您可以将上述 ExpectedCondition 重构为:

wait.until(new ExpectedCondition<WebElement>() {
    @Override
    public WebElement apply(WebDriver driver) {
        return driver.findElement(By.name("q"));
    }
});

它看起来非常接近您的尝试,但它的可读性或可重用性不是很高。我建议您使用自己的预期条件创建自己的帮助程序类,看起来像Selenium 提供的标准 ExpectedConditions 类

于 2019-05-29T12:15:08.913 回答