Question

J'écris un test d'interface utilisateur avec Google Espresso pour Android et je suis bloqué sur la manière d'affirmer un texte TextView, quel contenu est chargé d'une manière asynchrone à partir d'un service Web.Mon code actuel est:

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();
    }
}

sur (1), j'informe mon activité pour charger un élément du site Web.Sur (2), j'attends la vue affirmant son contenu.C'est la partie que le test échoue, car il s'exécute avant que le WebService réponde à l'application.

Comment puis-je dire à l'espresso d'attendre qu'un morceau particulier de données apparaisse à l'écran?Ou devrais-je penser d'une manière différente d'écrire un tel test?

Était-ce utile?

La solution

Vous pouvez gérer ce cas en enregistrant une sortie idlingresource pour votre service Web avec expresso.Jetez un coup d'œil à cette huisson: https://developer.android.com / formation / test / expresso / ralenti-ressource.html

Très probablement, vous voudrez utiliser CountingIDLingResource (qui utilise un compteur simple pour suivre quand quelque chose est inactif).Ceci Test d'échantillon montre comment cela peut être fait.

Autres conseils

Si vous n'êtes pas dérangé par l'utilisation de uautomator avec expresso, vous pouvez faire quelque chose comme ceci dans votre étape 4.

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

https:// développeur.android.com/reference/android/support/test/uiautomator/uiObject.html#waitforexistes(Long)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top