【问题标题】:ClassNotFoundException org.openqa.selenium.WebDriverClassNotFoundException org.openqa.selenium.WebDriver
【发布时间】:2014-10-01 02:15:41
【问题描述】:

当我运行 Arquillian 测试时出现错误:

java.lang.NoClassDefFoundError: Lorg/openqa/selenium/WebDriver;在 java.lang.Class.getDeclaredFields0(本机方法)在 java.lang.Class.privateGetDeclaredFields(Class.java:2570) 在 java.lang.Class.getDeclaredFields(Class.java:1903) 在 org.junit.runners.model.TestClass.getSortedDeclaredFields(TestClass.java:77) 在 org.junit.runners.model.TestClass.scanAnnotatedMembers(TestClass.java:70) 在 org.junit.runners.model.TestClass.(TestClass.java:57) 在 org.junit.runners.ParentRunner.createTestClass(ParentRunner.java:88) 在 org.junit.runners.ParentRunner.(ParentRunner.java:83) 在 org.junit.runners.BlockJUnit4ClassRunner.(BlockJUnit4ClassRunner.java:63) 在 org.jboss.arquillian.junit.Arquillian.(Arquillian.java:55) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native 方法)在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:408) 在 org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:104) 在 org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:86) 在 org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59) 在 org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26) 在 org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59) 在 org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:33) 在 org.junit.internal.requests.FilterRequest.getRunner(FilterRequest.java:36) 在 org.junit.runner.JUnitCore.run(JUnitCore.java:115) 在 org.jboss.arquillian.junit.container.JUnitTestRunner.execute(JUnitTestRunner.java:66) 在 org.jboss.arquillian.protocol.servlet.runner.ServletTestRunner.executeTest(ServletTestRunner.java:159) 在 org.jboss.arquillian.protocol.servlet.runner.ServletTestRunner.execute(ServletTestRunner.java:125) 在 org.jboss.arquillian.protocol.servlet.runner.ServletTestRunner.doGet(ServletTestRunner.java:89) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:687) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:790) 在 io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85) 在 io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:61) 在 io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) 在 org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78) 在 io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25) 在 io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:113) 在 io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:56) 在 io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25) 在 io.undertow.security.handlers.AuthenticationConstraintHandler.handleRequest(AuthenticationConstraintHandler.java:51) 在 io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:45) 在 io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:61) 在 io.undertow.servlet.handlers.security.ServletSecurityConstraintHandler.handleRequest(ServletSecurityConstraintHandler.java:56) 在 io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:58) 在 io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:70) 在 io.undertow.security.handlers.SecurityInitialHandler.handleRequest(SecurityInitialHandler.java:76) 在 io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25) 在 org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61) 在 io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25) 在 io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25) 在 io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:240) 在 io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:227) 在 io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:73) 在 io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:146) 在 io.undertow.server.Connectors.executeRootHandler(Connectors.java:177) 在 io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:727) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 在 java.lang.Thread.run(Thread.java:745) 引起: java.lang.ClassNotFoundException: org.openqa.selenium.WebDriver 来自 [来自服务模块加载器的模块“deployment.sp.war:main”] 在 org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:213) 在 org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:459) 在 org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:408) 在 org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:389) 在 org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:134) ... 56 更多

我的 pom.xml:

<!--Tests-->
<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>${version.junit}</version>
  <scope>test</scope>
</dependency>
<dependency>
  <groupId>org.jboss.arquillian.junit</groupId>
  <artifactId>arquillian-junit-container</artifactId>
  <scope>test</scope>
</dependency>
<dependency>
  <groupId>org.jboss.arquillian.extension</groupId>
  <artifactId>arquillian-drone-webdriver-depchain</artifactId>
  <type>pom</type>
  <scope>test</scope>
</dependency>
<dependency>
  <groupId>xerces</groupId>
  <artifactId>xercesImpl</artifactId>
  <version>2.11.0</version>
  <scope>test</scope>
</dependency>
<dependency>
  <groupId>org.wildfly</groupId>
  <artifactId>wildfly-arquillian-container-embedded</artifactId>
  <version>8.1.0.Final</version>
  <scope>test</scope>
</dependency>
<dependency>
  <groupId>org.jboss.arquillian.extension</groupId>
  <artifactId>arquillian-angularjs-graphene</artifactId>
  <version>1.2.0.Alpha1</version>
  <type>pom</type>
</dependency>
<dependency>
  <groupId>org.jboss.shrinkwrap.resolver</groupId>
  <artifactId>shrinkwrap-resolver-depchain</artifactId>
  <version>${version.shrinkwrap.resolvers}</version>
  <scope>test</scope>
  <type>pom</type>
</dependency>

我将测试网络存档打包如下:

public class Deployments {
  public static Archive createDeployment() {
    return ShrinkWrap.create(MavenImporter.class)
        .loadPomFromFile("/Users/alekspo/Documents/Development/Java/WildFly/sp/pom.xml")
        .importBuildOutput().as(WebArchive.class);
  }
}

知道为什么会出现这样的 NoClassDefFound 错误吗?

【问题讨论】:

    标签: java maven junit jboss jboss-arquillian


    【解决方案1】:

    我今天也遇到了同样的问题。这绝对不是依赖问题。堆栈跟踪已经暗示 Arquillian 正在尝试在服务器本身中运行 Drone 测试,而不是充当客户端。这首先很奇怪,因为我们实际上想将它作为客户端运行。 Arquillian 的指南Functional Testing using Drone and Graphene 中描述了如何做到这一点:

    启用客户端模式

    如何激活客户端模式?很简单。您可以将部署标记为不可测试,这意味着 Arquillian 不会丰富存档,或者您可以使用注释 @RunAsClient 标记指定的方法。

    换句话说,你需要任何一个

    @RunWith(Arquillian.class)
    public class Test {
    
        @Deployment(testable = false)
        public static Archive<?> createDeployment() {
            // ...
        }
    
        @Test
        public void test() {
            // ...
        }
    
    }
    

    @RunWith(Arquillian.class)
    public class Test {
    
        @Deployment
        public static Archive<?> createDeployment() {
            // ...
        }
    
        @Test
        @RunAsClient
        public void test() {
            // ...
        }
    
    }
    

    这至少为我解决了你的问题。

    【讨论】:

      【解决方案2】:

      您需要为 selenium 添加 maven 依赖项。

      <dependency>
          <groupId>org.seleniumhq.selenium</groupId>
          <artifactId>selenium-java</artifactId>
          <version>2.42.2</version>
          <scope>test</scope>
      </dependency>
      

      【讨论】:

      • 没有帮助。错误钢仍然存在。 selenium-java 包含在这个依赖中&lt;dependency&gt; &lt;groupId&gt;org.jboss.arquillian.extension&lt;/groupId&gt; &lt;artifactId&gt;arquillian-drone-webdriver-depchain&lt;/artifactId&gt; &lt;type&gt;pom&lt;/type&gt; &lt;scope&gt;test&lt;/scope&gt; &lt;/dependency&gt;
      猜你喜欢
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 2018-06-08
      • 2019-06-01
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      相关资源
      最近更新 更多