提问人:John Pj 提问时间:11/4/2017 最后编辑:John Pj 更新时间:4/20/2022 访问量:18431
Selenium Webdriver + Java - Eclipse:java.lang.NoClassDefFoundError
Selenium Webdriver + Java - Eclipse: java.lang.NoClassDefFoundError
问:
我从这里安装了 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
我不知道如何解决这个问题,你能帮忙解决它,以便我能够运行我的基本脚本吗?
答:
似乎最新的 () Selenium-Java zip 文件在 lib 文件夹中包含较少的 jar。 包含 10 个 lib jar,但仅包含 7 个 jar。v3.7
v3.6
v3.7
导致操作所有问题的丢失 jar 是“httpcore-4.4.6.jar”。我不确定移除罐子是否是故意的。也许已经赶上了看到.chromedriver
Selenium java 3.7
我同时使用时间.不要忘记添加 /lib 文件夹。Selenium Java 3.6
http://selenium-release.storage.googleapis.com/3.6/selenium-java-3.6.0.zip
评论
java.lang.NoClassDefFoundError
当 JRE 找不到类时观察到。
简单来说,所需的 OR 文件不可用。从您分享的快照中可以明显看出,您已经尝试添加与 Java 客户端相关的 jar。imports
jar
在这种情况下,您需要按照以下步骤操作:
- 删除所有引用以前版本的Selenium独立服务器和Selenium Java客户端的jar
- 仅导入 selenium-server-standalone-3.7.0。
- 在 IDE 的“项目”菜单中,选择“自动生成”选项,然后对所有项目执行该选项。
Clean
- 执行测试。
我添加了 3.6 版中缺少的三个 jar 并修复了所有内容。http://selenium-release.storage.googleapis.com/3.6/selenium-java-3.6.0.zip
将 Appium java-client 更新到 7.3.0,将 Selenium-java 更新到 3.141.59,这解决了我的问题,希望它有所帮助。
我遇到了同样的问题。对我来说,它没有找到 WebDriver。当我将库导入类路径以外的位置时,似乎发生了这种情况。然后我打开了一个新项目,转到了 Properties>Java Build Path>Libraries。这次我在 classpath 下导入了库。现在它工作正常。
对于那些将 Appium Java 客户端与 Selenium 一起使用的用户,不要尝试在 pom.xml 中一起导入 Java 客户端和 selenium 依赖项,您已经与 java 客户端依赖项一起导入了 Selenium 依赖项,您只需要在 pom.xml 中导入 Java 客户端依赖项,它应该可以工作。 参考资料: https://mvnrepository.com/artifact/io.appium/java-client/7.6.0
对我来说,这个问题是通过将外部 jar(selenium-java jar 文件)添加到“Classpath”而不是“Modulepath”来解决的
评论
RegistryBuilder