Wie kann ich mit Espresso auf eine bestimmte Ansicht in einem RecyclerView- Element klicken ? Ich weiß, dass ich auf Position 0 klicken kann, indem ich:
onView(withId(R.id.recyclerView))
.perform(RecyclerViewActions.actionOnItemAtPosition(0, click()));
Ich muss jedoch auf eine bestimmte Ansicht in diesem Element klicken und nicht auf das Element selbst.
Danke im Voraus.
- bearbeiten -
Genauer gesagt: Ich habe ein RecyclerView ( R.id.recycler_view
), dessen Elemente CardView ( R.id.card_view
) sind. In jeder CardView habe ich (unter anderem) vier Schaltflächen und möchte auf eine bestimmte Schaltfläche klicken ( R.id.bt_deliver
).
Ich möchte die neuen Funktionen von Espresso 2.0 nutzen, bin mir aber nicht sicher, ob dies möglich ist.
Wenn nicht möglich, möchte ich so etwas verwenden (mit Thomas Keller Code):
onRecyclerItemView(R.id.card_view, ???, withId(R.id.bt_deliver)).perform(click());
aber ich weiß nicht, was ich auf die Fragezeichen setzen soll.
quelle
Antworten:
Sie können dies tun, indem Sie die Ansichtsaktion anpassen.
Dann können Sie mit darauf klicken
quelle
Mit android.support.test.espresso.contrib ist es jetzt einfacher geworden:
1) Testabhängigkeit hinzufügen
* 3 Module ausschließen, da Sie es höchstwahrscheinlich bereits haben
2) Dann mach so etwas
Oder
Oder
quelle
exclude group: 'com.android.support' exclude module: 'recyclerview-v7'
actionOnItemAtPosition
ein Typparameter erforderlich. Ich bin mir nicht sicher, was ich dort hinstellen soll.Hier ist, wie ich das Problem in Kotlin gelöst habe:
und dann
quelle
Versuchen Sie den nächsten Ansatz:
quelle
Sie können auf den 3. Punkt von Gefällt mir klicken :
recyclerView
Vergessen Sie nicht , den
ViewHolder
Typ anzugeben, damit die Inferenz nicht fehlschlägt.quelle
<RecyclerView.ViewHolder>
danke, Sir;)Alle oben genannten Antworten haben bei mir nicht funktioniert, daher habe ich eine neue Methode erstellt, die alle Ansichten in einer Zelle durchsucht, um die Ansicht mit der angeforderten ID zurückzugeben. Es erfordert zwei Methoden (könnte zu einer kombiniert werden):
Anschließend können Sie dies in der Recycler-Ansicht wie folgt verwenden:
Sie können einen Rückruf verwenden, um die Ansicht zurückzugeben, wenn Sie etwas anderes damit tun möchten, oder einfach 3-4 verschiedene Versionen davon erstellen, um andere Aufgaben zu erledigen.
quelle
Ich habe immer wieder verschiedene Methoden ausprobiert, um herauszufinden, warum die Antwort von @ Blade bei mir nicht funktioniert hat.
OnTouchListener()
Um nur zu erkennen, dass ich eine habe , habe ich die ViewAction entsprechend geändert:quelle
Geben Sie Ihren Schaltflächen zunächst eindeutige Inhaltsbeschreibungen, dh "Zeile 5 für Zustellschaltflächen".
<button android:contentDescription=".." />
Scrollen Sie dann zur Zeile:
onView(withId(R.id.recycler_view)).perform(RecyclerViewActions.scrollToPosition(5));
Wählen Sie dann die Ansicht basierend auf contentDescription aus.
onView(withContentDescription("delivery button row 5")).perform(click());
Die Inhaltsbeschreibung ist eine großartige Möglichkeit, OnView von Espresso zu verwenden und Ihre App zugänglicher zu machen.
quelle
withText("Order")
würde auch funktionieren und würde nicht erfordern, dass Sie zur Testzeit wissen, was Sie bestellen.