元素定位是UI自动化测试中最关键的一步,假如在自动化测试中没有定位到页面中素,也就无法完成对页面的测试操作。那么,我们在自动化测试中如何定位到是要部面元素呢?
下面聊一聊用 Appium 定位元素的方式。
定位页面元素有很多种方式,例如,可以通过ID、accessibility_id、XPth等方式进行页面元素的定位,也可以使用 Android 和i0S 提供的定位方式实现页面元素的定位。
Accessibility ID:识别一个UI元素,对于 XCUITest 引擎,它对应的属性名是'accessibility-id',对于 Android 系统的页面元素,它对应的属性名是'content-desc'。
Class name:对于iOS 系统,它的class 属性对应的属性值会以'XCUIElementType'开头,对于 Android 系统,它对应的是UiAutomator2的class 属性(e.g·: android.widget.TextView)。
ID:原生元素的标识符,Android系统对应的属性名为'resource-id',iOS为'name'
Name:元素的名称
XPath:使用XPath表达式查找页面所对应的XML的路径(不推荐,存在性能问题)。
Image:通过匹配 base 64编码的图像文件定位元素。
Android UiAutomator(UiAutomator2 only):使用 UiAutomator提供的API,尤其是 UiSelector类来定位元素,在 Appium中,会将Java代码作为字符串发送到服务器,服务器在应用程序的环境中执行这段代码,并返回一个或多个元素。
Android View Tag (Espressoonly):使用 view tag 定位元素。
Android Data Matcher (Espressoonly):使用Espresso数据匹配器定位元素。
隐式等待是一种全局等待方式。设置了隐式等待时长,实际上是对页面中的所有查找元素的方法设置了加载时长,如果查找时间超出了设置时间则抛出异常。
假如在测试脚本中设置了隐式等待时长为10秒,测试脚本会在10秒内不停地执行查找页面元素操作,如果在第2秒就找到所需要的元素,就停止查找且继续执行后面的测试代码,如果查找时间超出了设置时间,则测试代码抛出异常。
一旦在测试代码中设置了隐式等待,则隐式等待就会存在整个WebDriver对象实例的生命周期中。例如,元素的测试代码每次调用find_element或者find_elements方法的时候,就会自动触发隐式等待。