使用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} |
答案 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。