【问题标题】:Android Espresso GridView scroll to each item and perform a click on themAndroid Espresso GridView 滚动到每个项目并单击它们
【发布时间】:2016-02-16 12:42:19
【问题描述】:

我有一个加载数据的 GridView,网格中的一些项目是“组”项目 包含一组不同的数据。如果有 GridView 可以滚动 大量数据。

在某些设备上,GridView 有三列,而在其他设备上只有两列,具体取决于设备屏幕宽度。

我需要测试的是滚动到网格中的特定(带有文本)项目,打开它然后关闭它(返回按钮=simpleClick)。然后滚动到具有特定文本的第二个项目并打开然后关闭它(后退按钮=simpleClick)。

我尝试了几种滑动方法,然后执行点击 在他们身上,但这种方法失败了,因为你需要确切地知道有多少 在我可以单击打开项目组之前滑动/滚动执行 - 特定于设备,这很糟糕。执行的滚动次数也超过了到达屏幕底部所需的滚动次数似乎会减慢测试速度!!相当!一点点。

   private void scrollDown() {
        Log.d(TAG, "scrollDown: ");
        onView(withId(R.id.main_grid))
                .perform(swipeUp());
    }

    private void scrollUp() {
        Log.d(TAG, "scrollUp: ");
        onView(withId(R.id.main_grid))
                .perform(swipeDown());

    }

private void clickOn(final String text) {

    onView(withText(new Matcher<String>() {
            @Override
            public boolean matches(Object item) {

                if (item instanceof String) {
                    if (((String) item).contains(text))
                        return true;
                    else
                        return false;
                }
                return false;
            }

            @Override
            public void describeMismatch(Object item, Description mismatchDescription) {

            }

            @Override
            public void _dont_implement_Matcher___instead_extend_BaseMatcher_() {

            }

            @Override
            public void describeTo(Description description) {

            }
    }))
        .perform(click());
}

我也试过这个,但焦点被设置到每个项目 但当它到达屏幕的尽头时,需要手动滚动 在设备上 - 它不会滚动屏幕。

for (int i = 0 ; i < 20; i++) {
               onData(anything())
                       .inAdapterView(allOf(withId(R.id.main_grid), isDisplayed()))
                       .atPosition(i)
                       .check(matches(isDisplayed()));
}

我也尝试过使用我无法成功的 onData(编译/构建), 因为我正在使用 CursorLoader 和 ResourceCursorAdapter。

解决我的测试用例的任何示例都会很棒。

【问题讨论】:

    标签: android gridview android-espresso


    【解决方案1】:

    是的,您应该使用 onData 语句来避免在 GridView 中滚动出现问题。您可以在这里查看示例 - http://droidtestlab.com/adapterView.html

    但在您的情况下,您将拥有 android.database.Cursor 接口作为 onData 的参数。像这样的东西(在这里你指定你想等待 GridView 中第一列等于“VALUE”的数据,然后点击这条记录):

    onData(allOf(is(new BoundedMatcher<Object, Cursor>(Cursor.class) {
        @Override
        public void describeTo(Description description) {
        }
        @Override
        protected boolean matchesSafely(Cursor cursor) {
            return cursor.getString(0).equals("VALUE");
        }
    }))).inAdapterView(withId(<ADAPTER_ID>)).perform(click());
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-25
      • 2021-12-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多