简介
Google Android Developers 在2015年3月就发布了UiAutomator 2.0版本。
重大特性
1.U2 基于 Instrumentation,使用Instrumentation test runner即可运行UiAutomator,反之,也即在基于Instrumentation的test中也能使用UiAutomator; 可以获取应用Context,可以使用Android服务及接口。
2.Log日志输出变更。U1可以使用System.out.print输出流回显至执行端,而U2输出到Logcat。
3.Uiautomator1.0与2.0包名不一致 com.android.uiautomator.core. -> android.support.test.uiautomator。
4.基于 Junit4,测试用例无需继承于任何父类,方法名不限,使用Annotation进行; U1需要继承UiAutomatorTestCase,测试方法需要以test开头。
5.与U1的Maven或Ant构建方式不同,U2采用Gradle进行构建; U2输出为APK,Android工程,而U1为Java工程,输出jar包。
6.新增UiObject2、Until、By、BySelector等接口, 详细请参考官方文档。 其中,U2必须明确EditText框才能向里面输入文字,U1直接指定父类也可以在子类中输入文字。
<section>
</section>
启动命令变化<br style="box-sizing: border-box;"/>
注意事项
必须与被测应用签名一致,且系统安装被测应用的情况下执行测试用例。
获取参数
u2测试框架基于apk,拥有权限类似APP,无法执行dump等shell权限操作。
可以通过系统签名、root、
device.executeShellCommand(注意只支持API 21 )、Java守护进程方式执行。
在Android 4.4手机出现
NoClassDefFoundError问题,
Instrumentation
消息为
INSTRUMENTATION_RESULT: longMsg=java.lang.NoClassDefFoundError:
org.junit.runner.manipulation.Filter$1 解决: MultiDex手动拆包A ,
配置如下:<br style="box-sizing: border-box;"/>
uiautomator2.0 应用
使用AndroidStudio创建项目时会自动引入相关依赖等工作,新建工程只要在对应目录下编写测试用例即可执行。如需手动配置,操作步骤如下:
项目集成
配置gradle文件,引入依赖包
用例编写
在modle/src/androidTest/java/packageName下创建用例(新建应用会自动构建一条测试用例,可以直接运行,否则需要手动创建如上目录及用例文件)
用例执行
1、通过gradle project -> module-> tasks -> build -> assembleAndroidTest 构建Android测试apk,然后安装。
2、通过命令如下命令启动测试用例
Api UiDevice
1.UiDevice代表设备状态,为单例模式。
UiDevice的功能包括:
①获取设备信息:屏幕分辨率,旋转状态,亮灭屏状态等
②操作:案件,坐标操作,滑动,拖拽,灭屏唤醒屏幕,截图等
③监听器功能
2.UiDevice写法有两种,推荐第一种方式,第二种可能会引起某些问题而导致无法运行。
①UiDevice.getInstance().pressHome();
②getUiDevice().pressHome();
按键相关的API,常用的按键包括HOME,MENU,BACK,VOLUME_UP,VOLUME_DOWN,RecentApps,POWER等