转载自:http://blog.csdn.net/huiguixian/article/details/22398193

Android测试工具中,Monkey Runner只要简单几个指令即可,但他的局限性在于都是基于像素位置操作,不具备移植性。

而采用uiautomator编写的自动化测试工具则可以实现基于UiSelector选择直接操作uiObject来编写基于属性操作具备移植性的测试。

注:

android官方给出的版本条件如下,若低于这些版本请先下载新版本

Android SDK Tools, Revision 21 or higher
Android SDK Platform, API 16 or higher

1. 首先我们先了解一下属性操作,并用uiautomatorviewer来分析一下应用UI组件。

工具路径:<android-sdk>/tools/.

左边为当前截屏,移动到上面有个红色的悬浮框表示当前选中节点,当前选中的会在右上角蓝色高亮,右下角显示即是此view的属性。

至于这些有什么作用,稍后我们再看(请注意content-desc属性,我们稍后会用)。

2. 打开eclipse,新建立一个Java Project,我这里建立的是MessageTestCase

2.1 之后右键项目Property->Java Build Path->Libraries->Add Library->JUnit->JUnit3->Finish

2.2 回到Property界面后还是选择Libraries->Add External JARs->选择Android SDK路径\platforms\android-**->选中Android.java和uiautomator.jar

2.3 之后点击ok,关闭Property窗口

3. 之后我们编辑code完成操作,主要操作是进入短信界面,编辑一条hello world

//所有UI自动测试都要继承UiAutomatorTestCase
public class MessageTestCase extends UiAutomatorTestCase {
public void testDemo() throws UiObjectNotFoundException{
//获取UiDevice对象
UiDevice device = getUiDevice(); //点击home键操作
device.pressHome(); //如截图中提到的,我们使用content-desc属性Apps选择所有应用列表
UiObject appsTab = new UiObject(new UiSelector().description("Apps"));
appsTab.click(); //因为短信界面在第二个列表页面,所以我们可以先滑动一下
//通过scrollable属性来选定滑动view
UiScrollable appViews = new UiScrollable(new UiSelector().scrollable(true));
appViews.setAsHorizontalList();
appViews.scrollForward(); //通过类名和Text找到短信应用图标,Text获取通过uiautomatorviewer
UiObject messageApp = appViews.getChildByText(new UiSelector().className(android.widget.TextView.class.getName()), "Messaging");
//点击并等待打开短信应用
messageApp.clickAndWaitForNewWindow(); //选择新建短信
UiObject newMessage = new UiObject(new UiSelector().description("New message"));
newMessage.click(); //选择编辑信息
UiObject editMessage = new UiObject(new UiSelector().text("Type text message"));
editMessage.click();
editMessage.setText("hello world!");
}
}

4. 然后编译和发布uiautomator测试

4.1 进入sdk tools目录使用如下命令:

android.bat create uitest-project -n MessageTestCase -t 1 -p "C:\Documents and Settings\***\workspace\MessageTestCase"
其中MessageTestCase是工程名,第二个路径是工程所在路径

然后会在工程所在路径生成一个build.xml文件

4.2 使用如下命令设置Android Home

set ANDROID_HOME=<path_to_your_sdk>

4.3 然后需要下载ant,并设置ant为环境变量(也可以不设置,不过使用这个命令前加上路径)

首先切换路径到工程所在目录,然后使用如下命令编译

apache-ant-1.9.3\bin\ant build
之后在工程的bin目录下回生成.jar文件

4.4 push jar文件到一个目录,如

adb push <path_to_output_jar> /data/local/tmp

4.5 运行测试

adb shell uiautomator runtest MessageTestCase.jar -c com.wjh.test.MessageTestCase

Android uiautomator实例使用的更多相关文章

  1. Android UiAutomator 自动化测试编译运行---新手2

    1.首先打开eclipse创建java项目

  2. Android UiAutomator

    UiAutomator是一个做UI测试的自动化框架.<Android自动化测试框架>中已有详细介绍,这里就不再累赘了. 一.首先了解自动化测试流程 自动化需求分析 测试用例设计 自动化框架 ...

  3. Android HTTP实例 使用GET方法和POST方法发送请求

    Android HTTP实例 使用GET方法和POST方法发送请求 Web程序:使用GET和POST方法发送请求 首先利用MyEclispe+Tomcat写好一个Web程序,实现的功能就是提交用户信息 ...

  4. Android HTTP实例 发送请求和接收响应

    Android HTTP实例 发送请求和接收响应 Android Http连接 实例:发送请求和接收响应 添加权限 首先要在manifest中加上访问网络的权限: <manifest ... & ...

  5. Android图像处理实例教程

    Android图像处理实例教程 原始出处 http://vaero.blog.51cto.com/4350852/856750

  6. Android uiautomator gradle build system

    This will guide you through the steps to write your first uiautomator test using gradle as it build ...

  7. 一个简单的Android小实例

    原文:一个简单的Android小实例 一.配置环境 1.下载intellij idea15 2.安装Android SDK,通过Android SDK管理器安装或卸载Android平台   3.安装J ...

  8. Appium python自动化测试系列之Android UIAutomator终极定位(七)

    android uiautomator text定位 可能有人不知道为什么说android uiautomator是终极定位,而且android uiautomator和appium有什么关系呢?如果 ...

  9. Android UiAutomator - CTS Frame

    使用UiAutomator进行UI自动化测试后,生成的测试结果并不是很美观.为了生成一份好看的测试结果(报告),本文将使用CTS框架,当然也可以自己编写一份测试报告框架(如:生成html,excel报 ...

随机推荐

  1. What is the innovator’s solution——什么才是创新的解决方案1

    最近学习MOT(management of Technology),研读了Christensen的<创新者的窘境>和<创新者的解答>,以下简称创新者系列.总觉得需要写点儿什么. ...

  2. java中 正则表达式的使用

    推荐使用第一种 第一种: //对接收的文件名的合法性进行验证 String fileName="127.0.0.1_01_20140428165022174.jpg"; Strin ...

  3. QString和char字符数组之间的转换(QTextCodec.toUnicode方法,特别注意\0的问题)

    How can I convert a QString to char* and vice versa ?(trolltech) Answer:In order to convert a QStrin ...

  4. 编码识别工具:hash-identifier

    hash-identifier的使用: 当不知道编码是什么类型的时候,可以通过kali系统中的hash工具判别,如下图所示, 在HASH后面输入要判别的编码内容,在后面的Possible Hashs中 ...

  5. CSS+DIV 布局三种定位方式

    一.普通流 普通流中元素框的位置由元素在HTML中的位置决定.块级元素从上到下依次排列,框之间的垂直距离由框的垂直margin计算得到.行内元素在一行中水平布置. 二.定位 1.相对定位 被看作普通流 ...

  6. 拔高你的Java代码质量吧:推荐使用枚举定义常量(转)

    提高你的Java代码质量吧:推荐使用枚举定义常量 一.分析 常量的声明是每一个项目中不可或缺的,在Java1.5之前,我们只有两种方式的声明:类常量和接口常量.不过,在1.5版之后有了改进,即新增了一 ...

  7. 研究系统IO和glib IO的关系

    PS:这里的缓冲与非缓冲的区别是相对于用户进程,下文的“非缓冲文件系统”指用户的程序没有缓冲区,不要误解为系统没有缓冲区. 1.缓冲文件系统缓 冲文件系统的特点是:在内存开辟一个“缓冲区”,为程序中的 ...

  8. JS判断是否出现滚动条

    http://www.cnblogs.com/yazdao/archive/2010/12/06/1897742.html 该博文是想用JS检测浏览器是否出滚动条. 这边想到一个比较取巧的方法, 假如 ...

  9. SequenceSum

    SequenceSum Sum of 'n' Numbers sum_of_n (or SequenceSum.sumOfN in Java, SequenceSum.SumOfN in C#) ta ...

  10. hibernate实体的几种状态:

    hibernate实体的几种状态: 实体的生命周期中,实体主要经过瞬时(Transient),托管(Attatched或Managed),游离(Detached)和销毁(Removed)四个状态. 瞬 ...