Тип Function не является универсальным; он не может быть параметризован с помощью аргументов <WebDriver, WebElement>

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"));
    }
});

Попытался поработать над реализацией Fluent wait с Selenium 3.141.59, но получил указанную ошибку времени компиляции. В основном меня интересует "новый метод Function"

Тип FluentWait не является универсальным; это не может быть параметризовано с аргументами ошибка для класса FluentWait через Selenium и Java

Я не верю, что это дубликат. Вопрос может звучать одинаково, но ни одно из решений не сработало для меня.

Показана ошибка:

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

1 ответ

Что вы на самом деле пытаетесь сделать с этим явным ожиданием?

Вы можете использовать предварительно определенное ожидаемое условие:

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

Причина, по которой у вас возникают проблемы, заключается в том, что вы пытаетесь создать новый экземпляр функции, который является интерфейсом, вы не можете этого сделать. Вы можете рефакторировать вышеупомянутое Expected Condition в:

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

Это выглядит довольно близко к вашей попытке, но это не очень читабельно или многоразово. Я бы посоветовал вам создать свой собственный вспомогательный класс с вашими собственными ожидаемыми условиями, которые выглядят как стандартный класс Expected Conditions, предоставляемый Selenium.

Другие вопросы по тегам