thread - selenium for java
Exceção no segmento “main” java.lang.NoClassDefFoundError: org/openqa/selenium/WebDriver (4)
O que é
NoClassDefFoundError
NoClassDefFoundError
em Java ocorre quando o
Java Virtual Machine
não consegue localizar uma determinada classe em tempo de execução que estava disponível em tempo de compilação.
Por exemplo, se tivermos resolvido uma chamada de método de uma classe ou acessado qualquer membro estático de uma Classe e essa Classe não estiver disponível durante o tempo de execução, a
JVM
lançará
NoClassDefFoundError
.
O erro que você está vendo é:
Exception in thread "main" java.lang.NoClassDefFoundError:
org/openqa/selenium/WebDriver
Isso indica claramente que o
Selenium
está tentando resolver a classe específica em tempo de execução a partir do
org/openqa/selenium/WebDriver
que não está mais disponível.
Como você mencionou de olhar para a pasta
~/.m2/repository
, a estrutura de pastas do maven para o
Selenium v3.7.1
(no Windows) é a seguinte:
C:\Users\<user_name>\.m2\repository\org\seleniumhq\selenium\selenium-java\3.7.1
Então, quando você vê uma pasta
seleniumhq
, é praticamente esperado.
O que deu errado?
De todos os pontos mencionados acima, fica claro que a
Class
ou os
Methods
relacionados foram resolvidos a partir de um
Compile Time
origem que não estava disponível durante o
Run Time
.
Essa situação ocorre se houver presença de várias origens para resolver as classes e métodos por meio do
JDK
/
Maven
/
Gradle
.
Solução:
Aqui estão alguns passos para resolver
NoClassDefFoundError
:
-
Ao usar uma ferramenta de compilação, por exemplo,
Maven
ouGradle
, remova todos osExternal JARs
doJava Build Path
.Maven
ouGradle
e resolverá todas as dependências necessárias. -
Se você estiver usando
Selenium JARs
em umJava Project
inclua apenas osExternal JARs
necessários noJava Build Path
e remova o não utilizado. -
Ao usar o
Maven
, use<artifactId>selenium-java</artifactId>
ou<artifactId>selenium-server</artifactId>
. Evite usar os dois ao mesmo tempo. -
Remova a outra
<dependency>
indesejada dopom.xml
-
Limpe seu
Project Workspace
periodicamente em seu IDE apenas para construir seu projeto com as dependências necessárias. -
Use a ferramenta
CCleaner
para limpar as tarefas do SO periodicamente. -
Enquanto você executa um
Maven Project
faça sempremaven clean
,maven install
e entãomaven test
Eu adicionei a dependência de Selenium mais atualizada no meu pom.xml
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.7.1</version>
</dependency>
Eu executei o mvn clean install dentro do diretório com o meu pom.xml e também importei as classes corretas na minha classe app, de acordo com a documentação do Selenium
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
No entanto, quando eu tento executar o meu método principal, recebo o seguinte erro
Exception in thread "main" java.lang.NoClassDefFoundError:
org/openqa/selenium/WebDriver
Eu olho na minha pasta ~ / .m2 / repository e não vejo uma pasta openqa mas ao invés disso eu vejo uma pasta seleniumhq.
Por que o maven não instalou a pasta openqa e por que a documentação diz para importar do org.openqa ... quando isso nunca existe no meu repositório jar. Estou muito confuso, eu só quero ser capaz de importar o selênio Webdriver com sucesso ao tê-lo no meu repositório local.
Eu tive experiência com esta
Exception in thread "main" java.lang.NoClassDefFoundError: org/openqa/selenium/WebDriver
erro
Exception in thread "main" java.lang.NoClassDefFoundError: org/openqa/selenium/WebDriver
.
Quando recebi esse erro, lancei meu aplicativo no IntelijIDEA usando
Jar
em Editar configuração.
E o erro foi:
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
Então, eu adicionei em vez de
Jar
->
Application
: Isso me ajuda a resolver o erro.
Nota : minha dependência era como
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>2.53.1</version>
</dependency>
Para resumir e recommandation como solução: Eu acho que esse erro aparece devido a dependências de conflitos de várias bibliotecas. Portanto, você precisa atualizar tudo no POM, excluir / comentar dependências desnecessárias e, finalmente, reconstruir os artefatos e recriar o jar corretamente.
Também tente mudar a versão do Selenium, porque as versões mais antigas podem entrar em conflito com as mais recentes das outras libs.
Você está usando um IDE ou trabalhando a partir da linha de comando? No Eclipse, por exemplo, você pode forçar o download de todas as dependências clicando com o botão direito do mouse no seu projeto, indo para o item de menu Maven e selecionando Update Project. Em seguida, marque a caixa de seleção "Forçar atualização de instantâneos / versões".
Se você estiver abrindo a partir da linha de comando, faça:
mvn clean install -U
do caminho do seu projeto.
Você tem apenas dependência de
selenium-java
.
Para usar a funcionalidade completa, você precisa importar todas as dependências de selênio
<!-- 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>