Selenium Webdriver + Java - Eclipse:java.lang.NoClassDefFoundError

Selenium Webdriver + Java - Eclipse: java.lang.NoClassDefFoundError

提问人:John Pj 提问时间:11/4/2017 最后编辑:John Pj 更新时间:4/20/2022 访问量:18431

问:

我从这里安装了 JDK:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html(适用于 Windows x64 的此版本:Java SE 开发工具包 8u151)

我从这里下载了eclipse: http://www.eclipse.org/downloads/packages/eclipse-ide-java-developers/oxygenr(Windows 64位)

我在eclipse中打开了一个新项目:File->New->Java 项目

然后我从这里下载了 Selenium Java Jars: http://www.seleniumhq.org/download/ ---> java 语言

然后在eclipse中,我单击我的项目 ->属性 ->Java 构建路径 ->库选项卡 ->添加外部 JAR... -> 我转到“SeleniumDrivers\Java”库(在那里我保存了我下载的所有 JARS) -> 我检查了那里的所有文件: 这些文件

我点击了“确定”并在eclipse中创建了一个新类

然后我从这里下载了 chromedriver: http://www.seleniumhq.org/download

我解压缩了它并将其保存在这里:C:\Selenium\Drivers

这是我的剧本:

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class MainClass {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println("hi there\n");

        System.setProperty("webdriver.chrome.driver", 
        "C:/Selenium/Drivers/chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        driver.get("https://www.facebook.com");
    }

}

如您所见,这是一个非常基本的脚本,可打开 chrome 浏览器并导航到 facebook。

我运行了这个脚本并得到这个错误:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/http/config/RegistryBuilder
    at org.openqa.selenium.remote.internal.HttpClientFactory.getClientConnectionManager(HttpClientFactory.java:69)
    at org.openqa.selenium.remote.internal.HttpClientFactory.<init>(HttpClientFactory.java:57)
    at org.openqa.selenium.remote.internal.HttpClientFactory.<init>(HttpClientFactory.java:60)
    at org.openqa.selenium.remote.internal.ApacheHttpClient$Factory.getDefaultHttpClientFactory(ApacheHttpClient.java:242)
    at org.openqa.selenium.remote.internal.ApacheHttpClient$Factory.<init>(ApacheHttpClient.java:219)
    at org.openqa.selenium.remote.HttpCommandExecutor.getDefaultClientFactory(HttpCommandExecutor.java:93)
    at org.openqa.selenium.remote.HttpCommandExecutor.<init>(HttpCommandExecutor.java:72)
    at org.openqa.selenium.remote.service.DriverCommandExecutor.<init>(DriverCommandExecutor.java:63)
    at org.openqa.selenium.chrome.ChromeDriverCommandExecutor.<init>(ChromeDriverCommandExecutor.java:36)
    at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:181)
    at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:168)
    at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:123)
    at MainClass.main(MainClass.java:11)
Caused by: java.lang.ClassNotFoundException: org.apache.http.config.RegistryBuilder
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 13 more

我不知道如何解决这个问题,你能帮忙解决它,以便我能够运行我的基本脚本吗?

Java Eclipse Selenium-Web驱动程序 自动化

评论

1赞 Julian 11/4/2017
您是否考虑过使用像 Gradle 这样的构建系统?这样一来,您就不必手动管理依赖项了。在我看来,就像你获得的 jar,或者特别是你添加到项目中的 jar 不包括类所在的库。该类似乎在 Apache HttpCore jar 中,所以我会考虑环顾四周以确保您包含它,甚至在必要时下载它以查看它是否会影响您的结果。RegistryBuilder
0赞 John Pj 11/4/2017
嗨,谢谢,我包含了它,所以这不是我猜的问题
0赞 Julian 11/4/2017
它是否作为您下载的 webdriver jar 捆绑包的一部分提供?还是您将其下载为要包含的单独实体?如果您单独下载了它,请尝试确保它是与您正在使用的 webdriver 版本兼容的版本。不管是什么原因,无论哪个 jar 应该具有该类定义都是您的问题,并且您的修复很可能与它有某种程度的关系
0赞 JeffC 11/4/2017
Selenium for ChromeDriver 中 NoClassDefFoundError: org/apache/http/HttpEntity 的可能重复?

答:

1赞 StrikerVillain 11/4/2017 #1

似乎最新的 () Selenium-Java zip 文件在 lib 文件夹中包含较少的 jar。 包含 10 个 lib jar,但仅包含 7 个 jar。v3.7v3.6v3.7

导致操作所有问题的丢失 jar 是“httpcore-4.4.6.jar”。我不确定移除罐子是否是故意的。也许已经赶上了看到.chromedriverSelenium java 3.7

我同时使用时间.不要忘记添加 /lib 文件夹。Selenium Java 3.6

http://selenium-release.storage.googleapis.com/3.6/selenium-java-3.6.0.zip

评论

0赞 StrikerVillain 11/9/2017
@John Pj 问题已修复。您现在可以使用 3.7.1。github.com/SeleniumHQ/selenium/issues/5012
2赞 undetected Selenium 11/4/2017 #2

java.lang.NoClassDefFoundErrorJRE 找不到时观察到。

简单来说,所需的 OR 文件不可用。从您分享的快照中可以明显看出,您已经尝试添加与 Java 客户端相关的 jar。importsjar

在这种情况下,您需要按照以下步骤操作:

  1. 删除所有引用以前版本的Selenium独立服务器Selenium Java客户端的jar
  2. 仅导入 selenium-server-standalone-3.7.0
  3. IDE 的“项目”菜单中,选择“自动生成”选项,然后对所有项目执行该选项。Clean
  4. 执行测试。
0赞 Miroslav Trankov 11/7/2017 #3

我添加了 3.6 版中缺少的三个 jar 并修复了所有内容。http://selenium-release.storage.googleapis.com/3.6/selenium-java-3.6.0.zip

0赞 Pushkar Narayan 6/27/2020 #4

将 Appium java-client 更新到 7.3.0,将 Selenium-java 更新到 3.141.59,这解决了我的问题,希望它有所帮助。

0赞 Mohammed Jafar Sadik 12/23/2020 #5

我遇到了同样的问题。对我来说,它没有找到 WebDriver。当我将库导入类路径以外的位置时,似乎发生了这种情况。然后我打开了一个新项目,转到了 Properties>Java Build Path>Libraries。这次我在 classpath 下导入了库。现在它工作正常。

0赞 Ibrahim Mensi 12/23/2021 #6

对于那些将 Appium Java 客户端与 Selenium 一起使用的用户,不要尝试在 pom.xml 中一起导入 Java 客户端和 selenium 依赖项,您已经与 java 客户端依赖项一起导入了 Selenium 依赖项,您只需要在 pom.xml 中导入 Java 客户端依赖项,它应该可以工作。 参考资料: https://mvnrepository.com/artifact/io.appium/java-client/7.6.0

0赞 Ronwald 4/20/2022 #7

对我来说,这个问题是通过将外部 jar(selenium-java jar 文件)添加到“Classpath”而不是“Modulepath”来解决的

enter image description here