浓咖啡,点击位置上的项目

时间:2016-01-19 20:42:55

标签: android gridview android-espresso

我试图点击网格视图中特定位置的项目。

onData(instanceOf(MyClass.class))
            .inAdapterView(withId(R.id.my_view))
            .atPosition(R.integer.my_id)
            .perform(click());

但我得到了java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0

我使用MockWebServer对响应进行排队,即使在屏幕上显示所有列表项后,我发现此错误,我也不确定原因。

另外,我想获取特定项目的内容。

2 个答案:

答案 0 :(得分:1)

嗯,我认为这是因为你匹配的类只有一个,而不是具有值的特定适配器。

请考虑这篇文章:

  

作为onData()的参数传递的匹配器必须与值匹配   由Adapter.getItem()返回。所以第一个版本不匹配,   因为使用了错误的类型。它应该是:

onData(is(instanceOf(IconRowAdapter.IconRow.class)))
     

在不同类型上使用equalTo也可能是一个陷阱   CharSequences。 String是CharSequence,但是如果是IconRow.getText()   返回CharSequence而不是String,那么这也可以   Spannable,Editable等,在这种情况下equalTo将不匹配。因此,如果   IconRow.getText()返回除String之外的任何内容,请确保转换它   在比较之前进入一个字符串。

这篇文章取自How to use Espresso to test item in adapter at a specific position

你的问题缺乏经过测试的课程代码,所以我不能直接给你答案。我只能建议阅读上面的StackOverflow链接。

希望有所帮助

答案 1 :(得分:0)

您可能需要在视图层次结构中更深入地“向下钻取”以获取单元格中的项目。使用网格单元格中项目的id

在“.perform”之前添加一个额外的方法调用
 onChildView(withId(R.id.???)).perform(click());

使用用户点击的视图的ID。