一、前言

  在 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. TorchScript神经网络集成技术

    TorchScript神经网络集成技术 create_torchscript_neuropod 将TorchScript模型打包为neuropod包. create_torchscript_neuro ...

  2. Net Core 5.0 部署IIS错误-500.31-Failed to load ASP.NET Core runtime

    Windows Server 2008 R2不支持.net core 3.0版本及以后更新的各个版本. 面对如上图提示,第一想到的就是服务器安装的SDK或者hosting版本有问题,第一时间检查了安装 ...

  3. 构造无限级树的框架套路,附上python/golang/php/js实现

    目录 前言 需求 数据 结果 框架 递归框架 迭代框架 递归框架实现 python golang php js 迭代框架实现 python golang php js 前言 框架思维非常重要,和语言无 ...

  4. swagger 注解使用

    @Api() 用于类:表示标识这个类是swagger的资源 tags–表示说明 value–也是说明,可以使用tags替代 但是tags如果有多个值,会生成多个list @ApiOperation() ...

  5. 692. 前K个高频单词

    2021-05-20 LeetCode每日一题 链接:https://leetcode-cn.com/problems/top-k-frequent-words/ 标签:堆.字典序.哈希表 题目 给一 ...

  6. 听说你还不知道Java代码是怎么运行的?

    作为一名Java程序员,我们需要知道Java代码是怎么运行的.最近复习了深入理解Java虚拟机这本书,做了一下笔记,希望对大家有帮助,如果有不正确的地方,欢迎提出,感激不尽. java 代码运行主要流 ...

  7. MySQL 全文索引实现一个简单版搜索引擎

    前言 只有Innodb和myisam存储引擎能用全文索引(innodb支持全文索引是从mysql5.6开始的) char.varchar.text类型字段能创建全文索引(fulltext index ...

  8. 无规矩不成方圆,聊一聊 Spring Boot 中 RESTful 接口设计规范

    在设计接口时,有很多因素要考虑,如接口的业务定位,接口的安全性,接口的可扩展性.接口的稳定性.接口的跨域性.接口的协议规则.接口的路径规则.接口单一原则.接口过滤和接口组合等诸多因素,本篇文章将简要分 ...

  9. [apue] linux 文件访问权限那些事儿

    前言 说到 linux 上的文件权限,其实我们在说两个实体,一是文件,二是进程.一个进程能不能访问一个文件,其实由三部分内容决定: 文件的所有者.所在的组: 文件对所有者.组用户.其它用户设置的权限访 ...

  10. 【二分 贪心】覆盖问题 BZOJ1052 HAOI2007

    覆盖问题 bzoj1052 题目来源:HAOI 2007 题目描述 某人在山上种了N棵小树苗.冬天来了,温度急速下降,小树苗脆弱得不堪一击,于是树主人想用一些塑料薄膜把这些小树遮盖起来,经过一番长久的 ...