【问题标题】:Arquillian Drone Test with @RunAsClientSide-annotated test method and in-container test method runs with NoClassDefFoundError使用 @RunAsClientSide 注释的测试方法和容器内测试方法的 Arquillian Drone 测试使用 NoClassDefFoundError 运行
【发布时间】:2018-02-15 12:44:21
【问题描述】:

Arquillian-Guide Functional Testing using Drone and Graphene 说可以“在同一个测试中混合容器内模式和客户端模式”。 我正在尝试运行这个小例子:

import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.container.test.api.RunAsClient;
import org.jboss.arquillian.container.test.api.TargetsContainer;
import org.jboss.arquillian.drone.api.annotation.Drone;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.arquillian.junit.InSequence;
import org.jboss.arquillian.spring.integration.test.annotation.SpringWebConfiguration;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.jboss.shrinkwrap.resolver.api.maven.Maven;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.openqa.selenium.WebDriver;

import java.io.File;

@RunWith(Arquillian.class)
@SpringWebConfiguration
public class ClientAndContainerTest {

@Deployment
@TargetsContainer("process")
public static WebArchive createDeployment() {
    File warFile = new File("src/test/resources/webApp.war");
//        File[] testLibs = Maven.resolver().loadPomFromFile("pom.xml")
//                .resolve("org.seleniumhq.selenium:selenium-chrome-driver")
//                .withTransitivity().asFile();
    return ShrinkWrap
            .createFromZipFile(WebArchive.class, warFile)
//          .addAsLibraries(testLibs)
            ;
}

@Test
@InSequence(1)
public void testContainerSide() {
    // test some in-container stuff
}

@Drone
private WebDriver browser;

@Test
@InSequence(2)
@RunAsClient
public void testClientSide() {
    // Run some UI-tests
}

}

testclientSide() 通过没有问题。但是 testContainerSide() 使用

java.lang.NoClassDefFoundError: Lorg/openqa/selenium/WebDriver;
Caused by: java.lang.ClassNotFoundException: org.openqa.selenium.WebDriver

只要我将具有传递性的 selenium-chrome-driver 依赖项添加到部署中(取消注释 createDeployment()-Method 中的行),它就会起作用。但是我看不出将 Selenium 添加到容器部署中的意义,因为它应该只在客户端需要。

谁能告诉我为什么 testContainerSide() 方法在寻找 org.openqa.selenium.WebDriver ?

【问题讨论】:

  • 感谢您的提示,但我总是先运行 mvn clean,然后我删除了我的存储库并让它再次运行。但它仍然不起作用。真正的问题是它为什么还要寻找 Selenium。
  • 现在我认为,这不是 Selenium 依赖项的问题。我创建了一个 LoginPage 类,我使用 @Page private LoginPage loginPage; 注入到测试类中,现在我还必须将 LoginPage.class 添加到 Shrinkwrap,即使容器中不需要它。
  • 你是对的!!!

标签: java selenium-webdriver junit jboss-arquillian arquillian-drone


【解决方案1】:

我认为,唯一的解决方案是将 ui-/client-side-tests 与 in-container-tests 分开使用一个测试类。

如果您想在一个测试用例中使用这两种技术,您可以使用 arquillian-suite 扩展在单个部署中同时运行两个测试类。

【讨论】:

    猜你喜欢
    • 2011-11-12
    • 2020-02-14
    • 1970-01-01
    • 2015-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多