Comment puis-je utiliser Espresso pour cliquer sur une vue spécifique à l'intérieur d'un article RecyclerView ? Je sais que je peux cliquer sur l'élément à la position 0 en utilisant:
onView(withId(R.id.recyclerView))
.perform(RecyclerViewActions.actionOnItemAtPosition(0, click()));
Mais je dois cliquer sur une vue spécifique à l'intérieur de cet élément et non sur l'élément lui-même.
Merci d'avance.
-- Éditer --
Pour être plus précis: j'ai un RecyclerView ( R.id.recycler_view
) dont les éléments sont CardView ( R.id.card_view
). À l'intérieur de chaque CardView, j'ai quatre boutons (entre autres) et je veux cliquer sur un bouton spécifique ( R.id.bt_deliver
).
J'aimerais utiliser les nouvelles fonctionnalités d'Espresso 2.0, mais je ne suis pas sûr que ce soit possible.
Si ce n'est pas possible, je veux utiliser quelque chose comme ça (en utilisant le code Thomas Keller):
onRecyclerItemView(R.id.card_view, ???, withId(R.id.bt_deliver)).perform(click());
mais je ne sais pas quoi mettre sur les points d'interrogation.
la source
Réponses:
Vous pouvez le faire avec une action de vue personnalisée.
Ensuite, vous pouvez cliquer dessus avec
la source
Maintenant, avec android.support.test.espresso.contrib, c'est devenu plus facile:
1) Ajouter une dépendance de test
* exclure 3 modules, car vous l'avez probablement déjà
2) Ensuite, faites quelque chose comme
Ou
Ou
la source
exclude group: 'com.android.support' exclude module: 'recyclerview-v7'
actionOnItemAtPosition
nécessite un paramètre de type. Je ne sais pas quoi y mettre.Voici comment j'ai résolu le problème dans kotlin:
puis
la source
Essayez la prochaine approche:
la source
Vous pouvez cliquer sur le 3ème élément de
recyclerView
Like this:N'oubliez pas de fournir le
ViewHolder
type pour que l'inférence n'échoue pas.la source
<RecyclerView.ViewHolder>
Toutes les réponses ci-dessus ne fonctionnaient pas pour moi, j'ai donc créé une nouvelle méthode qui recherche toutes les vues à l'intérieur d'une cellule pour renvoyer la vue avec l'ID demandé. Il nécessite deux méthodes (pouvant être combinées en une seule):
Enfin, vous pouvez l'utiliser sur Recycler View en procédant comme suit:
Vous pouvez utiliser un rappel pour renvoyer la vue si vous voulez faire autre chose avec elle, ou simplement en créer 3-4 versions différentes pour effectuer d'autres tâches.
la source
J'ai continué à essayer différentes méthodes pour trouver pourquoi la réponse de @ blade ne fonctionnait pas pour moi, pour me rendre compte seulement que j'avais un
OnTouchListener()
, j'ai modifié ViewAction en conséquence:la source
Vous pouvez même généraliser cette approche pour soutenir plus d'actions non seulement
click
. Voici ma solution pour cela:Et puis pour
EditText
vous pouvez faire quelque chose comme ça:la source
Commencez par donner à vos boutons des descriptions de contenu uniques, c'est-à-dire «ligne de bouton de livraison 5».
<button android:contentDescription=".." />
Puis faites défiler jusqu'à la ligne:
onView(withId(R.id.recycler_view)).perform(RecyclerViewActions.scrollToPosition(5));
Sélectionnez ensuite la vue en fonction de contentDescription.
onView(withContentDescription("delivery button row 5")).perform(click());
La description du contenu est un excellent moyen d'utiliser onView d'Espresso et de rendre votre application plus accessible.
la source
withText("Order")
fonctionnerait aussi et ne vous obligerait pas à savoir au moment du test ce que vous commandez.