Эспрессо: прокрутка Recyclerview до конца

Есть ли способ прокрутить до конца recyclerview с помощью Espresso?

Есть элемент с текстом, скажем, «Текст XYZ», а recyclerview имеет id recycler_view. Этот элемент является последним элементом просмотра ресайклера.

Я пытался

onView(withId(R.id.recycler_view)).check(matches(isDisplayed())).perform(RecyclerViewActions.scrollTo(withText("Text XYZ")),click()); 

Но это не работает. Есть идеи?

RecyclerViewActions.scrollTo() соответствует ItemView ViewHolder , который накачивается в onCreateViewHolder() адаптера. И для того, чтобы scrollTo() работал, вам необходимо предоставить совпадение, которое однозначно идентифицирует ItemView .

Ваш текущий помощник сообщает эспрессо, чтобы перейти к ViewHolder, который был завышен с помощью TextView как itemView . Что может случиться, но обычно у вас есть действие ViewGroup происходит там, чтобы ViewGroup держателей вида так, как вы хотите, чтобы они выглядели.

Если вы измените свой scrollTo() Matcher, hasDescendant(withText("Text XYZ")) для учета всех вложенных макетов (если их несколько).

Также имейте в виду, так как вы также пытаетесь щелкнуть элемент – вы не можете сделать это в той же функции perform() потому что он отправит клик на текущий ViewInteraction , который в этом случае будет RecyclerView с идентификатором R.id.recycler_view . Выполнение этого же действия просто кликает по середине на RecyclerView , а не на элемент, который вы прокрутили.

Чтобы решить эту проблему, вам понадобится еще один onView() с помощью соединителя, который вы использовали для прокрутки к элементу или с помощью RecyclerView.actionOnItem() .

В случае другого onView() hasDescendant(withText("Text XYZ")) выйдет из строя, потому что он найдет всех родителей этого TextView (viewholder, recyclerview, viewgroup, который содержит recyclerview и т. Д.), Поскольку они У всех есть этот конкретный потомок. Это заставит вас сделать более точным ItemView и учитывать все вложенные макеты. В обычных ситуациях я обычно использую withChild() , но для вас это может быть другим.