uiautomator2 入门教程
一、前言
在 Android 自动化测试方面,Google 提供了一个基于 Java 开发的库 UiAutomator,基本上支持所有的 Android 事件操作,使用简单。
在此基础上,有大佬开发出了一个 Python 的第三方库 uiautomator,原理是在手机上运行了一个http rpc服务,将uiautomator中的功能开放出来。
在此之后,因为该库太久没有更新,又有大佬 fork 了一个版本,解决了一些问题,也增加了一些特性,使得功能更加强大了,这个库就叫做 uiautomator2。
二、环境配置
1.ADB 环境
以 Windows 系统为例,首先需要下载一个 SDK 工具:https://developer.android.com/studio/releases/platform-tools,下载完成后解压得到如下内容:

然后就是添加环境变量了,将该目录路径加入到环境变量中,添加完毕后打开 CMD 窗口输入“adb version”命令,若出现如下内容,则表明环境变量配置成功:

2.Python 环境
要使用 uiautomator2,需要 Python3.6 以上的版本,Python 安装成功以后,输入“pip install uiautomator2”安装 uiautomator2。
三、使用方法
首先需要一台开启了开发者权限的安卓手机,部分手机的开启步骤为:设置--关于手机--连续点击版本号数次,开启成功后可以在设置里找到类似“开发人员选项”的设置项,然后再打开“USB调试”功能,即可以通过 USB 连接对手机进行调试,最后将手机连接到电脑上,在 CMD 窗口中输入“adb devices”查看当前连接的设备,如下图所示即为连接成功:

手机成功连接后,执行如下命令,会在手机上安装一些调试所需的程序,例如 atx-agent。
python -m uiautomator2 init
要对手机进行调试,最重要的问题就是如何定位元素,推荐使用工具 weditor 来解决这个问题,该工具只需要执行命令“pip install weditor”即可安装,然后在 CMD 窗口中输入“python -m weditor”会自动在浏览器中打开一个调试页面,如下图所示:

“Connect”按钮用于连接设置,左侧输入框可以输入设备号或者 IP 地址(即支持 USB 连接或者通过 WiFi 连接),“Dump Hierarchy”用于进行同步,当你操作手机后,页面可能未同步,就可以点击该按钮进行同步。当然了,也可以在该页面上直接操作手机,例如点击元素、输入内容等,使用还是很方便的。
四、命令简介
1.连接设备
支持 USB 或者 WiFi 与设备进行连接,支持同时连接单个或多个设备。
1 import uiautomator2 as u2
2
3
4 # 一个设备时可简写,多个设备时添加设置号参数
5 d = u2.connect(
2.应用操作
1 import uiautomator2 as u2
2
3
4 d = u2.connect()
5
6 # 启动指定应用
7 d.app_start("com.example.app")
8 # 启动指定应用,启动前停止此应用
9 d.app_start("com.example.app", stop=True)
10 # 停止指定应用
11 d.app_stop("com.example.app")
12 # 当前运行中的所有应用
13 d.app_list_running()
14 # 停止所有应用
15 d.app_stop_all()
16 # 安装应用
17 d.app_install(data="./example.apk")
3.触控操作
1 import uiautomator2 as u2
2
3
4 d = u2.connect()
5
6 # 点击
7 d.click(1, 1)
8 # 双击
9 d.double_click(1, 1)
10 # 双击,指定间隔时间
11 d.double_click(1, 1, 0.1)
12 # 长按
13 d.long_click(1, 1)
14 # 长按,指定停留时间
15 d.long_click(1, 1, 5)
16 # 通过元素的文本信息进行点击,会点击文本所在元素的中心位置
17 d(text="Settings").click()
18
19 d.swipe(10, 10, 20, 20)
20 # 右滑
21 d.swipe_ext("right")
22 # 右滑,滑动距离为屏幕宽度的90%
23 d.swipe_ext("right", scale=0.9)
24 # 拖拽
25 d.drag(1, 1, 10, 10)
26
27 # 模拟按下
28 d.touch.down(10, 10)
29 # 模拟移动
30 d.touch.move(15, 15)
31 # 模拟抬起
32 d.touch.up()
uiautomator2 入门教程的更多相关文章
- wepack+sass+vue 入门教程(三)
十一.安装sass文件转换为css需要的相关依赖包 npm install --save-dev sass-loader style-loader css-loader loader的作用是辅助web ...
- wepack+sass+vue 入门教程(二)
六.新建webpack配置文件 webpack.config.js 文件整体框架内容如下,后续会详细说明每个配置项的配置 webpack.config.js直接放在项目demo目录下 module.e ...
- wepack+sass+vue 入门教程(一)
一.安装node.js node.js是基础,必须先安装.而且最新版的node.js,已经集成了npm. 下载地址 node安装,一路按默认即可. 二.全局安装webpack npm install ...
- Content Security Policy 入门教程
阮一峰文章:Content Security Policy 入门教程
- gulp详细入门教程
本文链接:http://www.ydcss.com/archives/18 gulp详细入门教程 简介: gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器:她不仅能对网站资源进行优 ...
- UE4新手引导入门教程
请大家去这个地址下载:file:///D:/UE4%20Doc/虚幻4新手引导入门教程.pdf
- ABP(现代ASP.NET样板开发框架)系列之2、ABP入门教程
点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之2.ABP入门教程 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)” ...
- webpack入门教程之初识loader(二)
上一节我们学习了webpack的安装和编译,这一节我们来一起学习webpack的加载器和配置文件. 要想让网页看起来绚丽多彩,那么css就是必不可少的一份子.如果想要在应用中增加一个css文件,那么w ...
- 转载:TypeScript 简介与《TypeScript 中文入门教程》
简介 TypeScript是一种由微软开发的自由和开源的编程语言.它是JavaScript的一个超集,而且本质上向这个语言添加了可选的静态类型和基于类的面向对象编程.安德斯·海尔斯伯格,C#的首席架构 ...
随机推荐
- 基于TensorRT 3的自动驾驶快速INT8推理
基于TensorRT 3的自动驾驶快速INT8推理 Fast INT8 Inference for Autonomous Vehicles with TensorRT 3 自主驾驶需要安全性,需要一种 ...
- ARM Cortex-M嵌入式C基础编程(下)
ARM Cortex-M嵌入式C基础编程(下) ARM Cortex-M Embedded C Fundamentals/Tutorial -Aviral Mittal Load Region Vs ...
- VB 老旧版本维护系列---迷之集合- dataTable
迷之集合- dataTable '定义一个datatable,并声明一个空对象 Dim data As DataTable = New DataTable() '获取行数 Dim rows As In ...
- 牛客网sql实战参考答案(mysql版):1-15
1.查找最晚入职员工的所有信息,为了减轻入门难度,目前所有的数据里员工入职的日期都不是同一天(sqlite里面的注释为--,mysql为comment) CREATE TABLE `employees ...
- Docker与k8s的恩怨情仇(一)—成为PaaS前浪的Cloud Foundry
转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 大家在工作中或许或多或少都接触过Docker,那你知道Docker以及容器化背后的原理到底是什么吗? 容器化 ...
- c语言经典算法---计算Fibonacci数列
算法是一个程序和软件的灵魂,作为一名优秀的程序员,只有对一些基础的算法有着全面的掌握,才会在设计程序和编写代码的过程中显得得心应手.下面我就分享一个C语言中比较基础却极为重要的一个算法----计算Fi ...
- 【NX二次开发】Block UI 组
设置组及组内成员不可见 this->group->GetProperties()->SetLogical("Show", false); 设置组及组内成员不可操作 ...
- markdown写ppt (史上最全)
文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 ...
- 你,确定了解Java的String字符串?
本文将描述JDK6中String.intern()是如何实现的,以及在JDK7和JDK8中对字符串池化技术做了哪些改变. String池化介绍 String池化就是把一些值相同,但是标识符不同的字符串 ...
- VRRP简介以及配置案例
一.背景 二.VRRP 概念介绍 三.实验操作 一.背景 局域网中的用户终端通常采用配置一个默认网关的形式访问外部网络,如果此时默认网关设备发生故障,将中断所有用户终端的网络访问,这很可能会给用户带来 ...