RecyclerViewActions.scrollTo()
mecze z ItemView
z ViewHolder
, który jest zawyżony w onCreateViewHolder()
adaptera. Aby funkcja scrollTo()
mogła działać, musisz podać moduł dopasowujący, który jednoznacznie identyfikuje to, ItemView
.
Twój bieżący matcher mówi espresso, aby przewinąć do obiektu ViewHolder, który został napompowany TextView
jako itemView
. Co może się zdarzyć, ale zazwyczaj masz do czynienia z pewną akcją ViewGroup
, która ma na celu ukształtowanie uchwytów widoku tak, jak chcesz, żeby wyglądały.
Jeśli zmienisz Matcher scrollTo()
, na hasDescendant(withText("Text XYZ"))
, aby uwzględnić wszystkie układy zagnieżdżone (jeśli istnieje więcej niż jeden).
Należy także pamiętać, ponieważ starają się również kliknąć element - nie można tego zrobić w tym samym perform()
ponieważ będzie wysłać kliknij aby bieżącego ViewInteraction
, który jest w tym przypadku RecyclerView
id R.id.recycler_view
. Wykonanie tego w tym samym wykonaniu powoduje kliknięcie środka na obiekcie RecyclerView
, a nie elementu, do którego przewinięto.
Aby rozwiązać ten problem, potrzebujesz albo innego onView()
z matcherem, którego użyłeś do przewinięcia do elementu lub użycia RecyclerView.actionOnItem()
.
W przypadku innego onView()
oświadczeniu hasDescendant(withText("Text XYZ"))
zawiodę cię, bo znajdzie wszystkich rodziców tego TextView (viewholder, recyclerview, w viewgroup która posiada recyclerview i tak dalej), a wszystkie one mają tę szczególną potomka. To zmusi Cię do uczynienia macierzy bardziej precyzyjnej i uwzględnia wszystkie układy zagnieżdżone. W takich sytuacjach zwykle chodzę na matcher withChild()
, ale może to być dla ciebie inne.
wydaje się nie działać - dziennik błędów proszę – piotrek1543
sprawdzasz, czy widok jest wyświetlany przed przewinięciem do niego. – denys
@denys The ckeck jest dla rzeczywistego recyclerview. Nie powinno to mieć znaczenia, chyba że widok recyklingu nie jest faktycznie wyświetlany. –