UiAutomator2.0入门
总是听说UiAutomator这个框架,但从来没有使用过。找了篇入门,实践一下。实践之后感觉,uiautomator写测试代码,还是有点费劲。接口名比较多,比较长。网易的atx里使用的uiautomator相当于原生uiautomator的python wrapper。接口就显得简洁很多。
1. 新建项目
使用推荐的android studio创建android空工程。File->New -> New project,在application name处填上工程名,点击 Next, 在target android devices页面,选择 支持的phone and tablet的最小sdk。这个可根据自己设备上的android版本选择。点出next,先把add no activity,完成了一个空工程的新建。
2. 配置
在Module:app里的build.gradle,新增绿色的内容。
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.0', {
exclude group: 'com.android.support', module: 'support-annotations'
}) compile 'com.android.support:appcompat-v7:24.+'
testCompile 'junit:junit:4.12'
androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.1' }
我使用的gradle版本为2.14.1,相应的android plugin version是2.1.3。之前配置不正确,总是提示gradle sync不成功,然后测试代码就不能正常运行。另外,如果dependencies里的插件配置有重复,没有下载到本地的,还需要处理好。将项目设置为Android Tests, 可看到目录结构为下图所示。与test相关的文件背景变为绿色。
3. case代码
case代码写在androidTest目录下,示例内容如下:
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
private UiDevice mUIDevice = null;
private Context mContext = null;
String APP = "XXX"; @Before
public void setUp() throws RemoteException{
mUIDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()); //获得device对象
mContext = InstrumentationRegistry.getContext(); if(!mUIDevice.isScreenOn()){ //唤醒屏幕
mUIDevice.wakeUp();
}
mUIDevice.pressHome(); //按home键
} @Test
public void test1(){
Intent myIntent = mContext.getPackageManager().getLaunchIntentForPackage(APP); //启动app
mContext.startActivity(myIntent);
mUIDevice.waitForWindowUpdate(APP, * );
UiObject sender = mUIDevice.findObject(new UiSelector().text("Send")); //定位text内容为Send的控键
try {
sender.click(); //点击按键
}catch (Exception e){
e.printStackTrace();
}
assertTrue(true); //断言,随便乱写的,此处未起到断言作用
} }
连接设备,点击运行测试代码后,可看到运行的日志如下。
$ adb push D:\AndroidBook\m_adr_atom_hotel\HelloUI2\app\build\outputs\apk\app-debug.apk /data/local/tmp/com.example.mandasun.helloui2
$ adb shell pm install -r "/data/local/tmp/com.example.mandasun.helloui2"
pkg: /data/local/tmp/com.example.mandasun.helloui2
Success $ adb push D:\AndroidBook\m_adr_atom_hotel\HelloUI2\app\build\outputs\apk\app-debug-androidTest-unaligned.apk /data/local/tmp/com.example.mandasun.helloui2.test
$ adb shell pm install -r "/data/local/tmp/com.example.mandasun.helloui2.test"
pkg: /data/local/tmp/com.example.mandasun.helloui2.test
Success Running tests $ adb shell am instrument -w -r -e package com.example.mandasun.helloui2 -e debug false com.example.mandasun.helloui2.test/android.support.test.runner.AndroidJUnitRunner
Client not ready yet..
Started running tests
Tests ran to completion.
从日志中可以看到,uiautomator将测试代码打成的app-debug.apk包和app-debug-androidTest-unaligned.apk推到adr机上,然后安装。之后,使用命令运行了这两个 apk。
本文参考文档:uiautomator 2.0 demo与使用 uiautomator使用入门官方教程 android测试之UI自动化测试工具Uiautomator介绍
UiAutomator2.0入门的更多相关文章
- ASP.NET Core 1.0 入门——了解一个空项目
var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...
- ASP.NET Core 1.0 入门——Application Startup
var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...
- Omnet++ 4.0 入门实例教程
http://blog.sina.com.cn/s/blog_8a2bb17d01018npf.html 在网上找到的一个讲解omnet++的实例, 是4.0下面实现的. 我在4.2上试了试,可以用. ...
- 《VC++ 6简明教程》即VC++ 6.0入门精讲 学习进度及笔记
VC++6.0入门→精讲 2013.06.09,目前,每一章的“自测题”和“小结”三个板块还没有看(备注:第一章的“实验”已经看完). 2013.06.16 第三章的“实验”.“自测题”.“小结”和“ ...
- spring web flow 2.0入门(转)
Spring Web Flow 2.0 入门 一.Spring Web Flow 入门demo(一)简单页面跳转 附源码(转) 二.Spring Web Flow 入门demo(二)与业务结合 附源码 ...
- Json.Net6.0入门学习试水篇
原文:Json.Net6.0入门学习试水篇 前言 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.简单地说,JSON 可以将 JavaScript 对象中 ...
- SignalR 2.0 入门与提高
SignalR 2.0 入门与提高 SignalR 2.0 最近整理了SignalR2.0 部分知识点,原文翻译,由于自己是土鳖,翻译得不好的地方,欢迎指正!仅供各位初学者学习! 第一节. 入门ASP ...
- ASP.NET SignalR 2.0入门指南
ASP.NET SignalR 2.0入门指南 介绍SignalR ASP.NET SignalR 是一个为 ASP.NET 开发人员的库,简化了将实时 web 功能添加到应用程序的过程.实时Web功 ...
- Bootstrap3.0入门学习系列
Bootstrap3.0入门学习系列规划[持续更新] 前言 首先在此多谢博友们在前几篇博文当中给与的支持和鼓励,以及在回复中提出的问题.意见和看法. 在此先声明一下,之前在下小菜所有的随笔文章中, ...
随机推荐
- iterms 快捷键
标签 新建标签:command + t 关闭标签:command + w 切换标签:command + 数字 command + 左右方向键 切换全屏:command + enter 查找:comma ...
- Centos 定时任务发送smtp邮件
接着上一篇文章...... 1.首先创建一个sheel的脚本命令,我是在home文件夹下面创建的命令: touch a.sh 2.编辑a.sh脚本 vim a.sh ,键入键盘 i 键 准备插入 ...
- libgdx学习记录17——照相机Camera
照相机在libgdx中的地位举足轻重,贯穿于整个游戏开发过程的始终.一般我们都通过Stage封装而间接使用Camera,同时我们也可以单独使用Camera以完成背景的移动.元素的放大.旋转等操作. C ...
- 使用 Vue.js 2.0+ Vue-resource 模仿百度搜索框
使用 Vue.js 2.0 模仿百度搜索框 <!DOCTYPE html> <html> <head> <meta charset="utf-8&q ...
- web网站的并发量级别
web网站的并发量级别 评价一个网站的“大小”,处于视角的不同,有很多种衡量的方法,类似文章数,页面数之类的数据非常明显,也没有什么可以争议的.但对于并发来说,争议非常之多,这里就从一个技术的角度开始 ...
- Jq_浏览器兼容性及其浏览器版本
JQuery 中用 方法 jQuery.browser 来判断浏览器,返回值可以为: safari opera msie mozilla. 当然有时候我们还需要区分版本 这就要用到 jQuery.br ...
- MatCap冰冻效果Shader
MatCap方案 使用说明 制作合适的MatCap贴图 这张图决定冰像不像,网上找.Vray渲个球.ASE或者ShaderForge连,甚至直接手绘,总之只要一张长得像下面的图 注意MatCap图只有 ...
- 绕过用编码方式阻止XSS攻击的几个例子
阻止攻击的常用方法是:在将HTML返回给Web浏览器之前,对攻击者输入的HTML进行编码.HTML编码使用一些没有特定HTML意义的字符来代替那些标记字符(如尖括号).这些替代字符不会影响文本在web ...
- python爬虫-使用cookie登录
前言: 什么是cookie? Cookie,指某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密). 比如说有些网站需要登录后才能访问某个页面,在登录之前,你想 ...
- mysql学习(1)
开始我们基础的mysql学习 第一部分:补充知识 1. 昨天讲到的mysql初始化密码为空,今天又get到一种新的方法 Mysql安装后需要做的 Mysql安装成功后,默认的root用户密码为空,你可 ...