問題: Espresso テストの実行中に問題が発生しました。ログイン ボタンで perform(click()) メソッドが呼び出された後、テストは実行され続けますが、45 秒経過するまで先に進まず、テストは自動的に失敗します。 . その間、ログインは正常に行われます。
コンテキスト: 2 つのフラグメントを並べたアクティビティがあります。右側のフラグメントは、ユーザー名とパスワードの EditText とログイン ボタンを処理します。このフラグメントは、子ビューとして ViewAnimator と 2 つの LinearLayouts で構築されます。最初の LinearLayout には前述の要素があり、2 番目の要素には他の要素があります。
これは、ログイン ボタンがクリックされたときに 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")));
皆様のご協力とアドバイスに感謝します