arquillian warp超时而不是执行AfterPhase(或AfterServlet,BeforePhase或BeforeServlet)

时间:2012-10-29 12:34:27

标签: jboss7.x selenium-webdriver jboss-arquillian

我刚刚开始使用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窗口上正确发布和重定向。我试图让它不重定向等等,没有任何帮助。

我觉得我错过了一些基本而简单但却不知道的东西!

任何帮助都非常感激。

感谢。

1 个答案:

答案 0 :(得分:1)

我最近遇到了与Arquillian Warp类似的问题。

我的代码未被调用的原因之一是Arquillian仅将server-sde servlet过滤器合并到web存档(WAR)deplyoment中。 EAR和JAR部署都不是现成的。

对于我的具体问题(EAR部署),我在组装测试的WAR时自行合并Arquillian过滤器的方式修改了测试类,然后将其打包到EAR部署中。

我遇到的另一个问题是AfterServlet事件不是在单元测试执行范围内触发,而是作为servlet过滤器清理代码的一部分。我相信这个逻辑完全被破坏了,我构建了一个servlet过滤器的私有分支,IMHO正在正确地处理逻辑。