Mise à jour d'un EditText avec Espresso
Je suis tenté de mettre à jour un EditText
dans le cadre d'un Espresso test avec:
onView(allOf(withClassName(endsWith("EditText")), withText(is("Test")))).perform(clearText())
.perform(click())
.perform(typeText("Another test"));
Cependant j'ai l'erreur suivante:
com.google.android.apps.common.testing.ui.espresso.NoMatchingViewException: No views in hierarchy found matching: (with class name: a string ending with "EditText" and with text: is "Test")
En brisant la ligne de test, je peux voir que cela se produit après l'exécution de clearText()
, donc je suppose que le rapprochement sont en cours de ré-exécuter avant chaque perform
et échouer la avant la deuxième action. Bien que cela a un sens, qu'il me laisse un peu confus quant à la façon de mettre à jour le EditText
à l'aide de l'Espresso. Comment dois-je faire cela?
Remarque que je ne peux pas utiliser un ID de ressource ou similaires dans ce scénario et d'avoir à utiliser la combinaison, comme indiqué ci-dessus pour identifier la vue correcte.
OriginalL'auteur jgm | 2014-05-21
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser le
replaceText
méthode.OriginalL'auteur Abhinav Manchanda
Trois choses à essayer:
1. Vous pouvez exécuter effectue dans la succession.
2. Il y a un problème enregistré sur la page Espresso qui a été marqué comme non valide (mais est toujours très bien d'un bug). Une solution consiste à mettre en pause le test entre les effectue.
3. Êtes-vous absolument sûr que votre EditText contenant le texte "Test"?
OriginalL'auteur James Davis
J'ai eu un problème similaire et résolu à l'aide de la containsString matcher et de la Classe.getSimpleName(). Comme ceci:
Vous pouvez voir le code complet ici
OriginalL'auteur voghDev
Vous pouvez essayer deux choses. J'ai d'abord essayer d'utiliser
Cette façon, vous êtes toujours accès à l'EditText champ, même lorsque d'autres EditText champs sont sur l'écran.
Si ce n'est pas une option, vous pouvez diviser votre effectuer des appels.
Je vois. Peut-être que vous pouvez fixer une étiquette à chaque EditText vous de créer et de trouver la vue en se basant sur cette balise. La balise peut être utilisée uniquement pour les tests, mais il serait au moins vous donner quelque chose pour différencier les EditText champs. Puis de nouveau, qui peut violer la condition que vous mentionnez à la fin de votre question (j'ai négligé cette partie avant que j'ai répondu).
OriginalL'auteur Maxwell