简单介绍

python-uiautomator2 是一个自动化测试开源工具,仅支持 Android 平台的原生应用测试。

支持平台及语言

python-uiautomator2 封装了谷歌自带的 uiautomator2 测试框架,提供便利的 python 接口。他允许测试人员直接在 PC 上编写 Python 的测试代码,操作手机应用,完成自动化,大大提高了自动化代码编写的效率。

工作原理

以下图片使用 Windows 画图软件
uiautomator环境配置(UI自动化) - 图1
如图所示,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)
  • 移动设备

    环境搭建

    安装 adb

    如命令行可以执行
    1. adb devices
    adb devices,则跳过此步骤
    从谷歌官网下载 Android Platform Tools https://developer.android.com/studio/releases/platform-tools.html,解压,并加包含adb.exe的目录加入到系统的 PATH 中。

    安装 python-uiautomator2

    pip install —pre -U uiautomator2

    设备安装 atx-agent

    首先设备连接到 PC,并能够adb devices发现该设备。
    # 从github下载atx-agent文件,并推送到手机。在手机上安装包名为com.github.uiautomator的apk $ python -m uiautomator2 init success
    最后提示 success,代表 atx-agent 初始化成功。

    应用及操作

    调用 uiautomator2 的过程

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

    配置手机设备参数

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

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

  5. 使用 USB 连接手机的序列号可以通过adb devices获取到,假设序列号是123456f,连接代码为import uiautomator2 as u2 d = u2.connect_usb(‘123456f’)

    抓取手机上应用的控件

    虽然很想用 Android SDK 内置工具uiautomatorviewer.bat,但是运行 uiautomator2 的时候,uiautomatorviewer.bat运行不起来,两者之间冲突太严重。
    于是参考着uiautomatorviewer的界面,我又写了一个weditor,调用 python-uiautomator2 的两个接口screenshot和dumphierarchy这样就不会有冲突问题了
    注:weditor 依然处于开发期,功能可能会跟文中描述的有所不同
    安装方法: pip install —pre weditor
    使用方法:
    首先运行python -m weditor,之后浏览器会自动打开一个网页 http://atx.open.netease.com(注:这个网址仅提供一个前端,而python -mweditor这个命令则本地开放了 HTTP 的接口,前端去跟本地的服务去通信)
    下图为网页的截图
    uiautomator环境配置(UI自动化) - 图2
    重点说下这个部分
    uiautomator环境配置(UI自动化) - 图3
    先忽略iOS和Neco这两个,直接选择 Android。输入框中可以写设备的 IP 或者设备的 Serial(序列号),跟上面提到的
    配置手机设备参数_用法一致。之后点击 Connect,如果一切正常就会出现一个绿色的叶子。
    uiautomator环境配置(UI自动化) - 图4
    页面刷新时,点击蓝色的 Reload 按钮重新刷新。
    uiautomator环境配置(UI自动化) - 图5
    定位方式

  6. ResourceId 定位: d(resourceId=”com.smartisanos.clock:id/text_stopwatch”).click()

  7. Text 定位 d(text=”秒表”).click()
  8. Description 定位 d(description=”..”).click()
  9. ClassName 定位 d(className=”android.widget.TextView”).click()

xpath 定位并不支持,一开始打算做支持的,但是发现不用也能搞定。就是代码写的长一点而已。

操作控件

click d(text=”Settings”).click() # long click d(text=”Settings”).longclick() # 等待元素的出现 d(text=”Settings”).wait(timeout=10.0)
九宫格解锁:以前文章写过 https://testerhome.com/topics/11034
中文字符的输入
如果可以定位到元素,直接通过 set_text 就可以输入中文
d(text=”Settings”).set_text(“你好”)
如果定位不到元素需要使用send_keys方法,以及切换输入法
d.set_fastinput_ime(True) d.send_keys(“你好 Hello”) d.set_fastinput_ime(False)
# 输入法用完关掉 _
截图:d.screenshot(“home.jpg”)
获取图层信息:xml = d.dump_hierarchy()
还有太多太多的操作,我就不写了。更多更详细的 API 接口文档,直接去 Github 上看文档吧, 记得留下你的 Star
https://github.com/openatx/uiautomator2

搞定收工

_^