缘起
公司部门调整PC部门和无线部门合并,原本负责主站PC端自动化的同事需要马上上手安卓,IOS自动化。对于初次接触移动端的测试者来说,跨度还是有点大的。加之人员有些变动,不得不搞个工具降低学习成本,马上产出。公司app页面上有动态加载的元素,每次用Appium自带的工具抓取Xpath时,总是报错。为了降低自动化同学的学习成本和解决无法的问题,就对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
- 地址: https://github.com/512433465/autotest_helper
原理
appium自带工具安卓端和ios原理都是相同的。截图+Pagesource的xml去根据坐标高亮选中元素。
- 安卓:安卓定位基于【右上坐标】【左下坐标】两点定位元素布局
- IOS:IOS定位基于【右上坐标】【高度,宽度】由定位点横轴长,纵轴长去定位元素布局 其他相差无几,搞清楚这两点我们就好着手改造
- 获取PageSource的 xml 参考WebDriverAgent的wiki 把节点名称都换成node (XCUIElementXXXX--->node)因为以uiautomatorviewer 为基础,所以只能Xml以安卓端的为参照
- 获取截图并压缩,不同的IOS机型截图像素是不同的,而且换算起来很麻烦,所以我选择压缩,压缩后也不用担心控件坐标与截图对应关系
- 生成xpath,基于安卓的原理稍加改造即可。 以上参考WebDriverAgent的wiki和@carl 老师的帖子传送门
使用
- 安卓端:jar放在【android-sdk-windows oolslib】下(请先备份您自带的),启动方式猛击【android-sdk-windows oolsuiautomatorviewer.bat】
- IOS位置任意位置:shell终端执行: java -XstartOnFirstThread -jar uiautomatorviewer.jar -XstartOnFirstThread(ios使用时,请先确保你用appium的inspector是可以抓取元素的)
具体使用方式请参照Git上详细使用说明,这里不赘述了。请务必先看完Git上的readme有疑问再问问题
效果
- 安卓端:
- IOS端:
实践并总结一下各路大神的无私分享,谢谢各位授之于渔,如有雷同实属参照,改造工具没别的,跟着好的思路分享,就是干!非常感谢,期待大神们分享更多更好的工具思路。
jar包放到Git上了jar包和具体使用说明