【问题标题】:Android Espresso ListView click itemAndroid Espresso ListView 点击项
【发布时间】: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,你能给出代码的例子吗?没找到?

标签: android android-listview android-espresso ui-testing


【解决方案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());
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-06
        • 1970-01-01
        • 2012-06-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多