【问题标题】:Espresso: how to scroll to the bottom of ScrollViewEspresso:如何滚动到 ScrollView 的底部
【发布时间】:2025-12-07 09:00:02
【问题描述】:

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

【问题讨论】:

    标签: android android-espresso


    【解决方案1】:

    如果您需要在 ScrollView 的底部找到一个视图并与之匹配,那么只需对其执行 scrollTo() 操作,然后再执行任何其他需要显示它的操作。

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

    注意:如果视图已经显示,scrollTo 将不起作用,因此您可以在视图显示时安全地使用它

    【讨论】:

    • 我还没有尝试过,但试一试,并针对该问题写一个新问题
    • 只有在你知道你的子元素时才有效——如果你不知道最后一个元素怎么办?
    • perform(swipeDown()),这拯救了我的一天!
    • @IgorGanapolsky 看看medium.com/@devasierra/…
    【解决方案2】:

    你也可以试试:

    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() 不起作用。

    【讨论】:

    • 我在哪里放置/调用这个方法?
    • 我相信这个答案对于不完全了解的人来说是缺失的信息。完整答案请查看*.com/questions/35272953/…
    【解决方案3】:

    为了完整性(基于 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());
    

    【讨论】:

      【解决方案4】:

      对我来说,在使用 nestedScrollview 时,我只需向上滑动(如果你想向下)..这是一个示例调用:

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

      【讨论】: