Espresso 如何点击一个 ImageView 放置在 listview 的第一项?
Posted
技术标签:
【中文标题】Espresso 如何点击一个 ImageView 放置在 listview 的第一项?【英文标题】:Espresso how to click on a ImageView placed in listview's first item? 【发布时间】:2015-04-30 16:28:07 【问题描述】:我有一个列表视图的自定义布局,我想点击放置在列表视图项中的图像视图,列表视图中第一项的溢出图标。
我想点击id为“rcOverflow”的最后一个imageview
我的布局,
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
android:gravity="left"
android:paddingBottom="10dp"
android:paddingTop="5dp">
<ImageView
android:id="@+id/rcCircle"
android:layout_
android:layout_
android:layout_alignWithParentIfMissing="true"
android:layout_alignParentTop="true" />
<TextView
android:id="@+id/rcTime"
android:layout_
android:layout_
android:layout_marginTop="20dp"
android:gravity="right"
android:maxLines="1"
android:textColor="#ffffff"
android:textSize="13sp" />
<RelativeLayout
android:id="@+id/rsBubble"
android:layout_
android:layout_
android:layout_alignWithParentIfMissing="true"
android:layout_below="@id/recordsMonthHeader"
android:paddingBottom="16dp"
android:paddingTop="16dp">
<ImageView
android:id="@+id/rcImage"
android:layout_
android:layout_
android:adjustViewBounds="true"
android:layout_alignParentTop="true"
android:visibility="gone"
android:layout_marginLeft="3dp"
android:layout_marginRight="4dp"/>
<TextView
android:id="@+id/rcFilename"
android:layout_
android:layout_
android:layout_marginTop="5dp"
android:layout_alignParentLeft="true"
android:layout_marginLeft="10dp"
android:textColor="#000000"
android:maxLines="2"
android:ellipsize="end"
android:textSize="15sp" />
<TextView
android:id="@+id/rcDuration"
android:layout_
android:layout_
android:layout_alignParentLeft="true"
android:layout_below="@id/recordsFilename"
android:layout_marginLeft="10dp"
android:layout_marginTop="2dp"
android:textColor="#a09f9f" />
<ImageView
android:id="@+id/records_location_image"
android:layout_
android:layout_
android:layout_alignBottom="@id/recordsDuration"
android:layout_marginBottom="4dp" />
<TextView
android:id="@+id/rcLocation"
android:layout_
android:layout_
android:layout_alignBottom="@id/recordsDuration"
android:layout_marginBottom="1dp"
android:layout_marginLeft="3dp"
android:layout_marginTop="2dp"
android:ellipsize="end"
android:lines="1"
android:textColor="#a09f9f"
android:textSize="12sp"
android:visibility="gone" />
<TextView
android:id="@+id/rcTag"
android:layout_
android:layout_
android:layout_alignParentLeft="true"
android:layout_below="@id/recordsDuration"
android:layout_marginLeft="10dp"
android:layout_marginTop="3dp"
android:textColor="#a09f9f"
android:textSize="12sp"
android:visibility="gone" />
<ImageView
android:id="@+id/rcOverflow"
android:layout_
android:layout_
android:layout_below="@+id/recordsImage"
android:layout_alignParentRight="true"
android:layout_alignWithParentIfMissing="true"
android:background="?android:attr/selectableItemBackground"
android:src="@drawable/overflow" />
</RelativeLayout>
我尝试过的
onData(anything()).inAdapterView(withId(getId("recorderlistpage_listView")))
.perform(click());
或
onData(anything()).atPosition(0).inAdapterView(withId(getId("rcOverflow")))
.perform(click());
两个都不行
【问题讨论】:
【参考方案1】:我不太自信,但是这个怎么样?
onData(anything())
.inAdapterView(withId(R.id. recorderlistpage_listView))
.atPosition(0)
.onChildView(withId(R.id.rcOverflow))
.perform(click());
【讨论】:
谢谢,它有效!非常感谢!稍作调整后,我也可以“单击” NavDrawer 中的特定 ListView 位置。 @AndreyKopeyko..您是如何在 NavDrawer 中的特定 ListView 位置上实现“点击”的?可以分享一下代码吗? @saamzzz 在下面看到我的答案 - 将代码放入评论中会使所有格式都失败;-(【参考方案2】:这对我有用
onData(allOf()).atPosition(0).
onChildView(withId(R.id.rcOverflow)).
perform(click());
【讨论】:
【参考方案3】:@saamzzz 看到这个飞船
// open the Drawer and select rubric at position 0
final int first_position = 0;
DrawerActions.openDrawer(R.id.drawer_layout);
onView(withId(R.id.drawer_layout)).check(matches(isOpen()));
//// get position of last rubric
final int last_position = ((ListView) mActivity.findViewById(R.id.navDrawer_rubrics))
.getAdapter().getCount() - 1;
//// do select rubric around the middle
onData(anything())
.inAdapterView(withId(R.id.navDrawer_rubrics))
.atPosition(first_position + last_position/2)
.perform(click());
onView(withId(R.id.drawer_layout)).check(matches(isClosed()));
【讨论】:
以上是关于Espresso 如何点击一个 ImageView 放置在 listview 的第一项?的主要内容,如果未能解决你的问题,请参考以下文章