Espresso - Affirmation d'un TextView avec des données chargées asynchrones
Je suis en train d'écrire un test de l'INTERFACE utilisateur avec Google Espresso pour Android et je suis bloqué sur la façon de faire valoir un TextView texte, dont le contenu est chargé de 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();
}
}
(1), je vous informe de mon activité à la charge d'un élément de la webservice. (2), je suis en attente pour le point de vue en affirmant son contenu. C'est la partie que le test échoue, car il s'exécute avant le webservice réponses de l'application.
Comment puis-je savoir Espresso à attendre pour une pièce en particulier de données apparaissent sur l'écran? Ou devrais-je penser à une façon différente d'écrire un tel test?
source d'informationauteur Bolhoso | 2014-01-08
Vous devez vous connecter pour publier un commentaire.
Vous pouvez gérer ce cas par l'inscription d'un IdlingResource pour votre site web en service d'une machine à Expresso. Jetez un oeil à cette écriture-up: https://developer.android.com/training/testing/espresso/idling-resource.html
Le plus probable, vous aurez envie d'utiliser CountingIdlingResource (qui utilise un simple compteur de suivre quand quelque chose est en veille). Cette exemple de test montre comment cela peut être fait.
Si vous n'êtes pas gêné avec l'aide de UiAutomator d'une machine à Expresso, vous pourriez faire quelque chose comme ceci dans votre étape 4.
https://developer.android.com/reference/android/support/test/uiautomator/UiObject.html#waitForExists(long)