Uiautomator2

简介

uiautomator2是一个自动化测试开源工具,仅支持Android平台的原生应用测试。它本来是Google提供的一个自动化测试的Java库,后来发展了python-uiautomator2,封装了谷歌自带的uiautomator测试框架,提供便利的python接口,用它可以很便捷的编写python脚本来实现app的自动化测试。

uiautomator2貌似对H5架构的元素无法定位


按现开发技术,app可以分成三大类:

原生应用(nativeApp)

原生应用开发,是在 Android、iOS 等移动平台上利用官方提供的开发语言、开发类库、开发工具进行 App 开发。所以原生架构的 App 在应用性能上和交互体验上应该是最好的,但是原生应用的可移植性比较差,特别是一款原生的 App,Android 和 iOS 都要各自开发,同样的逻辑、界面要写两套。如微信 app,既有 Android 版的,也有 iOS 版的。

Web应用(WebApp)

H5 开发就是值是利用 Web 技术(HTML5、JavaScript、CSS)进行的 App 开发,现在还有一些开发框架可以利用,比如 phoneGap、bootstrap、jQuery 等。H5 开发的好处是可以跨平台,编写的代码可以同时在 Android、iOS、Windows 上进行运行。由于 Web 技术本身的限制,H5 移动应用不能直接访问设备硬件和离线存储,所以在体验和性能上有很大的局限性。

混合应用(hybridApp)

顾名思义就是原生和Web应用开发混合一起。

原生应用就对应app是原生架构,Web应用就对应app是H5架构,混合应用就是混合架构。


原理

python-uiautomator2 主要分为两个部分:

python 客户端

运行脚本,并向移动设备发送 HTTP 请求

移动设备

移动设备上运行了封装了 uiautomator2 的 HTTP 服务,解析收到的请求,并转化成 uiautomator2 的代码。

流程

  1. 在移动设备上安装atx-agent(守护进程), 随后atx-agent启动 uiautomator2 服务 (默认 7912 端口) 进行监听

  2. 在 PC 上编写测试脚本并执行(相当于发送 HTTP 请求到移动设备的 server 端)

  3. 移动设备通过 WIFI 或 USB 接收到 PC 上发来的 HTTP 请求,执行制定的操作

Uiautomator2的安装

Python环境安装

略!

adb环境安装

https://adbdownload.com/



pip 安装

https://pypi.org/project/pip/#files

cd G:\Download\pip-24.0\pip-24.0
python setup.py install

失败原因:缺少Setuptools库


Setuptools 安装

https://pypi.org/project/setuptools/#files

cd G:\Download\setuptools-69.5.1\setuptools-69.5.1

python setup.py install

继续安装pip即可


Uiautomator2安装

pip install --pre uiautomator2


atx-agent安装与启动(手机侧)

python -m uiautomator2 init
adb shell
chmod 775 /data/local/tmp/atx-agent
/data/local/tmp/atx-agent server -d


weditor安装

什么是weditor

weditor是基于python的查看APP元素的工具,能够提供辅助编写脚本、定位元素、调试代码等功能。

pip install -U weditor==0.5.2
#新版本安装报错
pip install --index pphttps://mirrors.ustc.edu.cn/pypi/web/simple/weditor==0.6.4

创建快捷方式

weditor --shortcut 


weditor启动

weditor

无线连接

手机与PC处于同一局域网时,查看手机IP

import uiautomator2 as u2
d = u2.connect('192.168.0.107')  #d=device对象

USB连接

#手机SN获取
adb devices
>List of devices attached
>R6CHBoKNT7E   device
import uiautomator2 as u2
d = u2.connect('123456789F') # USB链接设备。或者u2.connect_usb('123456f')
#当前只有一个设备时可以用
d = u2.connect_usb() 
#or
d = u2.connect() ,