单击Espresso中ListView的特定子项

时间:2013-10-30 22:53:47

标签: android-espresso

使用Espresso,我希望能够点击ExpandableListView(名为CustomExpandableView)的特定子项。 listview创建一组RelativeLayouts(名为MyContainer)。

理想情况下,我想在CustomExpandableView中单击特定的MyContainer。但是,我可以忍住只点击第一个。

MyContainer对象没有我可以引用的唯一ID,但是他们的孩子会这样做,例如 - “text = Sample Text Here 1”

我尝试过使用onData传递类类型并试图让孩子处于特定位置的一些不同变体,但它只是不起作用。并且,我想避免获取对象并迭代它直到找到合适的孩子。

以下是视图层次结构的一部分供参考(我从层次结构中删除了非重要信息):

+----->CustomExpandableView{} 
|
+------>LinearLayout{}
|
+------->TextView{}
|
+------->FrameLayout{}
|
+-------->BreadCrumbView{}
|
+--------->ImageButton{}
|
+--------->TextView{}
|
+------>LinearLayout{}
|
+------->MyContainer{}
|
+-------->ImageView{res-name=thumb, }
|
+-------->ImageView{res-name=divider}
|
+-------->TextView{res-name=label, text=Sample Text Here 1, input-type=0, ime-target=false}
|
+------->MyContainer{}
|
+-------->ImageView{res-name=thumb}
|
+-------->ImageView{res-name=divider}
|
+-------->TextView{res-name=label text=Sample Text Here 2, input-type=0, ime-target=false}
|

4 个答案:

答案 0 :(得分:0)

尝试使用与hasSibling匹配器匹配的instanceOf,例如

onView(allOf(is(instanceOf(MyContainer.class)), hasSibling(withText("Sample Text Here 1"))))

答案 1 :(得分:0)

您可以点击Google EspressoSamples直接提供 您必须使用onData()作为例如

onData(allOf(is(instanceOf(Map.class)), hasEntry(equalTo("STR"), is("item: 50")))
  .perform(click());

答案 2 :(得分:0)

当您尝试使用onData时,Espresso尝试查找某些参数不是查看,但获取Adapter ListView并在此适配器中搜索数据(通过调用{{1} }})。

但是在Adapter#getItem的情况下,要获得的数据并不明显。 为此,Espresso提供了ExpandableListView。这个方法javadoc说:

onData...().usingAdapterViewProtocol(AdapterViewProtocol)

此AdapterViewProtocol接口如下所示:http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.0.0_r1/com/google/android/apps/common/testing/ui/espresso/action/AdapterViewProtocol.java

/** * Use a different AdapterViewProtocol if the Adapter implementation does not * satisfy the AdapterView contract like (@code ExpandableListView) */ 实施的示例:https://stackoverflow.com/a/40282991/1282732

正确定义后,AdapterViewProtocol会找到您搜索的项目视图。之后,如果您需要执行操作或检查孩子。你应该onData

答案 3 :(得分:0)

-C

如果您知道需要访问子级的视图位置,这将很有帮助。 在第一行中,我从列表视图中获得了第十个位置视图(即视图组)。 在第二行中,我访问其子级“复选框”并对其进行声明。仅供参考:这是在kotlin中,您可以使用android studio将其转换为java。