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入门学习系列规划[持续更新] 前言 首先在此多谢博友们在前几篇博文当中给与的支持和鼓励,以及在回复中提出的问题.意见和看法. 在此先声明一下,之前在下小菜所有的随笔文章中, ...
随机推荐
- CLR回收非托管资源
一.非托管资源 在<垃圾回收算法之引用计数算法>.<垃圾回收算法之引用跟踪算法>和<垃圾回收算法之引用跟踪算法>这3篇文章中,我们介绍了垃圾回收的一些基本概念和原理 ...
- 【转载】VS中的路径宏 vc++中OutDir、ProjectDir、SolutionDir各种路径
原文:http://www.cnblogs.com/lidabo/archive/2012/05/29/2524170.html 说明 $(RemoteMachine) 设置为“调试”属性页上“远程计 ...
- NumCPU()在slice中的使用
package main import ( "fmt" "runtime" ) var slice []int func main() { array := m ...
- 11.10 Daily Scrum
工作进度有点拖后,之后几天要加快步伐了. Today's tasks Next week 丁辛 餐厅列表UI设计 餐厅列表事件处理 李承晗 实现指 ...
- Linux内核分析作业 NO.1
通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的 于佳心 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/cour ...
- Linux内核实验作业七
实验作业:Linux内核如何装载和启动一个可执行程序 20135313吴子怡.北京电子科技学院 [第一部分]理解编译链接的过程和ELF可执行文件格式 1.编译链接的过程 2.ELF可执行文件格式 一个 ...
- [福大软工] Z班 个人项目自动测试结果
个人项目第二次测试结果[9.16] 注:下表中的成绩满分为25分,正确性测试 共5个,每个3分.效率测试共 2个,每个5分. 根据数据统计分档如下, // 前为档级,后为分数. 参数为50000 0- ...
- 表格-table 样式
.table: 表格基本样式 .table-dark:表格显示为黑色 .thead-light: 表头显示颜色跟亮 .thead-dark:表头显示为黑色 .table-striped:表格以条纹形式 ...
- [转帖]LNMP组件安装
https://lnmp.org/install.html 系统需求: CentOS/RHEL/Fedora/Debian/Ubuntu/Raspbian/Deepin/Aliyun/Amazon/M ...
- POWERSHELL 计划任务的创建,收集DC中失败的登录信息并邮件通知
(注:本文参考以下前辈文章修改而来,源文章连接:http://itadmindev.blogspot.hk/2011/07/powershell-ad-dc-failed-logins-report. ...