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
oGradle
, elimine todos losGradle
External JARs
de laJava Build Path
.Maven
oGradle
descargarán y resolverán todas las dependencias requeridas. -
Si utiliza
Selenium JARs
dentro de unJava Project
agregue solo losExternal JARs
necesarios dentro de laJava 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 depom.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 hagamaven clean
,maven install
y luegomaven 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 enselenium-api-{version}.jar
en la carpetaseleniumhq/selenium/selenium-api
. -
org.openqa.selenium.firefox
es el paquete enselenium-firefox-driver-{version}.jar
en la carpetaseleniumhq/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.