python中uiautomator2环境安装
uiautomator2简介
什么是uiautomator2?
python-uiautomator2 是一个自动化测试开源工具,仅支持 Android 平台的原生应用测试。
原理:在手机上运行了一个http rpc服务,将uiautomator中的功能集成进来,然后再将这些http接口封装成Python库。
uiautomator2的优点
- 环境搭建便捷
- UI控件识别有专业工具weditor,可视化好
- UI自动化编写采用Python
- UI自动化脚本运行稳定
- 帮助文件是中文
官网:https://github.com/openatx/uiautomator2
Uiautomator2支持环境
1、Android版本 4.4+
2、Python3.6+
uiautomator2安装
python环境:python3.7.1
pip install uiautomator2
安装完成后查看uiautomator2,所有依赖的包如下图:
uiautomator2对连接的移动设备进行初始化
uiautomator2模块安装完成后,就需要对连接的移动设备进行初始化。
初始化命令:python -m uiautomator2 init 执行后会自动下载下面依赖包到移动设备中
- 下载uiautomator-server谷歌原生的uiautomator
- atx-agent:uiautomator的守护进程
- atx-agent增加远程控制的功能,依赖minicap和minitouch这两个工具
已安卓模拟器为例来说明初始化的过程
前提条件:
安卓模拟器,设置--->开发者选择中-->开启USB调试
移动设备是安卓手机,通过usb线连接且必须开启USB调试;
执行:python -m uiautomator2 init 进行初始化操作
如下图对移动设备初始化完成,会在移动设备中安装ATX包
原理:移动设备上安装atx-agent(守护进程),随后atx-agent启动uiautomator2服务(默认7912端口)进行监听;
在PC端使用Python编写测试脚本并执行(相当于发送HTTP请求到移动设备的server端);
移动设备通过WIFI或USB接收到PC上发来的HTTP请求,执行指定的操作;
查看端口命令:
adb shell -->查到进程号 输入命令: busybox netstat -pt | grep 进程号 查看端口
测试代码:
#!/usr/bin/env python # -*- coding: utf-8 -*- # author: 青城子 # datetime: 2021/4/11 22:48 # ide: PyCharm import uiautomator2 as u2 import time d = u2.connect("127.0.0.1:62025") # 打开debug模式,查看通讯流程 d.debug = True # 查看简单的设备信息 print(d.info)
输出:
C:\Python\python.exe C:/work/imooc/u2_project/test2.py
11:34:01.871 $ curl -X POST -d '{"jsonrpc": "2.0", "id": "32cc7a24de4501c621d05b4c4f28e382", "method": "deviceInfo", "params": {}}' 'http://127.0.0.1:39356/jsonrpc/0'
11:34:02.112 Response (241 ms) >>>
{"jsonrpc":"2.0","id":"32cc7a24de4501c621d05b4c4f28e382","result":{"currentPackageName":"com.android.settings","displayHeight":1280,"displayRotation":0,
"displaySizeDpX":480,"displaySizeDpY":853,"displayWidth":720,"productName":"VOG-AL10","screenOn":true,"sdkInt":22,"naturalOrientation":true}}
<<< END
{'currentPackageName': 'com.android.settings', 'displayHeight': 1280, 'displayRotation': 0, 'displaySizeDpX': 480, 'displaySizeDpY': 853, 'displayWidth': 720, 'productName':
'VOG-AL10', 'screenOn': True, 'sdkInt': 22, 'naturalOrientation': True}