2

我正在尝试使用Google 的 Espresso来实现这一点,但是我没有找到任何ViewAssertion可以ViewAction让我这样做的东西。

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

谢谢!

4

3 回答 3

6

尽管@denys 的答案乍一看似乎是正确的,但它似乎只适用于某些情况(正如Espresso 作者所建议的那样)。滚动到特定项目的正确方法是在android-test-kit-discuss论坛上回复这里,并在下面转载:

onData(instanceOf(Item.class))
            .inAdapterView(allOf(withId(android.R.id.list), isDisplayed()))
            .atPosition(9)
            .check(matches(isDisplayed()));
于 2014-03-07T19:10:27.310 回答
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())
于 2015-03-15T18:21:07.877 回答
0

如果你已经有了这个特定的号码,那么你已经做了这样的事情:

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

如果 ListView 在具有特定编号的位置没有项目,这将失败。

编辑:

也看看这个例子 -浓缩咖啡样品。它将帮助您检查 spesificNumber 之后列表中是否没有更多项目。

于 2014-02-07T10:30:52.580 回答