Uiautomator,顾名思义,是用于ui自动化测试的,主要是仿真单击,滑动,输入文本等操作,而不用人为地进行操作,如果把一组反复进行的操作用uiautomator实现,那么将大大提高效率。但是uiautomator使用范围非常有限,学习之后会知道,在uiautomator中,每一个ui控件都是UiObject的对象,并没有提供获得控件对应控件类(android.widget.*)的接口。所以在uiautomator中,一个Button和ImageView都是一样的——都是UiObject的对象。
Uiautomator很简单,只要熟悉几个类就能上手,类图如下
接下来是简单介绍uiautomator的使用步骤,具体可以看官网http://developer.android.com/tools/testing/testing_ui.html#prepare
1.创建一个java project,导入需要的库或jar包,如图
2.创建测试类,该类需继承UiAutomatorTestCase,应是如下的结构
public class MyTestCase extends UiAutomatorTestCase{
public void testXXX() throws UiObjectNotFoundException{
UiDevice.getInstance().pressHome();
}
public void testXXX() throws UiObjectNotFoundException{
}
}
每一个public的test开头方法就是一个case。需要注意的是运行时方法的调用顺序并不是代码中的位置顺序,而是根据方法名的ASCII码大小进行顺序调用的。
3.程序编写完之后,生成配置文件
sdk的tool目录下运行:
android create uitest-project -n projectName -t targetID -p projectPath
projectName为生成的目标jar包名称
我的运行参数如下,显示文件成功生成
-t后面是目标平台版本的id,可通过 android list targets查看,这里我的andorid.jar和uiautomator.jar是从android-17导入的,所以选择对应的2,如图
刷新一下,在项目的顶层目录下生成三个配置文件,如图
build.xml:编译可生成项目的jar文件
local.properties:保存了sdk路径
project.proerties:保存了目标平台版本
4.编译build.xml生成可以部署到手机设备上的项目jar文件
有两种方式:
将build.xml中的default改为”build“
(1)终端:cd到工程目录下执行ant -buildfile build.xml
(2)Eclipse:右击build.xml——>run as——>ant build
此时在工程的bin目录下就会生成了CalculatorTest.jar
启动模拟器: emulator @模拟器名称
5.将jar部署到手机并执行
adb push 目标jar文件的绝对路径 /data/local/tmp
adb shell uiautomator runtest CalculatorTest.jar -c CalculatorTestCase
jar和类都是可以指定多个,用空格分开,类名后面追加#MethodName 则只运行某一方法,否则执行所有方法
注意:类名必须是全称,即包括包名,这里是在默认包下
此时会输出如下信息
current:当前运行的测试顺序编号,故和方法名有关
class:当前运行方法所在类的类名
numtests:测试总数,一个public testXXX方法就是一个测试
test:当前测试的方法名
INSTRUMENTATION_STATUS_CODE:测试状态码,一般1是正在测试,0是测试通过,-1是错误
也可传参数
-e key value
最后介绍一下uiautomatorViewer这个工具,编写case是基本都用到它,这个工具在sdk的tools下。该工具用于捕捉并解析设备当前界面的组成结构(右上),点击控件,会显示控件的各种详细信息(右下),帮助我们在编程中方便地找到该控件。如图