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 ou Gradle , remova todos os External JARs do Java Build Path . Maven ou Gradle e resolverá todas as dependências necessárias.
  • Se você estiver usando Selenium JARs em um Java Project inclua apenas os External JARs necessários no Java 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 do pom.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 sempre maven clean , maven install e então maven 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>






selenium-webdriver