Как использовать эспрессо для перехода к дочернему элементу RecyclerView-Item - PullRequest
0 голосов
/ 15 февраля 2019

Я пишу эспрессо-тесты для моего приложения.Для одного теста я должен нажать на кнопку RecyclerView-Item.Указанный элемент больше экрана, поэтому при прокрутке до элемента требуемая кнопка все еще не отображается (что необходимо, чтобы я мог щелкнуть по ней).

Я попытался прокрутить до вида с помощью

onView(withId(R.id.recycler_view)).perform(scrollTo<MyViewHolder>(hasDescendant(withId(R.id.target_button))))

но это просто прокручивается к началу элемента, который содержит кнопку.Поскольку кнопка находится в самом низу этого элемента, а элемент больше экрана, при попытке нажать кнопку я получаю

Action will not be performed because the target view does not match one or more of the following constraints:
at least 90 percent of the view's area is displayed to the user.

, поэтому я также пытался

onView(withId(R.id.recycler_view)).perform(actionOnItemAtPosition<MyViewHolder>(0, EspressoUtils.clickChildViewWithId(R.id.target_button)))

где EspressoUtils.clickChildViewWithId(id: Int) - это то, что описано в принятом ответе на этот вопрос.Это также привело к той же ошибке.Как прокрутить до конкретного дочернего элемента в RecyclerView-Item?

1 Ответ

0 голосов
/ 17 февраля 2019

Следующее решение работает для меня при нажатии на представление внутри элемента RecyclerView, которое в два раза больше моего экрана.Примечание: представление, которое я щелкаю, на самом деле находится за пределами экрана, но поскольку оно находится в иерархии представлений, его можно щелкнуть.

Создание пользовательского представления ViewAction:

private fun clickChildViewWithId(id: Int) = object : ViewAction {

    override fun getConstraints() = null

    override fun getDescription() = "click child view with id $id"

    override fun perform(uiController: UiController, view: View) {
        val v = view.findViewById<View>(id)
        v.performClick()
    }
}

Использование:

onView(withId(R.id.recycler_view))
            .perform(actionOnItemAtPosition<MyViewHolder>(0, clickChildViewWithId(R.id.target_button)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...