uiautomator2+python自动化测试1-环境准备

一,前言

  1. uiautomator是Google提供的用来做安卓自动化测试的一个Java库。功能很强,可以对第三方App进行测试,获取屏幕上任意一个APP的任意一个控件属性,并对其进行任意操作,但有两个缺点:
  • 测试脚本只能使用Java语言
  • 测试脚本必须每次被上传到设备上运行。
  1. 我们希望测试能够用Python编写,能够在电脑上运行的时候就控制手机,于是就有了uiautomator,后来又有了uiautomator2,详情查看github地址https://github.com/openatx/uiautomator2

  2. 环境准备
    python 3.6
    uiautomator2 0.3.3

二,uiautomator2工作原理

  1. 分为两个部分:
  • PC上的python端:运行脚本,并向系统设备发送http请求
  • 移动设备:移动设备上运行了封装了uiautomator2的HTTP服务,解析收到的请求,并转化成uiautomator2的代码。
    在这里插入图片描述
    在这里插入图片描述
    2.整个过程
  • 在移动设备上安装atx-agent(守护进程), 随后atx-agent启动 uiautomator2 服务 (默认 7912 端口) 进行监听
  • 在 PC 上编写测试脚本并执行(相当于发送 HTTP 请求到移动设备的 server 端)
  • 移动设备通过 WIFI 或 USB 接收到 PC 上发来的 HTTP 请求,执行制定的操作

三,安装工具

  1. 安装工具
  • Python2 或者 Python3 均可。(也可以尝试使用 Android 上 Python 客户端:QPython)
  • 移动设备
  1. 环境搭建
  • 安装 adb
    如命令行可以执行adb devices,则跳过此步骤,从谷歌官网下载 Android Platform Tools https://developer.android.com/studio/releases/platform-tools.html,解压,并加包含adb.exe的目录加入到系统的 PATH 中。
  1. 安装 python-uiautomator2
pip install --pre -U uiautomator2
  1. 设备安装 atx-agent
    首先设备连接到 PC,并能够通过 adb devices 发现该设备。
# 从github下载atx-agent文件,并推送到手机。在手机上安装包名为`com.github.uiautomator`的apk
$ python -m uiautomator2 init
success
最后提示 success,代表 atx-agent 初始化成功。
  1. 应用及操作,调用 uiautomator2 的过程
  • 配置手机设备参数,设置具体操作的是哪一台手机
  • 抓取手机上应用的控件,制定对应的控件来进行操作
  • 对抓取到的控件进行操作,比如点击、填写参数等。
  1. 配置手机设备参数
  • python-uiautomator2 连接手机的方式有两种,一种是通过 WIFI,另外一种是通过 USB。两种方法各有优缺点。

  • WIFI 最便利的地方要数可以不用连接数据线,USB 则可以用在 PC 和手机网络不在一个网段用不了的情况。

    6.1 使用 WIFI 连接

    • 手机获取到手机的 IP,并确保电脑可以 PING 通手机。手机的 IP 可以在设置-WIFI 设置里面获取到。
    • 比如手机的 IP 是192.168.0.100,连接设备的代码为
    import uiautomator2 as u2
    d = u2.connect('192.168.0.100')
    

    6.2 使用 USB 连接

    • 手机的序列号可以通过adb devices获取到,假设序列号是123456f,连接代码为
    import uiautomator2 as u2
    d = u2.connect_usb('123456f')
    
  1. 抓取手机上应用的控件
    虽然很想用 Android SDK 内置工具uiautomatorviewer.bat,但是运行 uiautomator2 的时候,uiautomatorviewer.bat运行不起来,两者之间冲突太严重。
    于是参考着uiautomatorviewer的界面,可以使用weditor,调用 python-uiautomator2 的两个接口screenshot和dump_hierarchy这样就不会有冲突问题了
    weditor的安装使用方法详见第二篇帖子

  2. 定位方式

  • ResourceId 定位: d(resourceId=“com.smartisanos.clock:id/text_stopwatch”).click()
  • Text 定位 d(text=“秒表”).click()
  • Description 定位 d(description="…").click()
  • ClassName 定位 d(className=“android.widget.TextView”).click()
  1. 操作控件
  • click操作:d(text=“Settings”).click()
  • long click操作:d(text=“Settings”).long_click()
  • 等待元素的出现:d(text=“Settings”).wait(timeout=10.0)
  1. 中文字符的输入
  • 如果可以定位到元素,直接通过 set_text 就可以输入中文:d(text=“Settings”).set_text(“你好”)
  • 如果定位不到元素需要使用send_keys方法,以及切换输入法
d.set_fastinput_ime(True)
d.send_keys("你好 Hello")
d.set_fastinput_ime(False) # 输入法用完关掉
  1. 截图:d.screenshot(“home.jpg”)
  2. 获取图层信息:xml = d.dump_hierarchy()
  3. 九宫格解锁
    在这里插入图片描述
    13.1 通常这种方式会用在很多的理财软件,开机密码,等等与安全有关的地方。那改如何用自动化的方式测试它呢。
    13.2 其实实现起来也很简单。Uiautomator2 里面有一个 swipe 方法,可以通过传入多个点的坐标来实现解锁九宫格
    13.3 说了这么多,直接上代码吧。
    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)
    
    13.4 其中(0.235, 0.456) 代表 X(23.5%) Y(45.6%). 这里用绝对坐标也可以。
    13.5 最后的 0.2 代表每一次滑动的时间。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西门一刀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值