UiAutomatorEspresso最大的不同是支持多个 App,所以UiAutomator是所有 Android 测试工程师的必备技能。

UiAutomator2.0 版本依赖了Instrumentation使得UiAutomator 2可以轻松的拿到 Activity 的 Context,就可以像写 Android 应用程序一样,实现很多功能。

快速开始

添加依赖库

Module/build.gradle
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
android {

defaultConfig {

// Testing config
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
}

dependencies {
// Testing dependencies
androidTestCompile 'com.android.support:support-annotations:23.1.1'
androidTestCompile 'com.android.support.test:runner:0.4.1'
androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.1'
androidTestCompile 'org.hamcrest:hamcrest-integration:1.3'
}

新建测试类

androidTest文件夹下新建一个测试类

UiAutomatorTest.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@RunWith(AndroidJUnit4.class)
public class UiAutomatorTest {

Context mContext;
UiDevice mDevice;

@Before
public void setUp() {
mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
mContext = InstrumentationRegistry.getContext();
}

@Test
public void testSetting() throws UiObjectNotFoundException {
// Home键
mDevice.pressHome();
// 找到设置并点击
mDevice.findObject(new UiSelector().text("设置")).click();
}

}

运行测试类

右键,选择 run 'UiAutomatorTest'

run

运行效果

run

命令行运行

1
2
3
4
5
# 查找
$ adb shell pm list instrumentation
instrumentation:cn.gavinliu.uiautomator.test/android.support.test.runner.AndroidJUnitRunner (target=cn.gavinliu.uiautomator)
# 运行
$ adb shell am instrument -w cn.gavinliu.uiautomator.test/android.support.test.runner.AndroidJUnitRunner

UiAutomator 主要 API

Instrumentation

Instrumentation也是一个测试框架,可以操作很多系统 API,UiAutomator2.x引入了它,大大增强了 UiAutomator 的功能。

UiDevice

UiSelector

UiObject