java.lang.NoSuchMethodError: org.openqa.selenium.support.ui.Wait.until(Lcom/google/common/base/Function;)Ljava/lang/Object;
这是我收到此错误的地方:
Wait<WebDriver> wait = new FluentWait<>(getDriverInstance()) .withTimeout(timeout, TimeUnit.SECONDS) .pollingEvery(frequency, TimeUnit.SECONDS) .ignoring(NoSuchElementException.class); wait.until(driver -> { assert driver != null; elt.click(); return true; });
Internet上大多数解决方案建议使用Guava 21
,但这对我不起作用。在本地运行selenium效果很好,但我没有得到这个问题,问题是我们使用了运行器,该运行器将使用
selenium-server-standalone-3.12.0
在多个虚拟机上运行测试,并且在类路径中定义了所有依赖项使用,在我也声明了番石榴的地方,我也尝试了其他版本的Guava
从19到23。我尝试了多种解决方案,但现在我没主意了,即使声明了Guava,我也不知道为什么仍然会收到此错误,并且可以清楚地看到在本地运行测试时,
Guava 23
效果很好。我正在使用Java
1.8_71
。当我检查
selenium-server-standalone-3.12.0
的代码源时,等待界面如下所示:
import java.util.function.Function; public interface Wait<F> { <T> T until(Function<? super F, T> var1); }
但是在本地看起来像这样:
import com.google.common.base.Function; public interface Wait<F> { <T> T until(Function<? super F, T> var1); }
但是由于com.google.common.base.Function
在Guava 23中扩展了com.google.common.base.Function
,所以这应该不是问题,所以为什么我仍然会收到此错误?提前感谢。
Guava版本21 +硒版本3.2.0 + JDK 8。
有关更多详细信息,请检查以下链接:希望对您有帮助。
java.lang.NoSuchMethodError: org.openqa.selenium.support.ui.Wait.until(Lcom/google/common/base/Function;)Ljava/lang/Object;
...表示Guava版本不兼容。
根据selenium-java-3.12.0
客户端工具包的内容,您正在使用selenium-server-standalone-3.12.0,支持的guava版本是:guava-23.6-jre
解决方案立即的解决方案是:
用
guava-23.6-jre.jar
] [>升级Guava
其他注意事项另外,
您的
解决方案:确保将- JDK版本是1.8_71,这很漂亮old和ancient。
JDK 升级到当前级别JDK 8u222。
最佳做法根据最佳实践,您需要:
升级
升级- JDK到最近的级别JDK 8u222。
硒 到当前水平Version 3.141.59。GeckoDriver 和Firefox特定:升级
到GeckoDriver v0.26.0等级。GeckoDriver存在于所需位置。- GeckoDriver
GeckoDriver具有非root用户的可执行权限。 将 Firefox 版本升级到Firefox v72.0级别。ChromeDriver 和Chrome特定:已更新为当前的ChromeDriver v79.0.3945.36级别。
- ChromeDriver
Chrome 已更新为当前的Chrome 79.0级。 (根据ChromeDriver v79.0 release notes)Clean 您的Project Workspace通过您的IDE和Rebuild您的项目仅具有必需的依赖项。(仅限于[WindowsOS )在执行[[Test Suite之前和之后,使用CCleaner工具清除所有操作系统杂项。(仅适用于LinuxOS)在执行[[Test Suite之前和之后Free Up and Release the Unused/Cached Memory in Ubuntu/Linux Mint。如果您的基本Web Client 版本太旧,请通过Revo Uninstaller卸载它,并安装最新的GA和Web Client的发行版本。进行系统重启 。以非root用户身份执行Test
。>>总是在 和driver.quit()
方法中调用tearDown(){}
以正常关闭并销毁WebDriverWeb Client 实例。参考 您可以在以下位置找到相关的详细讨论:org.openqa.selenium.remote.service.DriverService$Builder.createArgs()Lcom/google/common/collect/ImmutableList; with Selenium 3.5.3 Chrome 76