Selenium-TestNG-Maven - 获取“java.lang.NoClassDefFoundError:org/openqa/selenium/firefox/FirefoxDriver”

2023-11-30

这是我的第一个使用 TestNG 和 Maven 的 selenium 脚本。 创建了一个简单的“Hello World”代码和一个仅检查谷歌页面标题的硒测试代码。

下面是带有 TestNG 的 Selenium 代码:

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.Test;

public class HelloTest {
    @Test
    public void testOne() {
        //WebDriver d=new FirefoxDriver();
        System.setProperty("webdriver.gecko.driver","D:\\Firefox Driver\\geckodriver-v0.17.0-win64\\geckodriver.exe");
        WebDriver d=new FirefoxDriver();
        d.get("https://www.google.com");
        System.out.println("This is first TestNG");

    }
}

当通过 eclipse - Run As - Test NG 测试运行时,这工作得非常好。

但是当从 cmd 提示符运行 Maven - mvn clean install 时,我收到以下错误

T E S T S
-------------------------------------------------------

Running HelloTest
Configuring TestNG with: TestNG652Configurator
Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.94 sec <<< FAILURE! - in HelloTest
testOne(HelloTest)  Time elapsed: 0.032 sec  <<< FAILURE!
java.lang.NoClassDefFoundError: org/openqa/selenium/firefox/FirefoxDriver
    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)
    at HelloTest.testOne(HelloTest.java:11)

它显示错误于WebDriver d=new FirefoxDriver();。不确定问题出在哪里。添加了所有 jar 文件,检查了构建路径,所有 jar 都在那里。下面是我的 POM 文件。

<?xml version="1.0"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.demo.micky</groupId>
    <artifactId>MavenDemoTwo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.18.1</version>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>6.9.8</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>3.12.0</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-firefox-driver</artifactId>
            <version>3.12.0</version>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-server</artifactId>
            <version>3.12.0</version>
        </dependency>
        <dependency>
            <artifactId>guava</artifactId>
            <groupId>com.google.guava</groupId>
            <type>jar</type>
            <version>15.0</version>
        </dependency>
    </dependencies>
</project>

非常感谢任何帮助。


什么是 NoClassDefFoundError

没有发现类定义错误在Java中发生时JVM无法找到特定班级runtime可以在编译时间。例如,如果我们已经解决了来自Class或访问任何静态成员Class然后Class期间不可用runtime then JVM会扔没有发现类定义错误.

您看到的错误是:

java.lang.NoClassDefFoundError: org/openqa/selenium/firefox/FirefoxDriver

这清楚地表明Selenium正在努力解决特定的问题Firefox驱动程序 Class在运行时从org/openqa/selenium/firefox/FirefoxDriver这是不可用的。

什么地方出了错 :

如果存在多个源来解析类和方法,就会发生这种情况JDK/Maven/Gradle.

来自pom.xml很明显,您已经添加了多个依赖项Firefox驱动程序 Class如下:

  • <artifactId>selenium-java</artifactId>:

    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>3.12.0</version>
        <scope>test</scope>
    </dependency>
    
  • <artifactId>selenium-firefox-driver</artifactId>:

    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-firefox-driver</artifactId>
        <version>3.12.0</version>
    </dependency>
    
  • <artifactId>selenium-server</artifactId>:

    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-server</artifactId>
        <version>3.12.0</version>
    </dependency>
    
  • 此外,您还有添加了所有jar文件.

从上述各点可以清楚地看出,相关Class or Methods已从一个来源解决编译时间期间不可用Run Time.

解决方案 :

这里有几个步骤可以解决没有发现类定义错误 :

  • 使用构建工具时,例如Maven or Gradle, remove一切外部 JAR来自Java 构建路径. Maven or Gradle将下载配置文件中提到的所有依赖项(例如pom.xml)来解决Classes and Methods.
  • 如果使用硒 JAR在一个Java项目仅添加必需的外部 JARJava 构建路径并删除未使用的和重复的外部 JAR.
  • 如果您正在使用Firefox驱动程序使用任一<artifactId>selenium-java</artifactId> or <artifactId>selenium-server</artifactId>。避免同时使用两者。
  • 删除不需要的和重复的 from pom.xml
  • Clean your 项目工作区通过你的IDE and Rebuild您的项目仅具有所需的依赖项。
  • Use CCleaner工具可以清除执行之前和之后的所有操作系统杂务测试套件.
  • 如果你的基地网页客户端版本太旧,然后通过卸载雷沃卸载程序并安装最新的 GA 和发布版本网页客户端.
  • Take a 系统重启.
  • 当你执行一个Maven项目始终按顺序执行以下操作:

    • maven clean
    • maven install
    • maven test

您可以在以下位置找到相关讨论:

  • 线程“main”中的异常 java.lang.NoClassDefFoundError: org/openqa/selenium/WebDriver
  • 如何解决java.lang.NoClassDefFoundError?硒
  • java.lang.NoClassDefFoundError:com/google/common/base/Function
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Selenium-TestNG-Maven - 获取“java.lang.NoClassDefFoundError:org/openqa/selenium/firefox/FirefoxDriver” 的相关文章

随机推荐

  • 使用延长路径安全吗?

    我只是偶然发现本文MSDN 上说路径可以是 259 个字符 NUL 终止符 但是如果您使用 作为前缀 WinAPI 允许您使用 最大总路径长度为 32 767 个字符 渴望看到它工作 我尝试使用资源管理器中的前缀 在 XP SP3 上 但它
  • 稀疏多维数据表示

    我正在开发一种使用 4 维数据的心脏模拟工具 即 3D 空间中位置的多个 3 30 变量 我现在添加一些组织几何体 这将在要模拟的组织之外的包含 3D 框中留下超过 2 3 的点 因此我需要一种有效存储活动点而不是其他点的方法 至关重要的是
  • 在浏览器中打开 Word 文档并进行内联编辑

    可能的重复 您可以在浏览器中对Word文档进行复杂的编辑吗 Hi All 是否有任何免费工具可以允许在浏览器中打开和编辑Word文档 我正在使用 ASP Net 2008 Express IDE Thanks 这个问题的解决方案已经存在 谷
  • 使用 Fabricjs 旋转图像时未更新左上角坐标

    当我在fabricjs中旋转图像时 左上角的坐标在旋转后不会更新 相反 图像的左上角仍然指的是旧点 我认为它应该根据图像的新位置重新计算左上角 有办法实现这一点吗 任何帮助表示赞赏 下面是图像旋转的代码 function rotate ac
  • 如何在system、exec或shell_exec中运行多个命令?

    我正在尝试从 php 运行这样的 shell 命令 ls a grep mydir 但php只使用第一个命令 有没有办法强制 php 将整个字符串传递给 shell 我不关心输出 http www php net manual en fun
  • SQL如何比较两个表中的数据并得到两个表之间不同的结果

    有2张桌子 表a和b A 包含 msisdn 名字 名字 姓氏 regdate 注册数据 表b也有相同的字段 我想比较这两个表 msisdn 名字和姓氏字段 如果表 A 中的 msisdn X 的名字为 jim 姓氏为 halpert 并且
  • Spring过滤器没有被调用

    我在我的应用程序中添加了 CORS 过滤器 但它似乎没有被执行 没有打印 过滤器是这样的 Component public class SimpleCORSFilter extends OncePerRequestFilter Overri
  • Doctrine DQL 动态 ORDER BY 参数

    我尝试将 ORDER BY 列作为 DQL 中的参数传递 如下所示 this gt em gt createQuery SELECT t FROM Entities Topic t ORDER BY order gt setParamete
  • 将选项框的值和键作为参数发送?

    我想在提交表单时发送选项框的值和键 我觉得这应该很简单 但我不确定如何去做 下面是我的表单中的一个片段 用于演示我所引用的内容
  • 我可以获得已安装我的 Tab 应用程序的主页列表吗?

    我曾多次看到类似的问题 但通常是人们试图找出哪个页面当前正在访问他们的选项卡应用程序 您可以通过检查signed request来做到这一点 我正在尝试构建一个 UI 向用户显示他 她是管理员的所有页面 然后显示其中哪些页面已经安装了我的选
  • 为什么 {key:value}["key"] 不起作用?

    1 key value key 2 key value key 我想知道 JS 解释器如何处理上面的代码 以及为什么1不起作用 为什么2 works 我假设您问这个问题是因为您在 JavaScript REPL shell 中看到了这种效果
  • 使用 Eloquent ORM / laravel 准备好的语句

    我是 Laravel 新手 并使用它作为输入查询 DB table user input gt insert array array fname gt Input get Name lname gt no email gt Input ge
  • Blackberry HttpConnection 超时

    在我的 Blackberry 4 5 项目中 我通过 Connector open 创建 HttpConnection 如果我通过 MDS 连接 我可以在 URL 的附加参数中指定 ConnectionTimeout 如果使用直接 TCP
  • .htaccess 重定向锚页面/page#anchor 到 url

    我如何重定向page page anchor to http www example com page page 我尝试了以下代码 但它不起作用 RewriteRule page page anchor http www example c
  • 在python中将多个png合并到一个pdf中

    我想知道是否有一种简单的方法可以在 python 中将多个 png 图像合并到一个 pdf 中 我希望每个图像都是 pdf 中的一页 pypdf 是为此使用的最佳库吗 任何帮助将不胜感激 Thanks from PIL import Ima
  • 将军事时间转换为标准时间(R 中的小时和分钟)

    我有以下一组时间数据 必须将其转换为 12 小时格式 814 830 1835 1730 1442 820 1430 930 1550 1725 1615 1010 1319 1755 820 1955 1850 710 例如 1300 下
  • 禁用Android图像自动旋转

    当我从图库中选择图像并在 ImageView 中显示图像时 某些图像会自动旋转 90 度 我如何禁用此功能 Code Override protected void onCreate Bundle savedInstanceState su
  • 如何在 C# 中将 XML 动态绑定到 WPF DataGrid

    我四处寻找这一点 但我能找到的所有示例都使用了 XAML 这使得解决方案过于静态 这是我想做的 我想从运行时指定的 XML 文件填充 DataGrid 的列 行和属性 DataGrid 的属性没有任何内容是可以修复的 XML 将其驱动到最后
  • 从长字符串中过滤数据(vcard)

    我正在扫描 vcard 二维码中的数据 我收到的字符串总是看起来像这样 BEGIN VCARD VERSION 2 1 N Lastname Firstname FN Firstname Lastname ORG Lol Group TIT
  • Selenium-TestNG-Maven - 获取“java.lang.NoClassDefFoundError:org/openqa/selenium/firefox/FirefoxDriver”

    这是我的第一个使用 TestNG 和 Maven 的 selenium 脚本 创建了一个简单的 Hello World 代码和一个仅检查谷歌页面标题的硒测试代码 下面是带有 TestNG 的 Selenium 代码 import org o