selenium - 线程 "main"java.lang.NoClassDefFoundError : okhttp3/ConnectionPool with Selenium and Java 中的异常

标签 selenium selenium-webdriver webdriver noclassdeffounderror okhttp

我有一个简单的 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 .

还需要注意的是:

解决方案:

这里有几个步骤可以解决 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/

相关文章:

selenium - 如何通过 Java 使用 XPath 和 Selenium WebDriver 单击 SVG 元素

python - 使用 Robot Framework 从 Python 中的方法返回值

java - ChromeDriver 文件上传示例

css - selenium webdriver 是否支持 css 包含?

c# - 在 C# 中配置 BrowserMobProxy

java - 如何使用 Selenium Webdriver Java 查找表行号

javascript - Browser.wait() 直到 .getAttribute() 返回 true

python - 无法使用 Python 通过 Robot Framework 连接到 localhost :xxxx from session not created: Chrome version must be >= 69. 0.3497.0 上的 chrome

javascript - 如何在 Python Selenium 中输入自动填充的文本字段

java - 在 html 上,表格形式的数据,我如何使用 selenium web-driver java 单击并打印第二个位置的数据