问题: 我在运行Espresso测试时遇到了一个问题,当调用login按钮上的perform(click())方法后,测试会持续运行,但在45秒后自动失败,而登录则正常进行。
背景:我有一个Activity,在右侧有两个Fragment并排显示,右侧的Fragment处理用户名和密码EditText以及登录按钮。该Fragment使用ViewAnimator构建,并作为两个LinearLayout的子视图,第一个LinearLayout包含前述元素,第二个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);
}
在与服务器进行身份验证后,这是我处理用户界面的方式:
@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);
}
});
}
Espresso测试
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")));
感谢大家的帮助和任何建议