我有一个简单的 Selenium 测试代码:
public static void main(String[] args) {
System.setProperty("webdriver.chrome.driver", "/home/chromedriver");
WebDriver driver= new ChromeDriver();
driver.get("http://google.com");
}
我收到此错误:
Exception in thread "main" java.lang.NoClassDefFoundError: okhttp3/ConnectionPool | Caused by: java.lang.ClassNotFoundException: okhttp3.ConnectionPool
我认为 jar 和依赖关系都可以,但我仍然收到此错误
最佳答案
错误说明了一切:
Exception in thread "main" java.lang.NoClassDefFoundError: okhttp3/ConnectionPool | Caused by: java.lang.ClassNotFoundException: okhttp3.ConnectionPool
什么是 NoClassDefFoundError
<强> NoClassDefFoundError
Java 中的 发生在 Java Virtual Machine
时 无法在运行时找到编译时可用的特定类。例如,如果我们已经解析了来自类的方法调用或访问类的任何静态成员,并且该类在运行时不可用,则JVM
会抛出 NoClassDefFoundError
。
该错误清楚地表明您错误配置了类路径。除非您告诉我们如何运行测试、您使用哪个构建器或 IDE 以及构建器配置文件或项目描述,否则很难调试问题的确切原因。
出了什么问题:
从上述所有要点可以清楚地看出,相关的 Class
或 Methods
已从一个来源解决 Compile Time
期间不可用 Run Time
。
如果存在多个源通过JDK
解析类和方法,就会出现这种情况。 / Maven
/ Gradle
。
Selenium 对 okhttp 的依赖
此时值得一提的是,selenium-java-3.9.x 客户端确实依赖于okhttp,您可以找到 dependency list here .
还需要注意的是:
根据 Can't launch chrome browser using latest selenium 3.9.0 启动 Chrome 时出现一些问题.
为了解决 Selenium v3.9.1 中的问题,OkHttp 支持的实例现在可以连接到需要授权的服务器(基于 PR #5444) .
解决方案:
这里有几个步骤可以解决NoClassDefFoundError - okhttp3/ConnectionPool
错误:
- 使用构建工具时,例如<强>
Maven
或Gradle
,删除所有External JARs
来自Java Build Path
。 <强>Maven
或Gradle
将下载并解决所有必需的依赖项。 - 如果使用
Selenium JARs
在Java Project
内 仅添加必需的External JARs
在Java Build Path
内并删除未使用的。 - 使用时
Maven
,或者使用<artifactId>selenium-java</artifactId>
或<artifactId>selenium-server</artifactId>
。避免同时使用两者。 - 将 JDK 升级到最新级别 JDK 8u162 .
- 将Selenium升级到当前级别 Version 3.10.0 .
- 升级 ChromeDriver ChromeDriver v2.37级别。
- 将 Chrome 版本保持在 Chrome v64-66 级别。 (as per ChromeDriver v2.37 release notes)
- 通过IDE清理您的项目工作区,并仅使用所需的依赖项重建项目。
- 使用CCleaner工具可以清除执行测试套件之前和之后的所有操作系统杂务。
- 如果您的基本 Chrome 版本太旧,请通过 Revo Uninstaller 卸载它并安装 Chrome 的最新 GA 和发布版本。
- 执行你的
@Test
.
关于selenium - 线程 "main"java.lang.NoClassDefFoundError : okhttp3/ConnectionPool with Selenium and Java 中出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59865896/