UI Testing初探之元素定位

410 阅读1分钟

背景

最近在了解用iOS的自动化框架UI Testing的一些知识,所谓UI自动化主要是模拟人的操作,基本可以简单概括为如下几个部分:元素查找 》操作元素 》断言检查点。整个实践的过程下来,发现iOS元素定位的方式比android常用的元素定位工具,e.g. uiautomatorviewer麻烦许多。

元素定位的几种方式

方式一:录制 将光标聚集在testcase的方法体里面,点击录制,在操作的过程中,会同步生产自动化代码,如图:

image.png 方式二: 通过控件的属性,e.g. title, label, value进行定位具体的元素控件

let app = XCUIApplication() let navigationBar = app.navigationBars["Master"] let addButton = navigationBar.buttons["Add"] app.tables.switches["1"].tap()

如何获取控件的属性信息呢?主要有两种方式:一是通过xcode的Accessibility Inspector可查看到具体的控件属性,如图:

image.png

另一种方式是通过Debug View Hierarchy,可查看页面布局的层级结构和具体的信息,如图:

image.png

方法三:通过路径和索引,就是从Dom树中一级一级地往下查找,到叶子结点时,再加入索引去定位: 首先通过print(app.debugDescription)打印页面的层级信息,如下:

image.png

  • 知道结构信息后,我们就可以逐层去定位具体的元素了,比如我现在想要定位到navigationbar这个标题栏,代码如下:
let navigation = app.windows.otherElements.otherElements.navigationBars

  • 方法四:通过控件类型匹配,当某种控件类型在当前的UI界面中唯一时,就可以这样去定位

    比如和刚才一样,我想定位到navigationbar这个标题栏,代码如下:

let navigation = app.descendants(matching:.navigationbar).eleement