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#的首席架构 ...
随机推荐
- SpringCloud Alibaba实战(4:基本开发框架搭建)
在上一节,我们已经完成了项目的整体技术架构设计和具体的数据库设计,接下来,我们搭建整体的开发框架. 开发工具选用Idea. 开发工具只是为了提高效率,如果不习惯Idea的话,STS使用起来也是OK的. ...
- zookeeper命令行练习,熟练节点权限, 数组越界异常解决方案
https://www.cnblogs.com/qlqwjy/p/10517231.html zookeeper 创建持久有序节点时候报错,我的版本号是3.4.12, 亲测有效 https://blo ...
- P1045 [NOIP2003 普及组] 麦森数
题目描述 形如2^P−1的素数称为麦森数,这时P一定也是个素数.但反过来不一定,即如果P是个素数,2^P−1不一定也是素数. 到1998年底,人们已找到了37个麦森数.最大的一个是P=3021377, ...
- Bind DNS服务——转发与区域记录更新
Linux基础服务--Bind DNS服务 Part4 转发与区域记录更新 一个DNS服务器不可能保存所有的区域记录,所以我们一般都会将其他的区域纪录转发到其他的服务器上进行解析. Bind9提供了全 ...
- 【NX二次开发】Block UI对话框-代码生成部分
常规: 语言:生成的代码语言 生成附注:是否生成注释代码 生成特定与块的代码: 输入点: 回调:对话框通过回调函数调用,例如通过另一个对话框的按钮调用本对话框 菜单:对话框通过菜单调用 用户出口:对话 ...
- Redis 性能问题分析
在一些网络服务的系统中,Redis 的性能,可能是比 MySQL 等硬盘数据库的性能更重要的课题.比如微博,把热点微博[1],最新的用户关系,都存储在 Redis 中,大量的查询击中 Redis,而不 ...
- Optim High Performance Unload [HPU]
目录 一.简介 二.安装 三.基本配置 四.卸数 4.1. 命令行导出 4.2. 控制文件 4.2.1. 从表空间容器卸数 4.2.2. 从备份镜像中卸数 4.2.3. 控制文件语法参考 4.3. 存 ...
- 题解 P6622 [省选联考 2020 A/B 卷] 信号传递
洛谷 P6622 [省选联考 2020 A/B 卷] 信号传递 题解 某次模拟赛的T2,考场上懒得想正解 (其实是不会QAQ), 打了个暴力就骗了\(30pts\) 就火速溜了,参考了一下某位强者的题 ...
- JAVA实现按列表中元素的时间字段排序
JAVA代码实现按列表中元素的时间字段排序 导语: 工作中遇到一个问题,调用第三方接口返回的数据没有按时间倒序排列,测试说要加,然后在网上找到一个解决办法,这里记录一下 需求: 如下图列表,按生日进行 ...
- Centos7.5使用SSH密钥登录
12.1.查看操作系统版本 # cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core) 12.2.在服务器端创建密钥 # ssh-ke ...