How to remove deprecation warning on timeout and polling in Selenium Java Client v3.11.0

17.8k Views Asked by At

Below is my code which is showing as deprecated after I have been updated the Selenium Webdriver version to 3.11.0.

    private Wait<WebDriver> mFluentWait(WebDriver pDriver) {
    Wait<WebDriver> gWait = new FluentWait<WebDriver>(pDriver).withTimeout(100, TimeUnit.SECONDS)
            .pollingEvery(600, TimeUnit.MILLISECONDS).ignoring(NoSuchElementException.class);   
    return gWait;
}

Showing deprecated warning in withTimeout and pollingEvery section in the code.

How can I rewrite this code so that I can remove the deprecated warning.

Since am new to selenium am not sure about the change. Any help will be appreciated.

4

There are 4 best solutions below

1
On BEST ANSWER

@Grasshopper 's answer points us to the exact modified constructor of FluentWait and your requirement of removing the deprecation warning from withTimeout and pollingEvery fields. Incase you are facing further difficulty you can use the line of code below :

import java.time.Duration;
//lines of code
Wait<WebDriver> gWait = new FluentWait<WebDriver>(pDriver).withTimeout(Duration.ofSeconds(100))
        .pollingEvery(Duration.ofMillis(600)).ignoring(NoSuchElementException.class);

You can find a detailed discussion in The type FluentWait is not generic; it cannot be parameterized with arguments error for FluentWait Class through Selenium and Java

0
On

Check the source code of FluentWait which mentions to use the methods using Duration as arguments instead.

  1. withTimeout - Use the withTimeout(Duration duration) method.
  2. pollingEvery - Use the pollingEvery(Duration duration) method.
0
On

you can use following lines of code:

  Wait<Browser> wait = new FluentWait<>(driver)
            .withTimeout(Duration.ofSeconds(*timeToWaitInSec*))
            .pollingEvery(Duration.ofMillis(*TimeToTryinMillisec*))
            .ignoring(WebDriverException.class);
0
On

After the upgrade to Selenium 4, few of the old methods have been deprecated of which Fluent wait is part of.

Use the below code in the similar order for seamless execution:

 Wait<Browser> wait = new FluentWait<>(driver)
            .withTimeout(Duration.ofSeconds(*timeToWaitInSec*))
            .ignoring(WebDriverException.class)
            .pollingEvery(Duration.ofMillis(*TimeToTryinMillisec*));

Also refer for below article for the other changes/upgrade in Selenium 4.

https://applitools.com/blog/selenium-4-migration/