Problem: Mam problem podczas uruchamiania testu Espresso, po wywołaniu metody perform (click()) przy logowaniu przycisk, test nadal działa, ale nie przechodzi dalej, aż upłynie 45 sekund, a test automatycznie się nie powiedzie. Tymczasem logowanie odbywa się normalnie.Test ekspresu espresso utknął/nieaktywny po wykonaniu (kliknij()) przycisku w ViewAnimator
Kontekst: Mam działalność o dwa fragmenty obok siebie, fragment po prawej stronie obsługuje nazwę użytkownika i hasło EditTexts a także przycisk Login. Ten fragment zbudowany jest z ViewAnimator i dwóch liniowych widoków jako widoków dzieci, pierwszy LinearLayout ma elementy wspomniane wcześniej, a drugi ma inne rzeczy.
To jest to, co dzieje się na interfejsie, gdy przycisk logowania kliknął:
@Override
public void setUILoggingIn() {
spinnerLogin.setVisibility(View.VISIBLE);
loginButton.setEnabled(false);
loginButton.setText(R.string.logging_in);
usernameText.setEnabled(false);
passwordText.setEnabled(false);
}
Po uwierzytelnieniu na serwerze, to w jaki sposób poradzić sobie z 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);
}
});
}
Espresso test
ViewInteraction loginButton2 = onView(withId(R.id.login_button));
loginButton2.perform(click()); // Test gets stuck here.
loginButton2.check(doesNotExist()); // Never reached.
Czy ktoś wie, że jest gorący sly test na tego rodzaju scenariusz? Wystarczy wykryć, gdy zmieni się ViewAnimator, ale test utknie na kliknięciu.
również: To nie był początek testu, zanim pokazano kod przed, uruchomić ten test i działa jak marzenie:
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")));
Dziękuję wszystkim za pomoc i poradę
Dziękuję za odpowiedź @jeprubio. Próbowałem usunąć okrągły pasek postępu z widoku, ale problem nadal występuje. Próbowałem też pracować z [Idling Resources] (https://www.youtube.com/watch?v=uCtzH0Rz5XU), ale nie mogę go uruchomić. Jakieś inne pomysły? –
Rozwiązałem to! W tekście pojawiła się kolejna animacja. Jeszcze raz dziękuję za pomoc. –