Selenium-TestNG-Maven - Получение "java.lang.NoClassDefFoundError: org / openqa / selenium / firefox / FirefoxDriver" - PullRequest
0 голосов
/ 07 июня 2018

Это мой первый сценарий селена с использованием TestNG и Maven.Создан простой код «Hello World» и тестовый код селена, который просто проверяет заголовок страницы Google.

Селенизированный код ниже с 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 - Run As - тестовый тест NG.

Но при запуске через Maven - mvn clean install из командной строки cmd я получаю сообщение об ошибке ниже

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)

На * 1011 отображается ошибка*.Не уверен, где проблема.Добавил все файлы 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>

Любая помощь очень ценится.

1 Ответ

0 голосов
/ 07 июня 2018

Что такое NoClassDefFoundError

NoClassDefFoundError в Java возникает, когда JVM не может найти определенный класс в время выполнения , которое было доступно в время компиляции .Например, если мы разрешили вызов метода из Class или получили доступ к любому статическому члену Class и что Class недоступен во время выполнения затем JVM сгенерирует NoClassDefFoundError .

Ошибка, которую вы видите:

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

Это ясно указывает на то, что Seleniumпытается определить конкретный FirefoxDriver Класс во время выполнения с org/openqa/selenium/firefox/FirefoxDriver, который недоступен.

Что пошло не так:

Эта ситуация возникает, если имеется несколько источников для разрешения классов и методов с помощью JDK / Maven / Gradle.

Из pom.xml совершенно очевидно, что вы добавили несколько зависимостей для FirefoxDriver Класс следующим образом:

  • <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 или Methods были разрешены из одного источника в Время компиляции , которое не было доступно в течение Время выполнения .

Решение:

Вот несколько шагов для решения NoClassDefFoundError :

  • при использовании инструмента сборкинапример, Maven или Gradle , удалить все Внешние JAR-файлы из Java Build Path . Maven или Gradle загрузит все зависимости, упомянутые в файле конфигурации (например, pom.xml), для разрешения Классы и Методы .
  • При использовании Selenium JAR в Java Project требуется только добавить Внешние JAR в Java Build Path и удалитьнеиспользуемые и повторяющиеся внешние JAR-файлы .
  • Если вы используете FirefoxDriver , используйте либо <artifactId>selenium-java</artifactId>, либо <artifactId>selenium-server</artifactId>.Избегайте использования обоих одновременно.
  • Удалите ненужные и дублированные из pom.xml
  • Очистите ваш Project Workspace через IDE и Перестройка вашего проекта только с необходимыми зависимостями.
  • Использование CCleaner инструмент для удаления всех рутинных операций ОС до и после выполнения Test Suite .
  • Если ваша базовая версия Web Client устарела, удалите еечерез Revo Uninstaller и установите последнюю версию GA и выпущенную версию Веб-клиент .
  • Возьмите Перезагрузка системы .
  • При выполнении Maven Project всегда выполняйте фоллинг в последовательности:

    • maven clean
    • maven install
    • maven test

Вы можете найти соответствующие обсуждения в:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...