Espresso: как прокручивать нижнюю часть ScrollView

Как можно прокручивать вниз до конца ScrollView в тесте Espresso? Спасибо!

Ответ 1

Если в нижней части ScrollView вам нужно найти представление и сопоставить что-то против него, просто выполните действие scrollTo() на нем, перед любыми другими действиями, требующими его отображения.

onView(withId(R.id.onBottomOfScrollView))
    .perform(scrollTo(), click());

Примечание: scrollTo не будет иметь эффекта, если представление уже отображается, чтобы вы могли безопасно использовать его в случаях, когда отображается представление

Ответ 2

для меня при использовании nestedScrollview я просто swipeUp (если вы хотите спуститься).. вот пример вызова:

onView(withId(R.id.nsv_container))
                .perform(swipeUp());

Ответ 3

Для полноты (на основе ответа Морозова) вы можете передать пользовательский ViewAction вместо scrollTo(), что позволяет использовать NestedScrollView:

ViewAction customScrollTo = new ViewAction() {

@Override
public Matcher<View> getConstraints() {
    return allOf(withEffectiveVisibility(ViewMatchers.Visibility.VISIBLE), isDescendantOfA(anyOf(
        isAssignableFrom(ScrollView.class),
        isAssignableFrom(HorizontalScrollView.class),
        isAssignableFrom(NestedScrollView.class)))
    );
}

@Override
public String getDescription() {
    return null;
}

@Override
public void perform(UiController uiController, View view) {
    new ScrollToAction().perform(uiController, view);
}

};

И используйте его следующим образом:

onView(withId(R.id.onBottomOfScrollView)).perform(customScrollTo, click());

Ответ 4

Также вы можете попробовать:

public Matcher<View> getConstraints() {
return allOf(withEffectiveVisibility(ViewMatchers.Visibility.VISIBLE), isDescendantOfA(anyOf(
        isAssignableFrom(ScrollView.class), isAssignableFrom(HorizontalScrollView.class), isAssignableFrom(NestedScrollView.class))));

Если у вас есть представление внутри android.support.v4.widget.NestedScrollView вместо scrollView scrollTo() не работает.