PopupWindow$PopupViewContainer(@xxxxxxxx)
--ListPopupWindow$DropDownListView(@yyyyyyyy)
--RelativeLayout(@zzzzzzz)
ImageView
TextView
--RelativeLayout(@aaaaaaaa)
ImageView
TextView
--RelativeLayout(@aaaaaaaa)
ImageView
TextView
Run Code Online (Sandbox Code Playgroud)
我想知道如何使用espresso android自动化访问RelativeLayout 2中的TextView,因为@id它不存在并且值是动态分配的。
上面是下拉列表,我想单击第二个选择。
例如,当我们在任何搜索框中搜索项目时,我们都会得到列表填充。我想单击填充列表中的第二个。所有的元素ID都是动态的。
小智 6
我一直在努力解决这个问题,我发现您需要使用 的组合withText来选择视图和一个名为的选项,该选项RootMatchers.isPlatformPopup()将尝试在视图中找到匹配的文本,例如自动完成视图,它实际上是为此目的而设计的。
它应该看起来像;
onView(withText("matching text"))
.inRoot(RootMatchers.isPlatformPopup())
.perform(click());
Run Code Online (Sandbox Code Playgroud)
您也许可以做到
onData(anything())
.atPosition(1)
.perform(click());
Run Code Online (Sandbox Code Playgroud)
但是,这仅假设一个适配器视图。如果您还有其他人,则需要以某种方式挑选出来ListPopupWindow$DropDownListView。
我知道您说过所有ID都是动态的,但是是否可以通过ID选择某些祖先视图?如果是这样,您可以做类似的事情
onData(anything())
.inAdapterView(isDescendantOfA(withId(someAncestorId)))
.atPosition(1)
.perform(click());
Run Code Online (Sandbox Code Playgroud)
作为最后的选择,我们可以在类名上进行匹配,但这有点脆弱:
onData(anything())
.inAdapterView(withClassName(equalTo(
"android.widget.ListPopupWindow$DropDownListView")))
.atPosition(1)
.perform(click());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3146 次 |
| 最近记录: |