Android - Espresso - scrolling to a non-list View item
According to the scrollTo
JavaDoc, to use the code you specified ( onView( withId( R.id.button)).perform( scrollTo(), click());
), the preconditions are: "must be a descendant of ScrollView" and "must have visibility set to View.VISIBLE
". If that is the case, then that will work just fine.
If it is in an AdapterView
, then you should use onData
instead. In some cases, you may have to implement the AdapterViewProtocol
, if your AdapterView
is not well behaved.
If it is neither in an AdapterView
nor a child of a ScrollView
, then you would have to implement a custom ViewAction
.
If you have a view inside android.support.v4.widget.NestedScrollView
instead of scrollView
scrollTo()
does not work.
In order to work you need to create a class that implements ViewAction
just like ScrollToAction
but allows NestedScrollView
s:
public Matcher<View> getConstraints() {
return allOf(
withEffectiveVisibility(ViewMatchers.Visibility.VISIBLE),
isDescendantOfA(anyOf(
isAssignableFrom(ScrollView.class),
isAssignableFrom(HorizontalScrollView.class),
isAssignableFrom(NestedScrollView.class))
)
);
}
extra tip and access the action like:
public static ViewAction betterScrollTo() {
return actionWithAssertions(new AllScrollViewsScrollToAction());
}
But with this scroll it does not trigger events from the layout managers.