一、前言

  在 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 入门教程的更多相关文章

  1. wepack+sass+vue 入门教程(三)

    十一.安装sass文件转换为css需要的相关依赖包 npm install --save-dev sass-loader style-loader css-loader loader的作用是辅助web ...

  2. wepack+sass+vue 入门教程(二)

    六.新建webpack配置文件 webpack.config.js 文件整体框架内容如下,后续会详细说明每个配置项的配置 webpack.config.js直接放在项目demo目录下 module.e ...

  3. wepack+sass+vue 入门教程(一)

    一.安装node.js node.js是基础,必须先安装.而且最新版的node.js,已经集成了npm. 下载地址 node安装,一路按默认即可. 二.全局安装webpack npm install ...

  4. Content Security Policy 入门教程

    阮一峰文章:Content Security Policy 入门教程

  5. gulp详细入门教程

    本文链接:http://www.ydcss.com/archives/18 gulp详细入门教程 简介: gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器:她不仅能对网站资源进行优 ...

  6. UE4新手引导入门教程

    请大家去这个地址下载:file:///D:/UE4%20Doc/虚幻4新手引导入门教程.pdf

  7. ABP(现代ASP.NET样板开发框架)系列之2、ABP入门教程

    点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之2.ABP入门教程 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)” ...

  8. webpack入门教程之初识loader(二)

    上一节我们学习了webpack的安装和编译,这一节我们来一起学习webpack的加载器和配置文件. 要想让网页看起来绚丽多彩,那么css就是必不可少的一份子.如果想要在应用中增加一个css文件,那么w ...

  9. 转载:TypeScript 简介与《TypeScript 中文入门教程》

    简介 TypeScript是一种由微软开发的自由和开源的编程语言.它是JavaScript的一个超集,而且本质上向这个语言添加了可选的静态类型和基于类的面向对象编程.安德斯·海尔斯伯格,C#的首席架构 ...

随机推荐

  1. Single Shot Multibox Detection (SSD)实战(下)

    Single Shot Multibox Detection (SSD)实战(下) 2. Training 将逐步解释如何训练SSD模型进行目标检测. 2.1. Data Reading and In ...

  2. AJAX第二天笔记

    AJAX day1 jquery中的ajax 拦截请求: $.ajaxPrefilter()  jquery方法请求参数的本质: 无论我们填写的何种形式的参数,都会被jQuery转换成查询字符串形式传 ...

  3. dataguard日志损坏处理

    ===== 问题 ===== 日志损坏无法应用日志(开启MRP应用系统会因无法应用日志而关闭) Completed: ALTER DATABASE RECOVER MANAGED STANDBY DA ...

  4. 升级 macOS Big Sur 差点丢了我多年的珍藏文件(夹)!!!

    原来升级 macOS Big Sur 过程中会转移根目录下的个人文件(夹). 春节期间升级了一下 macOS ,升级之前就比较担心丢数据,然而怕什么来什么.升级之后发现根目录下的个人文件(夹)都不见了 ...

  5. 二、特殊DNS解析

    一.DNS轮询 1.为站点 www.tedu.cn 提供DNS轮询解析,三台Web服务器节点的IP地址分别为: 192.168.4.10.192.168.4.20.192.168,4.30 步骤: 虚 ...

  6. 消息队列面试题、RabbitMQ面试题、Kafka面试题、RocketMQ面试题 (史上最全、持续更新、吐血推荐)

    文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 ...

  7. redHat6设置ip地址

    产生需求的原因: 最近新安装了redhat6,可是在相互ping的过程中发现redhat6的并没有配置静态的ip地址,于是我尝试使用windows的方式去配置,可效果并不如意,于是如何在redhat6 ...

  8. 使用 vite 构建一个表情选择插件

    初始化 Vite 基于原生 ES 模块提供了丰富的内建功能,开箱即用.同时,插件足够简单,它不需要任何运行时依赖,只需要安装 vite (用于开发与构建)和 sass (用于开发环境编译 .scss ...

  9. 性能工具之Jmeter压测Thrift RPC服务

    概述 Thrift是一个可互操作和可伸缩服务的框架,用来进行可扩展且跨语言的服务的开发.它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ruby, ...

  10. C#调用JAVA(一)制作jar包

    1 //AndroidJavaClass类可以理解为某一个类 2 //AndroidJavaObject类可以理解为某一个类中的一个对象 打开AS,创建一个空项目 输入项目名,包名,本地路径以及语言之 ...