Espresso - 单击 gridview 中的图像

Espresso - click an image inside a gridview

我有一个如下所示的视图层次结构:

GridView{id=2131362110, res-name=item_list_grid, 
|
+----->RelativeLayout{id=2131362124, res-name=item_image_thumb_layout
|
+------------->ImageView{id=2131362125, res-name=item_image
|
+----->RelativeLayout{id=2131362124, res-name=item_image_thumb_layout
|
+------------->ImageView{id=2131362125, res-name=item_image
|
+------>RelativeLayout{id=2131362124, res-name=item_image_thumb_layout
|
+------------->ImageView{id=2131362125, res-name=item_image
|
GridView{id=2131362110, res-name=item_list_grid, ...etc

我想点击其中一个 id=item_image 的 ImageView。

我不能将 atPosition(x) 之类的东西与 onView 一起使用,所以我使用了 onData。我尝试了所有这些:

onData(allOf(anything(),withId(R.id.item_image))).atPosition(0).perform(click());

onData(anything()).atPosition(0).perform(click());

onData(allOf(atPosition(0),withId(R.id.item_image))).perform(click());

但所有的结果都是

android.support.test.espresso.AmbiguousViewMatcherException: 'is assignable from class: class android.widget.AdapterView' matches multiple views in the hierarchy.

对此有什么建议吗?谢谢!

您的错误消息告诉您 activity 中有多个扩展表单 AdapterView 的视图,因此您的布局中有另一个 ListViewGridView

您可以在数据层上 select 或 AdapterView。所以 select 这个 AdapterView 带有 ItemModel

类型的项目
onData(is(instanceOf(ItemModel.class))).atPosition(0)
    .onChildView(withId(R.id.item_image)).perform(click());

或者您可以通过 id

选择特定的 AdapterView
onData(anything()).inAdapterView(withId(R.id.my_grid_view)).atPosition(0).
            onChildView(withId(R.id.item_image)).perform(click());