我有一个简单的 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
我认为 jars 和 Dependency 没问题,但我仍然得到这个错误
最佳答案
错误说明了一切:
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 卸载它。并安装最新的 GA 和发布版本的 Chrome。
- 执行你的
@Test
.
关于selenium - 线程 "main"java.lang.NoClassDefFoundError : okhttp3/ConnectionPool with Selenium and Java 中的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49404956/