使用@ RunAsClientSide注释的测试方法进行Arquillian Drone测试,并使用NoClassDefFoundError运行容器内测试方法

问题描述 投票:0回答:1

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驱动程序依赖项与部署的传递性(取消注释createDeployment() - 方法中的行)它就可以工作。但是我没有看到将Selenium添加到容器部署中的重点,因为它只应该在客户端需要。

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

java selenium-webdriver junit jboss-arquillian arquillian-drone
1个回答
0
投票

我认为,唯一的解决方案是通过为每个测试类使用一个测试类来将ui- /客户端测试与容器内测试分开。

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

© www.soinside.com 2019 - 2024. All rights reserved.