缘起
公司部门调整 PC 部门和无线部门合并,原本负责主站 PC 端自动化的同事需要马上上手安卓,IOS 自动化。对于初次接触移动端的测试者来说,跨度还是有点大的。加之人员有些变动,不得不搞个工具降低学习成本,马上产出。公司 app 页面上有动态加载的元素,每次用 Appium 自带的工具抓取 Xpath 时,总是报错。为了降低自动化同学的学习成本和解决无法的问题,就对 uiautomatorviewer 二次开发。
二次开发 uiautomatorviewer 优化定位符生成自动化代码实践总结分享
和原生的 SDK 自带的 uiautomatorviewer 优点:
- 优化截图速度,修复动态元素加载页面截图报错的问题
- 优化 Xpath 提取规则,截取相对短的 Xpath
- 支持截取动态加载的页面
- 自动生成代码
- 支持 U2 的 xpath
在改造上述工具分享帖子中,有幸得到@carl 老师的神点拨:“这个还可以兼容 ios 录制呢,好好玩 ”,于是就想继续对此进行再次开发,以支持 IOS,顺便也偷点懒,生成一下 IOS 自动化中机械重复的代码(driver.findElement("//xxx.xxxxx").click())。不管是不是重复造轮子,对一个刚接触初次接触安卓,和 IOS 自动化的自己来说也是一次难得的学习机会。
不足之处希望各位老师见谅。
新工具特点:
- 不需要设置 inspector 里面的各种参数,不需要启动 appium
- 重要的一点,不需要换定位工具,安卓那边用 uiautomatorviewer ,IOS 这边用 inspector
- 自动生成代码,我喜欢的懒方式,机械的事情,我只想 Ctrl+C ,Ctrl+V
原理
appium 自带工具安卓端和 ios 原理都是相同的。截图 +Pagesource 的 xml 去根据坐标高亮选中元素。
- 安卓:安卓定位基于【右上坐标】【左下坐标】两点定位元素布局
- IOS:IOS 定位基于【右上坐标】【高度,宽度】由定位点横轴长,纵轴长去定位元素布局
其他相差无几,搞清楚这两点我们就好着手改造
- 获取 PageSource 的 xml 参考 WebDriverAgent 的 wiki 把节点名称都换成 node(XCUIElementXXXX--->node)因为以 uiautomatorviewer 为基础,所以只能 Xml 以安卓端的为参照
- 获取截图并压缩,不同的 IOS 机型截图像素是不同的,而且换算起来很麻烦,所以我选择压缩,压缩后也不用担心控件坐标与截图对应关系
- 生成 xpath,基于安卓的原理稍加改造即可。
以上参考 WebDriverAgent 的 wiki 和@carl 老师的帖子传送门
使用
- 安卓端:jar 放在【\android-sdk-windows\tools\lib】下(请先备份您自带的),启动方式猛击【\android-sdk-windows\tools\uiautomatorviewer.bat】
- IOS 位置任意位置:shell 终端执行: java -XstartOnFirstThread -jar uiautomatorviewer.jar -XstartOnFirstThread(ios 使用时,请先确保你用 appium 的 inspector 是可以抓取元素的)
具体使用方式请参照 Git 上详细使用说明,这里不赘述了。请务必先看完 Git 上的 readme 有疑问再问问题
效果
- 安卓端:
- IOS 端:
实践并总结一下各路大神的无私分享,谢谢各位授之于渔,如有雷同实属参照,改造工具没别的,跟着好的思路分享,就是干!非常感谢,期待大神们分享更多更好的工具思路。
jar 包放到 Git 上了jar 包和具体使用说明
刚完成雏形,还很多要完善的地方,刚玩自动化的人伤不起啊,下班了。
再次感谢@carl 老师的神点拨 和社区的各个老师给予的帮助!
后期打算支持生成 Python 的代码,感觉现在社区 py 很多,欢迎大家不吝赐教我继续改进!觉得 OK 的 git star 一下。
↙↙↙阅读原文可查看相关链接,并与作者交流