I\'ve been struggling with selenium to fix this issue:
java.lang.NoSuchMethodError: org.openqa.selenium.support.ui.Wait.until(Lcom/google/common/base/Function
This error message...
java.lang.NoSuchMethodError: org.openqa.selenium.support.ui.Wait.until(Lcom/google/common/base/Function;)Ljava/lang/Object;
...implies that the Guava version was incompatible.
As you are using selenium-server-standalone-3.12.0 as per the contents of selenium-java-3.12.0 client kits the supported guava version is:
guava-23.6-jre
An immediate solution would be to:
guava-23.6-jre.jar
In your first update as you have confirmed that Guava version is 23.6-jre
, the real issue seems to be constructor of FluentWait. The argument type for withTimeout
and pollingEvery
post Selenium v3.11.0, which was:
pollingEvery(long duration, java.util.concurrent.TimeUnit unit)
withTimeout(long duration, java.util.concurrent.TimeUnit unit)
Are now Deprecated and the new type is java.time.Duration. So your effective code block will be:
Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
.withTimeout(Duration.ofSeconds(30))
.pollingEvery(Duration.ofMillis(500))
.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
Additionally,
As per the best practices you need to:
Test
as a non-root user.driver.quit()
within tearDown(){}
method to close & destroy the WebDriver and Web Client instances gracefully.You can find a relevant detailed discussion in:
Simple short answer: You have dependency issues with an outdated guava version!
-> Do this: In every single project explicitly exclude the guava dependency from every single dependency that requests it (use the dependency graph to find these) or better exclude it in the parent (if you have one)
-> Then add the guava 23.0 (or newer) dependency explicitly.
This will fix it. Right now from somewhere an old guava version is being pulled that doesnt have the "until" method (or at least not with this parameter).
Good Luck! :)
This is compatibility issue. To solve it, you can use Guava version 21 + selenium version 3.2.0 + JDK 8.
For more details you can check below link:
https://softwaretestingboard.com/q2a/1907/function-webdriver-fluentwait-webdriver-applicable-arguments#axzz68BFzmEjv
I hope it will help you.
I think you should check under D:\sln\
and D:\sln\lib\
if there's any other version of selenium library in there. Delete it out if there's one.
From the error message, it seems like when you execute the batch script it use a different version of Selenium from a different selenium jar file. Probably the old version of selenium jar that haven't had the Wait.until method yet.