【问题标题】: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();

【讨论】:

  • 如何获取listview对象本身?
  • 不再适用于较新版本的 UiAutomator
【解决方案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")
                )
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-30
    • 1970-01-01
    相关资源
    最近更新 更多