Я пытаюсь написать инструментальный тест с Espresso для своего приложения Android, в котором используется RecyclerView
. Вот основной макет:
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/grid"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
</android.support.design.widget.CoordinatorLayout>
... и макет представления элемента:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/label"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</RelativeLayout>
Это означает, что на экране есть пара TextViews
, каждый из которых имеет идентификатор label
. Я пытаюсь щелкнуть конкретную метку. Я попытался позволить тестовому рекордеру Espresso сгенерировать код:
onView(allOf(withId(R.id.grid), isDisplayed()))
.perform(actionOnItemAtPosition(5, click()));
Я скорее хочу что-то вроде:
// Not working
onView(allOf(withId(R.id.grid), isDisplayed()))
.perform(actionOnItem(withText("Foobar"), click()));
Чтения
Я довольно много читал на эту тему, но до сих пор не могу понять, как тестировать элемент RecyclerView
на основе его содержимого, а не на основе его индекса позиции.
- Advanced Android Espresso — Slide on RecyclerViewActions (Чиу-Ки Чан)
- RecyclerView и эспрессо: сложная история (Патрик Бэкон, 18 июля 2015 г.)
- Espresso – тестирование RecyclerView в определенных позициях (Ромейн Пиль, 15 апреля 2016 г.)