Android Espresso ListView 点击项

Posted

技术标签:

【中文标题】Android Espresso ListView 点击项【英文标题】:Android Espresso ListView click item 【发布时间】:2015-01-19 07:33:46 【问题描述】:

我有带有图片和文字的ListView。当我尝试单击项目时,出现错误

android.support.test.espresso.AmbiguousViewMatcherException: 'with id: com.cifrasoft.telefm:id/cardsGridView' matches multiple views in the hierarchy.
Problem views are marked with '****MATCHES****' below.

我使用以下代码:

onData(hasToString(startsWith("Item Text")))
            .inAdapterView(withId(R.id.cardsGridView))
            .perform(click());

我可以使用Adapter的位置点击ListView,没有匹配或startWith吗?

【问题讨论】:

这意味着您在视图层次结构中有多个具有命名 ID 的视图。您可以发布整个错误消息吗? 是的,当然。但是完整的错误太长了。pastebin.com/eahDGDMb 从整个层次结构来看,您似乎有一个 ViewPager,它显示了多个页面,其中三个具有带有 ID cardsGridView 的 AdapterView。因此,您有一个 AdapterView,即 ViewPager,以及另一个嵌套的 AdapterView,即您的 ListView。可行的方法是给从 Adapter.getView 返回的视图单独的 ID 或标签,并在 inAdapterView() 调用中使用 isDescendantOf() 匹配器和 withId。 haffax,你能给出代码的例子吗?没找到? 【参考方案1】:

尝试使用 atPosition()。例如

onData(hasToString(startsWith("Item Text")))
            .inAdapterView(withId(R.id.cardsGridView)).atPosition(0)
            .perform(click());

索引为 0 时,它将点击找到的第一个匹配视图。

【讨论】:

【参考方案2】:

使用Record Test获取列表的ViewInteraction然后获取视图并使用performItemClick如下:

AtomicReference<ListView> resultView = new AtomicReference<>(null);
ViewInteraction viewInteraction1 = onView( ... withId(R.id.my_list_id), ...);
viewInteraction1.check(((view, noViewFoundException) -> 
    if(noViewFoundException != null)
        return;
    

    resultView.set((ListView) view);
));

if(resultView.get() != null)
    ListView listView = resultView.get();
    activity.runOnUiThread(()->
        listView.performItemClick(
            listView.getAdapter().getView(index, null,null),
            index,
            listView.getAdapter().getItemId(index));
    );

【讨论】:

【参考方案3】:

试试这个:

onView(withText("ListItemText")).perform(ViewActions.click());

【讨论】:

以上是关于Android Espresso ListView 点击项的主要内容,如果未能解决你的问题,请参考以下文章

Espresso 如何点击一个 ImageView 放置在 listview 的第一项?

Espresso - 如何定位并单击ListView中的第一个项目

recyclerView的用法

有没有办法用 Espresso 测试 Chrome 自定义标签?

Espresso - 在列表视图中按文本点击

Android的报错提示:Failed to resolve: com.android.support.test.espresso:espresso-core:3.0.2