Arquillian Drone Test with @RunAsClientSide-annotated 测试方法和容器内测试方法运行 NoClassDefFoundError
Arquillian Drone Test with @RunAsClientSide-annotated test method and in-container test method runs with NoClassDefFoundError
Arquillian-Guide Functional Testing using Drone and Graphene 说可以 "mix in-container and client modes in the same test"。
我正在尝试 运行 这个小例子:
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() 运行s
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 吗?
我认为,唯一的解决方案是将 ui-/client-side-tests 与容器内测试分开,每个测试使用一个测试-class。
如果你想在一个测试用例中同时使用这两种技术,你可以使用 arquillian-suite 扩展来 运行 这两个测试-classes 在一个部署中同时使用。
Arquillian-Guide Functional Testing using Drone and Graphene 说可以 "mix in-container and client modes in the same test"。 我正在尝试 运行 这个小例子:
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() 运行sjava.lang.NoClassDefFoundError: Lorg/openqa/selenium/WebDriver;
Caused by: java.lang.ClassNotFoundException: org.openqa.selenium.WebDriver
只要我将具有传递性的 selenium-chrome-驱动程序依赖项添加到部署(取消注释 createDeployment()-方法中的行),它就会起作用。但是我看不出将 Selenium 添加到容器部署中有什么意义,因为它应该只在客户端需要。
有人能告诉我为什么 testContainerSide() 方法正在寻找 org.openqa.selenium.WebDriver 吗?
我认为,唯一的解决方案是将 ui-/client-side-tests 与容器内测试分开,每个测试使用一个测试-class。
如果你想在一个测试用例中同时使用这两种技术,你可以使用 arquillian-suite 扩展来 运行 这两个测试-classes 在一个部署中同时使用。