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

时间:2018-06-06 22:07:04

标签: maven selenium selenium-webdriver

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

下面的Selenium代码与TestNG:

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运行时非常好 - 运行为 - 测试NG测试。

但是当通过Maven运行时 - 从cmd提示符下的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>

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

什么是NoClassDefFoundError

JVM 无法在运行时找到特定的类时,会发生

NoClassDefFoundError 编译时< / em>的。例如,如果我们已经解析了来自 Class 的方法调用或访问 Class 的任何静态成员,并且 Class 在<期间< em> runtime 然后 JVM 将抛出 NoClassDefFoundError

您看到的错误是:

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

这清楚地表明Selenium正试图在运行时从 org/openqa/selenium/firefox/FirefoxDriver 解决特定的 FirefoxDriver 不可用。

出了什么问题:

如果通过 JDK / Maven / {存在多个来源来解析类和方法,则会出现这种情况{1}}

pom.xml ,很明显您已为 FirefoxDriver Class 添加了多个依赖项,如下所示:

  • <强> Gradle

    <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>
  • 此外,您还添加了所有jar文件

从上述所有观点可以清楚地看出,相关的 <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-server</artifactId> <version>3.12.0</version> </dependency> Class 是从一个来源解决的。 strong>编译时间,在运行时期间无效。

解决方案:

以下是解决 NoClassDefFoundError 的几个步骤:

  • 使用构建工具时,例如 Maven Gradle 删除 Java Build Path 中的所有外部JAR Maven Gradle 将下载配置文件中提到的所有依赖项(例如Methods)以解析 Classes 方法
  • 如果在 Java Project 中使用 Selenium JAR ,只需在 Java Build Path 中添加必需的外部JAR ,删除未使用和重复的外部JAR
  • 如果您使用 FirefoxDriver ,请使用 pom.xml <artifactId>selenium-java</artifactId> 。避免同时使用两者。
  • <artifactId>selenium-server</artifactId>
  • 中删除不需要的和重复的
  • 通过 IDE 清理您的项目工作区仅使用所需的依赖项重建项目
  • 使用CCleaner工具清除执行 Test Suite 之前和之后的所有操作系统杂务。
  • 如果您的基本 Web客户端版本太旧,请通过Revo Uninstaller将其卸载并安装最新的GA和已发布的 Web客户端版本。
  • 进行系统重启
  • 执行 Maven项目时,请始终按顺序执行顺控:

    • pom.xml
    • maven clean
    • maven install

您可以在以下网址找到相关讨论:

答案 1 :(得分:0)

我使用的是eclipse 09-2019,它是最新的Eclipse,安装了最新的JDK 13,以及最新的硒罐文件3.141.59,在尝试了类似问题的所有答案后,我安装了其他JDK来解决此问题。然后经过4天的尝试,安装了eclipse霓虹灯版本(https://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/neon/3/eclipse-java-neon-3-win32-x86_64.zip&mirror_id=105)并使用了Selenium-Java 3.5.2 jar文件(https://jar-download.com/artifacts/org.seleniumhq.selenium/selenium-java/3.5.2/source-code),现在Alhamdullilah可以正常使用。 我也不知道根本或根本原因是什么错误,但是现在已经解决了。 希望对您有帮助