0

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

我觉得我缺少一些基本而简单的东西,但不知道是什么!

非常感谢任何帮助。

谢谢。

4

1 回答 1

1

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

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

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

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

于 2013-01-14T18:07:45.087 回答