12

问题: 我在运行 Espresso 测试时遇到问题,在登录按钮上调用 perform(click()) 方法后,测试继续运行,但直到 45 秒过去后才继续运行,并且测试自动失败. 同时,登录正常进行。

上下文:我有一个并排有两个 Fragment 的 Activity,右侧的 Fragment 处理用户名和密码 EditTexts 以及登录按钮。这个片段是用一个 ViewAnimator 和两个 LinearLayouts 作为子视图构建的,第一个 LinearLayout 有前面提到的元素,第二个有其他的东西。

这是单击登录按钮时 UI 上发生的情况:

    @Override
public void setUILoggingIn() {
    spinnerLogin.setVisibility(View.VISIBLE);
    loginButton.setEnabled(false);
    loginButton.setText(R.string.logging_in);
    usernameText.setEnabled(false);
    passwordText.setEnabled(false);
}

与服务器进行身份验证后,这就是我处理 UI 的方式:

@Override
public void setUIAuthorized() {
    new Handler(Looper.getMainLooper()).post(new Runnable() {
        @Override
        public void run() {
            viewAnimator.showNext();
            // elements on the first child of the ViewAnimator
            loginButton.setEnabled(true);
            spinnerLogin.setVisibility(View.GONE);

            // elements on the second child of the ViewAnimator
            sendMessageButton.setEnabled(true); 
            chatInputText.setEnabled(true);
        }
    });
}

浓缩咖啡测试

ViewInteraction loginButton2 = onView(withId(R.id.login_button));
        loginButton2.perform(click());        // Test gets stuck here.
        loginButton2.check(doesNotExist());   // Never reached.

有谁知道在这种情况下成功测试很热?检测 ViewAnimator 何时更改就足够了,但测试卡在点击上。

另外:这不是测试的开始,在前面显示的代码之前,我运行了这个测试,它就像一个梦一样工作:

ViewInteraction loginButton = onView(withId(R.id.login_button));

    /** Failed login **/

    loginButton.perform(click());

    ViewInteraction snackBarTextView = onView(
            allOf(withId(R.id.snackbar_text), withText("Login error"), isDisplayed()));
    snackBarTextView.check(matches(withText("Login error")));

谢谢大家的帮助和任何建议

4

2 回答 2

14

我有一个类似的问题,在我的情况下,它是一个加载在未显示的片段上的进度条。该进度条没有被错误地关闭,并且阻止了测试。正如您所描述的那样,在卡住 45 秒后测试失败,我得到了相同的结果。总而言之,检查 UI 线程上没有作为进度条或任何其他动画运行。

于 2016-07-19T16:59:09.050 回答
1

我在使用 ListView 时遇到了同样的问题。

有趣的是,我注意到如果我手动尝试滚动屏幕​​,测试会继续进行。添加此行解决了问题并恢复了测试。

onView(withId(R.id.myListView)).perform(swipeUp());

于 2016-07-20T09:19:23.203 回答