问题: 我在运行 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")));
谢谢大家的帮助和任何建议