我试图点击网格视图中特定位置的项目。
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对响应进行排队,即使在屏幕上显示所有列表项后,我发现此错误,我也不确定原因。
另外,我想获取特定项目的内容。
答案 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。