自动化测试元素定位是难点之一,编写脚本时会经常卡在元素定位这里,有时一个元素能捣鼓一天,到最后还是定位不到。
Appium 定位方式和 selenium 一脉相承,selenium 中的定位方式Appium 中都支持,而 Appium 还增加了自己特定的方式用来定位原生的 Android 与 iOS 元素。
1、Appium 元素的定位方式
Appium 支持以下元素定位方式
ID,本机元素标识符。 Android 的 resource-id; iOS 的 Name
NAME,1.4以上版本已经不支持该定位方式
CLASS_NAME,Android, UIAutomator2 类的全名; IOS, 以XCUIElementType 开头的XCUI 元素全名。
LINK_TEXT(没用),链接的完整文字
PARTIAL_LINK_TEXT(没用),链接的部分文字
TAG_NAME ,元素的结点名称
CSS_SELECTOR,css 定位,检索 page source 的 xml 文档的有效 css
XPATH(不推荐),xpath 定位,检索 page source 的 xml 文档的有效 xpath
ACCESSIBILITY_ID,通过附加给定元素的辅助功能ID或标签定位元素,如 Android 的 content-desc属性, iOS 的 accessibility-id 属性。
IMAGE (实验阶段,不推荐使用), 根据base64编码的图像文件定位元素
CUSTOM (实验阶段,不推荐使用), 使用第三方插件定位元素
ANDROID_UIAUTOMATOR, 使用 Android 的 UiAutomator Api 定位元素,特别是UiSelector类来定位元素。
ANDROID_VIEWTAG, 通过Android元素视图定位元素
IOS_UIAUTOMATION, 使用iOS 的 UIAutomation 库去定位元素,(iOS 9.3及以下版本)
IOS_PREDICATE, 使用 iOS Predicate 定位元素(需要 iOS 10.0及更高版本)
IOS_CLASS_CHAIN (不推荐), 仅支持iOS 的 XCTest 框架,不如 xpath
上面的定位方式一堆,很多种,其实大多数用不到,常用有 id,accessibility id,android uiautomator(ios uiautomation\ios predicate),xpath。
xpath iOS不推荐使用, 当前版本对 iOS 支持不友好,非常慢。
2、抓取元素
2.1 Android 抓取元素(uiautomatorviewer)
uiautomatorviewer 工具在SDK的安装目录下的tools文件夹下,
第一步,启动模拟器或连接手机开启调试模式
第二步,使用命令 uiautomatorviewer 打开 UI Automator Viewer,如图:
2.2 iOS 抓取元素
iOS 的UI自动化测试只能在Mac上运行,抓取元素使用Appium自带工具。
- Start Server 启动Appium
2. 点击搜索图标按钮
3. 输入App启动的Desired Capabilities,点击Start session 启动
注意:模拟器可以直接此启动,真机需要链接上电脑后启动,并指定真机的udid
4. 通过选取元素工具,选择需要定位的元素,元素的属性信息出现在右边
顶部工具栏按钮功能说明:
选取元素:选择视图区域元素,获取元素信息
滑动屏幕:在视图区域点击两次,通过两次的坐标,在模拟器中滑动屏幕
点击:在视图区域点击,模拟器中也触发相应的点击
返回上一级:相当于 Back
更新页面视图:当模拟器中页面与视图不一致时,用来更新视图
查找元素:能通过id,name,XPath, class name等查找元素。用来确认元素定位。
Selected Element 的信息
常用来定位元素的是accessibility id和name,无法使用其他元素定位方式的情况下才采用xpath
注意:使用xpath时,工具自动生成的xpath稳定性和可靠性不高,进行手写,不要使用//td[5] 这类的节点。
2.3 Mac 抓取Android元素
Mac 抓取Android可以使用uiautomatorviewer工具和appium,uiautomatorviewer 也是在SDK安装目录的tools目录下。
appium 与定位 iOS 一样,在Desired Capabilities中设置启动信息为Android的就可以,差别在于,Android必需先启动模拟器,它无法自动启动。
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!