Google官方提供了一个Android自动化测试工具(Java库),基于Accessibility服务,功能很强,可以对第三方App进行测试,获取屏幕上任意一个App的任意一个控件属性,并对其进行任意操作,但有两个缺点: 1。测试脚本只能使用Java语言; 2。测试脚本要打包成jar或者apk包上传到设备上才能运行; 实际工作中,我们希望测试逻辑能够用Python编写,能够在电脑上运行的时候就控制手机。所以基于这个目的开发了pythonuiautomator2自动化测试开源工具,其封装了谷歌自带的uiautomator2测试框架,可以运行在支持Python的任一系统上,目前版本为V2。10。2。 GitHub开源地址: 如图所示,pythonuiautomator2主要分为两个部分,python客户端,移动设备python端:运行脚本,并向移动设备发送HTTP请求;移动设备:移动设备上运行了封装了uiautomator2的HTTP服务,解析收到的请求,并转化成uiautomator2的代码; 整个过程: 3。在移动设备上安装atxagent(守护进程),随后atxagent启动uiautomator2服务(默认7912端口)进行监听; 4。在PC上编写测试脚本并执行(相当于发送HTTP请求到移动设备的server端); 5。移动设备通过WIFI或USB接收到PC上发来的HTTP请求,执行制定的操作; 使用pip安装 安装完成后,使用如下python代码查看环境是事配置成功 说明:后文中所有代码都需要导入uiautomator2库,为了简化我使用u2代替,d代表driver 能正确打印出设备的信息则表示安装成功 注意:需要安装adb工具,并配置到系统环境变量,才能操作手机。 安装有问题可以到issue列表查询: weditor是一款基于浏览器的UI查看器,用来帮助我们查看UI元素定位。 因为uiautomator是独占资源,所以当atx运行的时候uiautomatorviewer是不能用的,为了减少atx频繁的启停,就需要用到此工具 使用pip安装 查看安装是否成功 出现如下信息表示安装成功 运行weditor ui2支持android中UiSelector类中的所有定位方式,详细可以在这个网址查看https:developer。android。comreferenceandroidsupporttestuiautomatorUiSelector 整体内容如下,所有的属性可以通过weditor查看到 子元素定位 child() 兄弟元素定位 sibling() 链式调用 相对定位支持在left,right,top,bottom,即在某个元素的前后左右 表格标注有property装饰的类属性方法,均为下方示例方式 exists其它使用方法: info()输出信息: 可以通过上方信息分别获取元素的所有属性 因为Javauiautoamtor中默认是不支持xpath,这是属于ui2的扩展功能,速度会相比其它定位方式慢一些 在xpath定位中,ui2中的description定位需要替换为contentdesc,resourceId需要替换为resourceid 使用方法 Android4。3时不能使用拖动 滑动有两个,一个是在driver上操作,一个是在元素上操作 元素上操作 从元素的中心向元素边缘滑动 driver上操作 即对整个屏幕操作 driver滑动的扩展方法,可以直接实现滑动,不需要再自己封装定位点 android4。3 对元素操作 封装好的放大缩小操作 设置scrollable属性为True; 滚动类型:horiz为水平,vert为垂直; 滚动方向:forward向前backward向后toBeginning滚动至开始toEnd滚动至最后to滚动直接某个元素出现 所有方法均返回Bool值; 5。8。1输入自定义文本 5。8。2输入按键 两种方法 目前press支持的按键如下 keyevent是通过adbshellinputkeyevent方式输入,支持按键更加丰富 更多详细的按键信息https:developer。android。comreferenceandroidviewKeyEvent。html 5。8。3输入法切换 5。8。4模拟输入法功能 可以模拟的功能有go,search,send,next,done,previous。 如果使用press输入按键无效,可以尝试使用此方法输入 使用wather进行界面的监控,可以用来实现跳过测试过程中的弹框 当启动wather时,会新建一个线程进行监控 可以添加多个watcher 用法 2。11。0版本新增了一个watchcontext方法,写法相比watcher更简洁,官方推荐使用此方法来实现监控,目前只支持click()这一种方法。 这里可以用来实现图案解锁 使用touch类 这个感觉是比较有用的一个功能,可以在测试用例开始时录制,结束时停止录制,然后如果测试fail。则上传到测试报告,完美复原操作现场,具体原理后面再去研究。 首先需要下载依赖,官方推荐使用镜像下载: 执行录制: 下载与录制视频同一套依赖。 这个功能是首先手动截取需要点击目标的图片,然后ui2在界面中去匹配这个图片,目前我尝试了精确试不是很高,误点率非常高,不建议使用。 可以从本地路径及url下载安装APP,此方法无返回值,当安装失败时,会抛出RuntimeError异常 默认当应用在运行状态执行start时不会关闭应用,而是继续保持当前界面。 如果需要消除前面的启动状态,则需要加stopTrue参数。 stop和clear的区别是结束应用使用的命令不同 stop使用的是amforcestop clear使用的是pmclear 卸载全部应用返回的包名列表并一定是卸载成功了,最好使用verbosetrue打印一下信息,这样可以查看到是否卸载成功 或者可以修改一下源码,使其只输出成功的包名,注释的为增加的代码,未注释的是源码 connect()可以使用如下其它方式进行连接 8。2。1获取driver信息 8。2。2获取设备信息 会输出测试设备的所有信息,包括电池,CPU,内存等 8。2。3获取屏幕分辨率 8。2。4获取IP地址 8。3。1使用settings设置 查看settings默认设置 修改默认设置,只需要修改settings字典即可 8。3。2使用方法或者属性设置http默认请求超时时间当设备掉线时,等待设备在线时长元素查找默认等待时间打开HTTPdebug信息休眠 value值参考,只要是元组中的任一一个值就可以。 打开通知栏 打开快速设置 8。7。1导入文件 8。7。2导出文件 使用shell方法执行 8。8。1执行非阻塞命令 output返回的是一个整体的字符串,如果需要抽取值,需要对output进行解析提取处理 8。8。2执行阻塞命令(持续执行的命令) 源码描述 因为有atxagent的存在,Uiautomator会被一直守护着,如果退出了就会被重新启动起来。但是Uiautomator又是霸道的,一旦它在运行,手机上的辅助功能、电脑上的uiautomatorviewer就都不能用了,除非关掉该框架本身的uiautomator 使用代码停止 手动停止 直接打开ATXAPP(init成功后,就会安装上),点击关闭UIAutomator 以上,欢迎大家一起交流探讨。 更多学习资料点击下方 Redirecting。。。