Domanda

Sto scrivendo un test dell'interfaccia utente con Google Espresso per Android e sono bloccato su come avvistare un testo TextVisualizza, il quale il contenuto è caricato asincrono da un servizio Web.Il mio codice corrente è:

public class MyTest extends BaseTestCase<MyActivity>{
    public void setUp() throws Exception {
        // (1) Tell the activity to load 'element-to-be-loaded' from webservice
        this.setActivityIntent(new Intent(Intent.ACTION_VIEW, Uri.parse("data://data/element-to-be-loaded")));
        getActivity();

        super.setUp();
    }

    public void testClickOnReviews(){
        // (2) Check the element is loaded and its name is displayed
        Espresso
            .onView(ViewMatchers.withId(R.id.element_name))
            .check(ViewAssertions.matches(ViewMatchers.withText("My Name")));

        // (3) Click on the details box
        Espresso
            .onView(ViewMatchers.withId(R.id.details_box))
            .check(ViewAssertions.matches(ViewMatchers.isDisplayed()))
            .perform(ViewActions.click());

        // (4) Wait for the details screen to open
        Espresso
            .onView(ViewMatchers.withId(R.id.review_box));

        // Go back to element screen
        Espresso.pressBack();
    }
}
.

On (1), informo la mia attività per caricare un elemento dal servizio web.Su (2), sto aspettando la vista che assisterà il suo contenuto.Questa è la parte che il test fallisce, perché esegue prima che il WebService risponda all'app.

Come posso dire a Espresso di attendere un particolare pezzo di dati sullo schermo?O dovrei pensare in un modo diverso per scrivere tale test?

È stato utile?

Soluzione

È possibile gestire questo caso registrando un IDLINGRESOURCE per il tuo servizio Web con Espresso.Dai un'occhiata a questa scrittura: https://developer.android.com / formazione / test / espresso / inattivo-risorsa.html

Molto probabilmente, vorrai usare conteggioDlingResource (che utilizza un semplice contatore da tracciare quando qualcosa è inattivo).Questo Test del campione Dimostra come questo può essere fatto.

Altri suggerimenti

Se non sei preoccupato di usare Uiautomator con espresso, potresti fare qualcosa del genere nel tuo passaggio 4.

UiObject object = mDevice.findObject(new UiSelector().resourceId(packageName + ":id/" + "review_box"));
object.waitForExists(5000);
.

HTTPS: // Sviluppatore.Android.com/reference/android/support/test/uiautomator/uibject.html#waitforexists(long)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top