Espresso: 如何滚动到 ScrollView 的底部

32

如何在Espresso测试中向下滚动至ScrollView底部?谢谢!

4个回答

51

如果您需要在ScrollView底部找到一个视图,并根据其进行匹配,则只需在需要显示它之前对其执行scrollTo()操作。

onView(withId(R.id.onBottomOfScrollView))
    .perform(scrollTo(), click());
注意:如果视图已经显示,scrollTo将不起作用,因此您可以在视图已显示的情况下安全地使用它。

我没有尝试过那个,但你可以试一试,并提出一个新的问题来解决。 - appoll
4
只有当你知道子元素时才起作用——如果你不知道最后一个元素怎么办? - PKAP
4
perform(swipeDown()),这拯救了我的一天! - Thuy Trinh
1
@IgorGanapolsky,请看一下https://medium.com/@devasierra/espresso-nestedscrollview-scrolling-via-kotlin-delegation-5e7f0aa64c09。 - Tony

21

对我来说,在使用嵌套滚动视图时,我只需要向上滑动(如果你想往下滑)...这里是一个示例调用:

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

13

为了更全面(根据Morozov的答案),你可以传递自定义的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());

1

还可以尝试以下方法:

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()无法正常工作。

我应该把/调用这个方法放在哪里? - User
我认为这个答案对于那些不完全了解的人来说缺少信息。请查看https://dev59.com/VlsW5IYBdhLWcg3wM02F获取完整的答案。 - Rafael Ruiz Muñoz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接