2016-07-18 96 views
6

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

risposta

6

Ho avuto un problema simile e nel mio caso si trattava di una barra di avanzamento che è stata caricata su un frammento che non è stato visualizzato. Quel progressbar non è stato respinto per errore e stava bloccando i test. Ho avuto lo stesso risultato con i test falliti dopo 45 secondi di blocco come hai descritto. Per riassumere, controlla che non ci siano animazioni in esecuzione sul thread dell'interfaccia utente come una barra di avanzamento o qualsiasi altra.

+0

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? –

+0

L'ho risolto! C'era un'altra animazione in corso in una visualizzazione di testo. Grazie ancora per il tuo aiuto. –

0

Ho avuto lo stesso problema mentre stavo lavorando con un ListView.

È interessante notare che il test riprende se ho tentato manualmente di scorrere lo schermo. L'aggiunta di questa linea ha risolto il problema e ha ripreso il test.

onView(withId(R.id.myListView)).perform(swipeUp());

Problemi correlati