python uiautomator,比 appium 更简单的 app 测试工具
1,场景
在 app 测试的蛮荒时代,如果要进行 app 自动化测试非常麻烦。张大胖如果想做安卓自动化测试,首先必须要学 Java。因为安卓自动化测试都绕不开 google 自己研发的自动化测试框架,于是张大胖哼哧哼哧开始学 java,开始上手 UiAutomator 做自动化测试。2 周过去了,张大胖开始向王哥抱怨:

王哥一看他的代码,demo 都还没跑起来,再让他玩下去,公司都倒闭了。于是王哥给张大胖推荐了一个工具叫 appium, 这个工具强就强在跨平台,跨语言,还开源。张大胖之前学过半个月 python, 搞这个问题应该不大。
过了一天,张大胖果然兴冲冲的跑过来,高兴的说流程跑通了。appium 这玩意真不错,就是有一个不好的地方,通过代码查找 app 上的元素经常要嵌套 java 代码,而且要带上一长串的设备信息。
王哥又给张大胖推荐了一个工具,这个工具叫 python uiautomator。它可以在手机上装一个 http rpc 服务,你可以通过其他语言作为客户端去远程调用 uiautomator 的接口。这个库解决了原始 uiautomator 的 2 个问题:
- 必须要会 Java 代码
- 脚本要传到设备上才能运行
他的原理图类似于这样:

而相比 appium, 这个工具封装的 api 更加简洁,使用起来更加高效。张大胖马上回去研究了一下,15 分钟就把流程跑通了,当天就请王哥搓了顿小龙虾。有了这么好用的工具,张大胖赶紧回来写笔记。
2,安装
安装不要太简单,一行命令搞定。相比 appium 要装的各种依赖,简直不要太幸福。安装好以后,连接手机,输入 adb devices 指令,确认手机连接成功,轻松完成。
# 官方下载安装
pip install automator2
如果官方站点无法访问,可以访问豆瓣源下载:
pip install -i https://pypi.doubanio.com/si
mple/ uiautomator2
3,快速使用
手工怎么测,这个工具的流程完全一样,省心省力,一行多余的代码都没有。而使用 appium 的时候,张大胖为了写长长的 desired capabilities 不知消耗了多少脑细胞。
1, 连接设备;
2, 启动app;
3, 元素定位;
4,元素操作;
5,关闭 app。
import uiautomator2
# 连接手机
d = uiautomator2.connect()
# 启动app
d.app_start("com.lemon.lemonban")
# 定位元素
my = d(resourceId='com.lemon.lemonban:id/navigation_my')
# 操作元素
my.click()
# 关闭 app
d.app_stop("com.lemon.lemonban")
相同版本的 appium 代码,对比了解一下:
from appium.webdriver import Remote
caps = {
"platformName": "Android",
"platformVersion": "5.1",
"deviceName": "Android Emulator",
# "app": r"D:\Program Files\adt-bundle-windows-x86_64-20140702\sdk\build-tools\28.0.3\Future-release-2018.apk.apk",
"appActivity": "com.lemon.lemonban.activity.addition.WelcomeActivity",
"appPackage": "com.lemon.lemonbano",
"noReset": "False",
}
# 连接手机
driver = Remote(desired_capabilities=caps)
# 定位
my = driver.find_element_by_id('com.lemon.lemonban:id/navigation_my')
my.click()
# 退出
driver.quit()
做一个简单的对比, python 版的 uiautomator 具有如下优势:
- 连接手机的时候可以省去大段信息
- 元素定位直接采用更加优雅的
__call__()机制,不需要调函数名称,而是通过关键字参数的形式直接完成元素定位。 - 将 app 作为一个管理单元(session),会有更大的灵活性。
- 这里还不包括更加灵活的等待和 watcher 机制。
4,使用 weditor 工具查看元素定位
为了更加方便的进行元素定位,可以使用 weditor 辅助获取元素定位表达式,如果不想用,也可以用 uiautomatorviewer 等原生安卓辅助工具。
安装 weditor, 你懂的 pip install weditor。 安装完成后命令行输入 weditor 一键启动,直接弹出图形化界面。

weditor 的优势在于:
- 可以同时管理多个设备;
- 直接在调试界面操作手机,不需要另一只手去动手机;
- 自动生成 uiautotor 代码。
5,总结
本篇介绍了非常简单的 uiautomator 使用,总结一下它的优势:
- 不用会 java, 也可以体验原生测试的“快”感;
- api 封装异常简单,符合 python 的优雅性格;
- 上手迅速,略懂 python,就可以玩转。
不聊了,这么好用的工具,我要赶紧回去吃透它。
python uiautomator,比 appium 更简单的 app 测试工具的更多相关文章
- App测试工具大全,收藏这篇就够了
随着移动互联网的高速发展,App 应用非常火,测试工程师也会接触到各种 app 应用.除了人工测试之外,也可以通过一些测试工具来提高我们的测试效率,以下对于我用过或听过的 app 测试工具做了一个统一 ...
- Android App 测试工具及知识大集合
简介: 作者从事测试将近11年,有8年的团队管理经验,经历了上市公司,外包,日企,股份制公司的企业文化洗礼,擅长测试团队的组建,流程建立,改造,质量体系建建设,有三次经历在不同企业文化从"0 ...
- gulp:更简单的自动化构建工具
目前最流行的两种使用JavaScript开发的构建工具是Grunt和Gulp.为什么使用gulp?因为Gulp更简单.Grunt任务拥有大量的配置,会引用大量你实际上并不需要的对象属性,但是Gulp里 ...
- APP测试工具与技术
AndroidDevTools Android Dev Tools官网地址:www.androiddevtools.cn 收集整理Android开发所需的Android SDK.开发中用到的工具.An ...
- 几个移动App测试工具
介绍几款移动App测试的工具: 腾讯测试:http://bugly.qq.com/优测:http://utest.qq.com/fir.im测试:http://bughd.com/ 大致介绍如下: b ...
- App测试工具
1.App性能测试与安全测试工具 性能测试工具:Itest(众测平台) 安全测试:Utest
- 简单的并发测试工具 ab.exe ab.zip可下载 -摘自网络
ab.exe是一个性能检测工具,是apache server中的一个小组件,使用简单,方便 下载地址:http://files.cnblogs.com/files/gossip/ab.zip ...
- App测试工具选择
一.功能测试自动化 a) 轻量接口自动化测试: jmeter, b) APP UI层面的自动化 android:UI Automator Viewer,Android Junit,Instrument ...
- 测评:华为最新移动应用/APP测试工具MobileTest
一.目前移动应用/App的测试痛点及可选方案 移动互联网市场进入下半场,同质化竞争激烈,平均获客成本增加.屏幕不适配.闪退.无响应.UI异常等兼容性问题严重影响用户体验,影响用户转化率和用户粘性.如何 ...
随机推荐
- Kotlin基本语法和使用技巧
基本语法 val value: String? = "HelloWorld" val name: String = getName() ?: return //如果是null就re ...
- 踩坑踩坑之Flask+ uWSGI + Tensorflow的Web服务部署
一.简介 作为算法开发人员,在算法模块完成后,拟部署Web服务以对外提供服务,从而将算法模型落地应用.本文针对首次基于Flask + uWSGI + Tensorflow + Nginx部署Web服务 ...
- Spring Boot 2.X(三):使用 Spring MVC + MyBatis + Thymeleaf 开发 web 应用
前言 Spring MVC 是构建在 Servlet API 上的原生框架,并从一开始就包含在 Spring 框架中.本文主要通过简述 Spring MVC 的架构及分析,并用 Spring Boot ...
- canvas实现平面迁徙图
前言 最近在做自己维护的一个可视化工具的时候,在添加基于echart的雷达图的时候,按照echart官网案例写完发现在自己项目中无法正常运行,排查了一番发现是我项目中echart的版本太低.找到问题原 ...
- SpringCloud教程一:eureka注册中心(Finchley版)
一.spring cloud简介 本阶段学习教程Spring Boot版本2.0.3.RELEASE,Spring Cloud版本为Finchley.RELEASE. Finchley版本的官方文档如 ...
- Linux C++轻量级开发指南
作为一名产品开发,一套顺手的集成开发环境必不可少.大多数时候,开发经理将精力投入在产品需求分析上而忽视了研发质量甚至连基本的集成开发环境都没有统一.当然,如果你们的项目仅仅需要部署在单一的环境中或没有 ...
- Vue-cli中的跳转
Vue-cli中的跳转 一.页面中跳转指定网页 写法一: <router-link :to="{name:'home'}"> 这里的name是在VUE路由里面的 写法二 ...
- RF分层封装
1.如何管理用例? (1).在ride工具中分层管理用例(案例层.元素层.流程层),提高效率 (2).偶尔运行下,保证脚本能正常跑动 2.用例分层操作 案例层:需要加载流程层.txt资源和Seleni ...
- comparator接口实现时,只需要实现 int compare(T o1, T o2)方法?
从Comparator接口的源码,可以看到Comparator接口中的方法有三类: 1 普通接口方法 2 default方法 3 static方法 其中default方法和static方法 是java ...
- CSAPP: 位操作实现基本运算
目录 实验要求 实现代码 1.pow2plus1 2.pow2plus4 3.bitXor 4.tmin 5.isTmax 6.allOddBits 7.negate 8.isAsciiDigit 9 ...