Problema: Si verifica un problema durante l'esecuzione del test Espresso, dopo l'esecuzione del metodo di esecuzione (clic()) pulsante, il test continua a funzionare ma non va oltre finché non passano 45 secondi e il test fallisce automaticamente. Nel frattempo, l'accesso avviene normalmente.Test Espresso bloccato/inattivo dopo l'esecuzione (clic()) sul pulsante in ViewAnimator
Contesto: Ho un'attività con due frammenti affiancati, il frammento sulla destra gestisce il nome utente e la password EditTexts e anche il pulsante di accesso. Questo frammento è costruito con ViewAnimator e due LinearLayouts come viste secondarie, il primo LinearLayout ha gli elementi menzionati prima e il secondo ha altre cose.
Questo è ciò che accade sul interfaccia utente quando il pulsante di login viene cliccato:
@Override
public void setUILoggingIn() {
spinnerLogin.setVisibility(View.VISIBLE);
loginButton.setEnabled(false);
loginButton.setText(R.string.logging_in);
usernameText.setEnabled(false);
passwordText.setEnabled(false);
}
Dopo l'autenticazione con il server, questo è come gestire l'interfaccia utente:
@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 prova
ViewInteraction loginButton2 = onView(withId(R.id.login_button));
loginButton2.perform(click()); // Test gets stuck here.
loginButton2.check(doesNotExist()); // Never reached.
Qualcuno sa di successo saggiamente test su questo tipo di scenario? Sarebbe sufficiente rilevare quando il ViewAnimator cambia, ma il test si blocca sul clic.
anche: Questo non è stato l'inizio del test, prima che il codice mostrato prima, eseguire questo test e funziona come un sogno:
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")));
Grazie a tutti per il vostro aiuto e qualche consiglio
Grazie per la risposta @jeprubio. Ho provato a rimuovere il progresso progressBar dalla vista, ma il problema persiste. Ho anche provato a lavorare con [Idling Resources] (https://www.youtube.com/watch?v=uCtzH0Rz5XU) ma non riesco a farlo funzionare. Altre idee? –
L'ho risolto! C'era un'altra animazione in corso in una visualizzazione di testo. Grazie ancora per il tuo aiuto. –