【问题标题】:UIAutomator click listview based on indexUIAutomator基于索引点击listview
【发布时间】:2013-12-24 07:58:33
【问题描述】:
我正在尝试使用通用方法实现 UIAutomator 测试用例,以执行对 ListView 项的单击(无论持有该列表项的视图组类型如何)。
目前我有以下代码,但它一直点击第一项。
public void clickListViewItem(int index) throws UiObjectNotFoundException {
UiObject listview = new UiObject(new UiSelector().className("android.widget.ListView"));
if(index <= listview.getChildCount()){
listview.getChild(new UiSelector().index(index)).click();
}else{
throw new UIObjectNotFoundException("Index is greater than listSize");
}
}
【问题讨论】:
标签:
android
listview
android-uiautomator
【解决方案1】:
我让它与以下代码一起工作,它基于 UISelector 的可点击属性:
listview.getChild(new UiSelector().clickable(true).index(index)).click();
【解决方案2】:
开发者页面实现了一个类似的场景,发现 here - 尽管这假设子代中存在一些可供选择的识别特征(如下例中的字符串“Apps”):
如果找到多个匹配元素,则将布局层次结构中的第一个匹配元素作为目标 UiObject 返回。构建 UiSelector 时,您可以将多个属性链接在一起以优化您的搜索。如果未找到匹配的 UI 元素,则会引发 UiAutomatorObjectNotFoundException。
您可以使用 childSelector() 方法嵌套多个 UiSelector 实例。例如,以下代码示例显示了您的测试如何指定搜索以在当前显示的 UI 中查找第一个 ListView,然后在该 ListView 中搜索以查找具有文本属性 Apps 的 UI 元素。
val appItem: UiObject = device.findObject(
UiSelector().className("android.widget.ListView")
.instance(0)
.childSelector(
UiSelector().text("Apps")
)
)