7

我正在尝试使用通用方法实现 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");
   }
}
4

2 回答 2

13

我让它与以下代码一起工作,它基于 UISelector 的可点击属性:

listview.getChild(new UiSelector().clickable(true).index(index)).click();
于 2013-12-30T12:05:30.423 回答
1

开发人员页面实现了一个类似的场景,在此处找到- 尽管这假设子代中存在一些可供选择的识别特征(如下例中的字符串“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")
                )
)
于 2020-06-10T19:17:03.277 回答