我刚刚开始使用Arquillian Warp,似乎遇到了绊脚石。
我有一个注册页面的基本UI测试
@WarpTest
@RunWith(Arquillian.class)
public class TestProfileEdit extends AbstractUsersTest {
@Drone
FirefoxDriver browser;
@Page
EditProfilePage editProfilePage;
@Page
LoginPage loginPage;
@ArquillianResource
private URL baseURL;
@Deployment
public static Archive<?> createLoginDeployment() throws IOException {
// trimmed for brevity
}
@Before
public void setup() throws MalformedURLException{
final URL loginURL = new URL(baseURL, "login.jsf");
browser.navigate().to(loginURL);
loginPage.login("test@domain.com", "password");
final URL pageURL = new URL(baseURL, "profile/edit.jsf");
System.out.println(pageURL.toExternalForm());
browser.navigate().to(pageURL);
}
@After
public void tearDown() {
browser.manage().deleteAllCookies();
}
@Test
@RunAsClient
public void testSaveData() {
editProfilePage.getDialog().setFirstName("Test First Name");
Warp.execute(new ClientAction() {
@Override
public void action() {
editProfilePage.getDialog().save();
}
}).verify(new TestProfileOnServer());
}
@SuppressWarnings("serial")
public static class TestProfileOnServer extends ServerAssertion {
@Inject
private EntityManager em;
@Inject
private Identity identity;
@Inject
Credentials credentials;
@AfterPhase(Phase.RENDER_RESPONSE)
public void testSavedUserProfile() {
System.out.println("RUNNING TEST");
String username = identity.getUser().getId();
TypedQuery<UserProfile> q = em.createQuery(
"SELECT u from UserProfile u where u.userIdentity.name like :username", UserProfile.class);
UserProfile p;
p = q.setParameter("username", username).getSingleResult();
assertEquals("Test First Name", p.getFirstName());
}
}
}
我已经在testSavedUserProfile()方法上尝试了各种组合,但绝对没有运气来触发它。
测试始终以
结束java.lang.IllegalStateException: java.util.concurrent.ExecutionException: org.jboss.arquillian.warp.client.execution.AssertionHolder$ServerResponseTimeoutException
我可以看到页面在打开的firefox窗口上正确发布和重定向。我试图让它不重定向等等,没有任何帮助。
我觉得我错过了一些基本而简单但却不知道的东西!
任何帮助都非常感激。
感谢。
答案 0 :(得分:1)
我最近遇到了与Arquillian Warp类似的问题。
我的代码未被调用的原因之一是Arquillian仅将server-sde servlet过滤器合并到web存档(WAR)deplyoment中。 EAR和JAR部署都不是现成的。
对于我的具体问题(EAR部署),我在组装测试的WAR时自行合并Arquillian过滤器的方式修改了测试类,然后将其打包到EAR部署中。
我遇到的另一个问题是AfterServlet事件不是在单元测试执行范围内触发,而是作为servlet过滤器清理代码的一部分。我相信这个逻辑完全被破坏了,我构建了一个servlet过滤器的私有分支,IMHO正在正确地处理逻辑。