前言

uiautomator是Google提供的用来做安卓自动化测试的一个Java库。功能很强,可以对第三方App进行测试,获取屏幕上任意一个APP的任意一个控件属性,并对其进行任意操作,但有两个缺点:

  1. 测试脚本只能使用Java语言
  2. 测试脚本必须每次被上传到设备上运行。

我们希望测试能够用Python编写,能够在电脑上运行的时候就控制手机,于是就有了uiautomator,后来又有了uiautomator2,详情查看github地址https://github.com/openatx/uiautomator2

环境准备

python 3.6

uiautomator2 0.3.3

uiautomator2工作原理

分为两个部分:

PC上的python端:运行脚本,并向系统设备发送http请求

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

详情可以参考这篇:https://blog.csdn.net/zhuhuahong/article/details/81868671

1.安装uiautomator2

使用pip3安装uiautomator2 ,安装的过程中有点坑,用pip install --pre -U uiautomator2一直安装失败,找了很多教程都是这个。

最后去github上找了下教程https://github.com/openatx/uiautomator2,发现用pip3安装,抱着试试的心态,安装成功了

需cd到python的Scripts目录,再使用pip3安装

E:\python36\Scripts>pip3 install -U uiautomator2

2.adb连上手机

确保手机和电脑能连得上,使用adb devices查看链接状态,adb相关的环境本篇就不多说了,搞android测试的都知道

E:\python36\Scripts>adb devices
List of devices attached
adb server version (31) doesn't match this client (40); killing...
* daemon started successfully
emulator-5554 device

安装atx-agent

python -m uiautomator2 init

E:\python36\Scripts>python -m uiautomator2 init
[D 190716 23:34:53 __main__:28] use cache directory: C:\Users\dell\.uiautomator2
Namespace(serial=None, server=None, subparser='init') init
[I 190716 23:34:53 __main__:88] >>> Initial device AdbDevice(serial=emulator-5554)
[I 190716 23:34:53 __main__:172] Install minicap, minitouch
[Kminitouch |################################| 33.5K / 33.5K
[?25h[D 190716 23:34:56 __main__:157] Push https://github.com/openatx/stf-binaries/raw/master/node_modules/minitouch-prebuilt/prebuilt/x86/bin/minitouch -> /data/local/tmp/minitouch:0755
[I 190716 23:34:56 __main__:176] abi:x86 seems to be android emulator, skip install minicap
[I 190716 23:34:56 __main__:182] Install com.github.uiautomator, com.github.uiautomator.test
[D 190716 23:34:56 __main__:100] Shell: ('pm', 'uninstall', 'com.github.uiautomator')
[D 190716 23:34:56 __main__:100] Shell: ('pm', 'uninstall', 'com.github.uiautomator.test')
[Kapp-uiautomator.apk |################################| 1.7M / 1.7M.7M
[?25h[D 190716 23:35:05 __main__:157] Push https://github.com/openatx/android-uiautomator-server/releases/download/1.1.7/app-uiautomator.apk -> /data/local/tmp/app-uiautomator.apk:0644
[D 190716 23:35:05 __main__:100] Shell: ('pm', 'install', '-r', '-t', '/data/local/tmp/app-uiautomator.apk')
[Kapp-uiautomator-test.apk |################################| 966.8K / 966.8K
[?25h[D 190716 23:35:11 __main__:157] Push https://github.com/openatx/android-uiautomator-server/releases/download/1.1.7/app-uiautomator-test.apk -> /data/local/tmp/app-uiautomator-test.apk:0644
[D 190716 23:35:11 __main__:100] Shell: ('pm', 'install', '-r', '-t', '/data/local/tmp/app-uiautomator-test.apk')
[I 190716 23:35:18 __main__:193] Install atx-agent
[Katx-agent_0.6.0_linux_386.tar.gz |################################| 4.0M / 4.0M.0M
[?25h[D 190716 23:35:23 __main__:157] Push https://github.com/openatx/atx-agent/releases/download/0.6.0/atx-agent_0.6.0_linux_386.tar.gz -> /data/local/tmp/atx-agent:0755
[D 190716 23:35:26 __main__:100] Shell: ('/data/local/tmp/atx-agent', 'server', '--stop')
[D 190716 23:35:26 __main__:100] Shell: ('/data/local/tmp/atx-agent', 'server', '-d')
[I 190716 23:35:26 __main__:202] Check install
[D 190716 23:35:26 __main__:212] Forward: local:tcp:53461 -> remote:tcp:7912
[D 190716 23:35:28 __main__:214] atx-agent version 0.6.0
Successfully init AdbDevice(serial=emulator-5554)

看到Successfully就是安装成功了(当然总是有几个小伙伴的手机需要换下了!!!)

连接手机

python-uiautomator2连接手机的方式有两种,一种是通过WIFI,另外一种是通过USB

首先查看uiautomator状态是启动状态

1.usb连接手机

先使用adb devices获取手机的唯一识别序列号,也就是devices前面的那一串:emulator-5554

E:\python36\Scripts>adb devices

List of devices attached

emulator-5554 device

测试是否连接成功,先打开你的手机上的任意app,比如淘宝,cmd输入以下信息

E:\python36\Scripts>python
Python 3.6.0 (v3.6.0:41df79263a11, Dec 23 2016, 08:06:12) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import uiautomator2 as u2
>>> d = u2.connect_usb('emulator-5554')
>>> d.info
{'currentPackageName': 'com.taobao.taobao', 'displayHeight': 1280, 'displayRotation': 0, 'displaySizeDpX': 360,
'displaySizeDpY': 640, 'displayWidth': 720, 'productName': 'h60-l01', 'screenOn': True, 'sdkInt': 22, 'naturalOrientation': True}
>>>

看到输出'currentPackageName': 'com.taobao.taobao'说明连接成功了

2.wifi连接

首先保证手机和电脑在一个局域网,可以先ping 手机ip,看能不能ping的通

>>> import uiautomator2 as u2
>>> d = u2.connect('192.168.1.xx')
>>> d.info

最新文章

  1. 在MySQL向表中插入中文时,出现:incorrect string value 错误
  2. 基于webpack使用ES6新特性(转载)
  3. JQuery插件:遮罩+数据加载中。。。(特点:遮你想遮,罩你想罩)
  4. ePass.CreateFile
  5. php parse_url 函数教程
  6. SQLServer Ansi_Padding的用法
  7. MongoVUE 如何导出数据
  8. web项目的两个创建形式website和webapplication(转)
  9. Android 向系统添加一个联系人信息contact
  10. 轻松管理您的网络password
  11. Cocos2d-X 使用CCTableView创建滚动视图
  12. 基于web的jfreechart的使用
  13. 高可用Redis(十):Redis原生命令搭建集群
  14. 题解-洛谷P1184 高手之在一起
  15. ppt复制文本框文字到word的方法
  16. No module named pip 安装工具提示没有pip模块时,解决办法
  17. [原]DataGridView 回车不换行代码 AND 编辑时的字符控制
  18. Linux 目录结构及文件基本操作
  19. VS------csc.exe已停止工作解决方法
  20. Land of Farms HDU - 5556 二分图匹配

热门文章

  1. node excel export包导致find函数被覆盖
  2. 远程控制分析之VBS编码转换
  3. C++中的结构体所占内存空间总结
  4. vs code 自定义配置记录
  5. string字符串成员函数
  6. 小米9安装charles证书
  7. 构建helm chart应用
  8. idea 用鼠标滚轮调整代码文字大小
  9. 两个integer比较时为什么有时候会失效?
  10. js判断数组中是否有重复元素