自动化测试工具 - uiautomator2

前言

之前有一篇appium 自动化的介绍 (https://blog.csdn.net/weixin_42277380/article/details/102911460

这里还有另外一个自动化测试工具,是一个大佬改写,本人用过很是牛逼


简介

python-uiautomator2是一个自动化测试开源工具,仅支持Android平台的原生应用测试,它封装了谷歌自带的uiautomator2测试框架,提供便利的python接口。他允许测试人员直接在PC上编写Python的测试代码,操作手机应用,完成自动化,大大提高了自动化代码编写的效率。


工作原理

python-uiautomator2主要分为两个部分,python客户端,移动设备

  • python端: 运行脚本,并向移动设备发送HTTP请求
  • 移动设备:移动设备上运行了封装了uiautomator2的HTTP服务,解析收到的请求,并转化成uiautomator2的代码。

整个过程

  1. 在移动设备上安装atx-agent(守护进程), 随后atx-agent启动uiautomator2服务(默认7912端口)进行监听
  2. 在PC上编写测试脚本并执行(相当于发送HTTP请求到移动设备的server端)
  3. 移动设备通过WIFI或USB接收到PC上发来的HTTP请求,执行制定的操作

安装工具

  • Python2或者Python3均可。(也可以尝试使用Android上Python客户端:QPython)
  • 移动设备安装atx-agent

环境搭建

1、安装adb  :https://blog.csdn.net/weixin_42277380/article/details/102894252

2、安装python-uiautomator2   

pip install --pre -U uiautomator2

3、设备安装atx-agent

首先设备连接到PC,并能够adb devices发现该设备。

# 从github下载atx-agent文件,并推送到手机。在手机上安装包名为`com.github.uiautomator`的apk
$ python -m uiautomator2 init
success

最后提示success,代表atx-agent初始化成功。

4.安装方法weditor

 pip install --pre weditor

运行:  python -m weditor      

  


应用及操作

调用uiautomator2的过程

  1. 配置手机设备参数,设置具体操作的是哪一台手机
  2. 抓取手机上应用的控件,制定对应的控件来进行操作
  3. 对抓取到的控件进行操作,比如点击、填写参数等。

配置手机设备参数

python-uiautomator2连接手机的方式有两种,一种是通过WIFI,另外一种是通过USB。两种方法各有优缺点。
WIFI最便利的地方要数可以不用连接数据线,USB则可以用在PC和手机网络不在一个网段用不了的情况。

  1. 使用WIFI连接

    手机获取到手机的IP,并确保电脑可以PING通手机。手机的IP可以在设置-WIFI设置里面获取到。
    比如手机的IP是192.168.0.100,连接设备的代码为

    import uiautomator2 as u2
    d = u2.connect('192.168.0.100')
    
  2. 使用USB连接

    手机的序列号可以通过adb devices获取到,假设序列号是123456f,连接代码为

    import uiautomator2 as u2
    d = u2.connect_usb('123456f')

           如右图:                        

定位方式

  1. ResourceId定位: d(resourceId="com.smartisanos.clock:id/text_stopwatch").click()
  2. Text定位 d(text="秒表").click()
  3. Description定位 d(description="..").click()
  4. ClassName定位 d(className="android.widget.TextView").click()

其他具体操作可看文档:https://github.com/openatx/uiautomator2


扩展

九宫格解锁:

import uiautomator2 as u2

u = u2.connect() # 手机连接到PC即可
u.swipe_points([(0.235, 0.456), (0.503, 0.449), (0.509, 0.601), (0.777, 0.603), (0.771, 0.763), (0.222, 0.75)], 0.2)

其中(0.235, 0.456) 代表 X(23.5%) Y(45.6%). 这里用绝对坐标也可以。
最后的0.2代表每一次滑动的时间。

基本操作 - 整理补充

import uiautomator2 as u2

d = u2.connect("--serial-here--") # 只有一个设备也可以省略参数
d = u2.connect() # 一个设备时
d = u2.connect("10.1.2.3") # 通过设备的IP连接(需要在同一局域网且设备上的atx-agent已经安装并启动)

d.app_current() # 获取前台应用 packageName, activity
d.app_start("com.example.app") # 启动应用
d.app_start("com.example.app", stop=True) # 启动应用前停止应用
d.app_stop("com.example.app") # 停止应用

app = d.session("com.example.app") # 启动应用并获取session

# session的用途是操作的同时监控应用是否闪退,当闪退时操作,会抛出SessionBrokenError
app.click(10, 20) # 坐标点击

# 无session状态下操作
d.click(10, 20) # 坐标点击
d.swipe(10, 20, 80, 90) # 从(10, 20)滑动到(80, 90)
d.swipe_ext("right") # 整个屏幕右滑动
d.swipe_ext("right", scale=0.9) # 屏幕右滑,滑动距离为屏幕宽度的90%

d.press("back") # 模拟点击返回键
d.press("home") # 模拟Home键

d.send_keys("hello world") # 模拟输入,需要光标已经在输入框中才可以
d.clear_text() # 清空输入框

# 执行shell命令
output, exit_code = d.shell("ps -A", timeout=60) # 执行shell命令,获取输出和exitCode
output = d.shell("pwd").output # 这样也可以
exit_code = d.shell("pwd").exit_code # 这样也可以

# 元素操作
d.xpath("立即开户").wait() # 等待元素,最长等10s(默认)
d.xpath("立即开户").wait(timeout=10) # 修改默认等待时间

# 常用配置
d.settings['wait_timeout'] = 20 # 控件查找默认等待时间(默认20s)

# xpath操作
d.xpath("立即开户").click() # 包含查找等待+点击操作,匹配text或者description等于立即开户的按钮
d.xpath("//*[@text='私人FM']/../android.widget.ImageView").click()

d.xpath('//*[@text="私人FM"]').get().info # 获取控件信息

for el in d.xpath('//android.widget.EditText').all():
    print("rect:", el.rect) # output tuple: (left_x, top_y, width, height)
    print("bounds:", el.bounds) # output tuple: (left, top, right, bottom)
    print("center:", el.center())
    el.click() # click operation
    print(el.elem) # 输出lxml解析出来的Node

# 监控弹窗(在线程中监控)
d.watcher.when("跳过").click()
d.watcher.start()

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值