-
简介
UiAutomator是Google提供的用来做安卓自动化测试的一个Java库,基于Accessibility服务。功能很强,可以对第三方App进行测试,获取屏幕上任意一个APP的任意一个控件属性,并对其进行任意操作,但有两个缺点:1. 测试脚本只能使用Java语言 2. 测试脚本要打包成jar或者apk包上传到设备上才能运行。
-
环境搭建
- 安装JDK,并配置好环境变量
JDK下载地址:https://pan.baidu.com/s/1Sa6Dq2a3zciuZ_9udcDwPQ 提取码:ybe7
- 下载SDK,解压
SDK下载地址:https://pan.baidu.com/s/1vMASKxDfsx6wo4MwhiVKnw 提取码:j525
- adb环境变量配置
https://blog.youkuaiyun.com/shengmer/article/details/79027828
- 下载eclipse,解压
eclipse下载地址:https://pan.baidu.com/s/1IXIS23S52zUG80nakaAlXQ 提取码:t1ye
- 下载相关jar包
jar包下载地址:https://pan.baidu.com/s/1Wv5HbN5skX4oESLDR52WHA 提取码:igge
- 打开eclipse,新建java 项目
点击File --> New --> Java Project --> 填写项目名 --> 点击Finish
- 在新建项目根目录新建libs文件夹,将开始下载的jar包,解压之后,放入libs文件夹,并引用
1:右键项目名 --> New --> Folder
2:在Folder name 栏目填写 libs --> 点击Finish
3:将开始下载的jar包,解压之后,放入libs文件夹
4:右键jar包 --> Build Path --> Add to Build Path
- 开始编码
1:新建类,继承 UiAutomatorTestCase
import com.android.uiautomator.testrunner.UiAutomatorTestCase;
public class xxx extends UiAutomatorTestCase {
}
2:在新建类中,写一个必须包含test字样的公开的空返回值方法
public class xxx extends UiAutomatorTestCase {
public void testDemo() {
}
}
3:在新建方法中,开始编写自动化代码
4:代码打包
在项目根目录新建 MyInjectEventApp.bat 文件,然后右键编辑,写入:
del classes.dex
del bin\uiTests.jar
cd bin
jar cvf uiTests.jar *
copy uiTests.jar ..\uiTests.jar
cd ..
set PATH=%PATH%;D:\android\adt-bundle-windows-x86_64-20140702\sdk\build-tools\android-4.4W
cmd /c dx --dex --output=.\classes.dex .\uiTests.jar
aapt add test.jar classes.dex
cd bin
说明:
D:\android\adt-bundle-windows-x86_64-20140702\sdk\build-tools\android-4.4W 是上面下载的SDK文件里面android-4.4W的目录。
test.jar 是打包完成时候的jar包名字
基本写法的话, 修改这两个地方就ok。
修改之后,保存该文件,双击MyInjectEventApp.bat,等待打包完成。
5:执行打包代码
新建test.bat 文件,写入:
adb push ./test.jar /data/local/tmp/
adb shell uiautomator runtest /data/local/tmp/test.jar -c com.test.xxx -e minWait 2 -e maxWait 5 -e wordType 1
说明:
adb push:将打包完成的test.jar 脚本文件,推送到手机/data/local/tmp/ 目录下
adb shell uiautomator runtest: 执行/data/local/tmp/目录下面的test.jar脚本文件
-c 指定包名+类名 -e指定脚本接收的参数 (注意空格不能少)
脚本接收参数示例
public class xxx extends UiAutomatorTestCase {
private int min,max;
private String wordType;
public void testDemo() {
wordType = getParamsVal("wordType", "1");
min = Integer.parseInt(getParamsVal("minWait","2"));
max = Integer.parseInt(getParamsVal("maxWait","8"));
}
private Bundle params = null;
//第一个参数:-e 后面的字段
//第二个参数:在获取不到第一个参数的时候,设置的默认值
public String getParamsVal(String key, String defVal) {
String val = "";
if (null == params)
params = getParams();
if (params.isEmpty()) {
return defVal;
}
if (params.containsKey(key)) {
val = params.getString(key);
if (null == val) {
val = defVal;
}
} else {
val = defVal;
}
return val;
}
}
在手机正常连接电脑之后,找到sdk\tools\bin\uiautomatorviewer.bat 文件,双击打开。
点击这个按钮,获取手机屏幕
假如,我想要获取 “动态消息” 的信息,在uiautomatorviewer获取出来的页面中,点中 “动态消息” ,在右边可以看到。