java maven selenium selenium-webdriver

Excepción en el hilo "principal" java.lang.NoClassDefFoundError: org/openqa/selenium/WebDriver



maven selenium-webdriver (6)

¿Qué es NoClassDefFoundError

NoClassDefFoundError en Java ocurre cuando Java Virtual Machine no puede encontrar una clase particular en tiempo de ejecución que estaba disponible en tiempo de compilación. Por ejemplo, si hemos resuelto una llamada a un método desde una clase o accediendo a algún miembro estático de una Clase y esa Clase no está disponible durante el tiempo de ejecución, JVM arrojará NoClassDefFoundError .

El error que estás viendo es:

Exception in thread "main" java.lang.NoClassDefFoundError: org/openqa/selenium/WebDriver

Esto indica claramente que Selenium está tratando de resolver la clase particular en tiempo de ejecución desde org/openqa/selenium/WebDriver que ya no está disponible.

Como mencionó al buscar en la carpeta ~/.m2/repository , la estructura de carpetas maven para Selenium v3.7.1 (en Windows) es la siguiente:

C:/Users/<user_name>/.m2/repository/org/seleniumhq/selenium/selenium-java/3.7.1

Entonces, cuando vea una carpeta seleniumhq , es bastante esperado.

Qué salió mal :

De todos los puntos mencionados anteriormente, está claro que la Class o los Methods relacionados se resolvieron desde un Compile Time origen que no estaba disponible durante el Run Time .

Esta situación ocurre si hay presencia de múltiples fuentes para resolver las clases y métodos a través de JDK / Maven / Gradle .

Solución:

Aquí hay algunos pasos para resolver NoClassDefFoundError :

  • Mientras utiliza una herramienta de compilación, por ejemplo, Maven o Gradle , elimine todos los Gradle External JARs de la Java Build Path . Maven o Gradle descargarán y resolverán todas las dependencias requeridas.
  • Si utiliza Selenium JARs dentro de un Java Project agregue solo los External JARs necesarios dentro de la Java Build Path y elimine el que no se utiliza.
  • Mientras usa Maven , use <artifactId>selenium-java</artifactId> o <artifactId>selenium-server</artifactId> . Evite usar ambos al mismo tiempo.
  • Elimine la otra <dependency> no deseada de pom.xml
  • Limpie periódicamente el Project Workspace dentro de su IDE solo para construir su proyecto con las dependencias requeridas.
  • Use la herramienta CCleaner para borrar las tareas del sistema operativo periódicamente.
  • Mientras ejecuta un Maven Project siempre haga maven clean , maven install y luego maven test

He agregado la dependencia Selenium más actualizada en mi pom.xml

<dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>3.7.1</version> </dependency>

Ejecuté mvn clean install dentro del directorio con mi pom.xml y también importé las clases correctas en mi clase de aplicación según la documentación de Selenium

import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver;

Sin embargo, cuando intento ejecutar mi método principal, aparece el siguiente error

Exception in thread "main" java.lang.NoClassDefFoundError: org/openqa/selenium/WebDriver

Miro en mi carpeta ~ / .m2 / repository y no veo una carpeta openqa pero en su lugar veo una carpeta seleniumhq.

¿Por qué Maven no instaló la carpeta openqa y por qué la documentación dice importar desde org.openqa ... cuando eso nunca existe en mi repositorio jar? Estoy muy confundido, solo quiero poder importar selenio Webdriver con éxito mientras lo tengo en mi repositorio local.


¿Estás usando un IDE o estás trabajando desde la línea de comandos? En Eclipse, por ejemplo, puede forzar la descarga de todas las dependencias haciendo clic derecho en su proyecto, yendo al elemento de menú Maven y luego seleccionando Actualizar proyecto. Luego marque la casilla de verificación "Forzar actualización de instantáneas / lanzamientos".

Si está abriendo desde la línea de comando, haga lo siguiente:

mvn clean install -U

de su ruta de proyecto.


Lo que funcionó para mí fue agregar esta dependencia a pom.xml:

<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>25.0-jre</version> </dependency>


Solo tiene dependencia de selenium-java . Para usar la funcionalidad completa, debe importar todas las dependencias de selenio

<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-chrome-driver --> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-chrome-driver</artifactId> <version>${selenium.version}</version> </dependency> <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java --> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>${selenium.version}</version> </dependency> <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-server --> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-server</artifactId> <version>${selenium.version}</version> </dependency> <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-firefox-driver --> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-firefox-driver</artifactId> <version>${selenium.version}</version> </dependency> <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-api --> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-api</artifactId> <version>${selenium.version}</version> </dependency> <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-remote-driver --> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-remote-driver</artifactId> <version>${selenium.version}</version> </dependency> <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-support --> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-support</artifactId> <version>${selenium.version}</version> </dependency>


Tuve experiencia con esta Exception in thread "main" java.lang.NoClassDefFoundError: org/openqa/selenium/WebDriver error.

Cuando recibí este error, inicié mi aplicación en IntelijIDEA usando Jar en Editar configuración.

Y el error fue:

Exception in thread "main" java.lang.NoClassDefFoundError: org/openqa/selenium/WebDriver at project.Main.main(Main.java:45) Caused by: java.lang.ClassNotFoundException: org.openqa.selenium.WebDriver at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 1 more

Entonces, agregué en lugar de Jar -> Application : me ayuda a resolver el error.

Nota : mi dependencia era como

<dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>2.53.1</version> </dependency>

Para resumirlo y recomendarlo como solución: creo que este error aparece debido a conflictos de dependencias de varias bibliotecas. Por lo tanto, debe actualizar todo en POM, eliminar / comentar dependencias innecesarias y finalmente reconstruir artefactos y recrear jar correctamente.

También intente cambiar la versión de Selenium, ya que las versiones anteriores pueden entrar en conflicto con las nuevas librerías.


  • org.openqa.selenium es el paquete en selenium-api-{version}.jar en la carpeta seleniumhq/selenium/selenium-api .
  • org.openqa.selenium.firefox es el paquete en selenium-firefox-driver-{version}.jar en la carpeta seleniumhq/selenium/selenium-firefox-driver .

Por lo tanto, no hay una carpeta openqa, es solo el nombre del paquete debajo de la carpeta seleniumhq, debería revisar estos jar.

Es difícil decir qué causó la excepción NoClassDefFoundError sin la estructura del proyecto y los detalles del código. La excepción no es lo mismo que ClassNotFoundException . Quizás esta respuesta https://.com/a/5756989/5374508 sería útil.