检查ListView是否具有特定的项目数,然后使用Espresso滚动到最后一项

时间:2014-02-06 13:28:06

标签: android integration-testing android-espresso

我正在尝试使用Google's Espresso来实现此功能,但是我找不到允许我这样做的ViewAssertionViewAction

我不确定这些是否可以使用捆绑在匹配器中完成,或者我应该自己编写。

谢谢!

3 个答案:

答案 0 :(得分:6)

即使@denys的答案乍一看似乎是正确的,但它看起来只适用于某些情况(如Espresso author所示)。滚动到特定项目的正确方法在android-test-kit-discuss论坛上回复,并在下面转载:

onData(instanceOf(Item.class))
            .inAdapterView(allOf(withId(android.R.id.list), isDisplayed()))
            .atPosition(9)
            .check(matches(isDisplayed()));

答案 1 :(得分:1)

看起来像这样:

<强> 1。找到listView中的元素数量并将其保存在某个变量中:

    final int[] counts = new int[1]; 
    onView(withId(R.id.some_list_view)).check(matches(new TypeSafeMatcher<View>() {
        @Override
        public boolean matchesSafely(View view) {
            ListView listView = (ListView) view;

            counts[0] = listView.getCount();

            return true;
        }

        @Override
        public void describeTo(Description description) {

        }
    }));

<强> 2。然后,知道listView中的元素数量,您可以滚动到范围内的任何元素。

onData(anything()).inAdapterView(R.id.some_list_view).getPosition(<item_index>).perform(scrollTo())

答案 2 :(得分:0)

如果您已经拥有此特定号码,那么您可以执行以下操作:

onData(is(instanceOf(yourClass.class)))
    .inAdapterView(withId(R.id.some_list_view))
    .atPosition(spicificNumber)
    .perform(scrollTo());

如果ListView在具有specificNumber的位置没有项目,则会失败。

编辑:

另请参阅此示例 - Espresso samples。它将帮助您检查spesificNumber之后列表中是否没有其他项目。