UI Automator
在较早版本的Android系统中,Instrumentation必须在系统权限下,才能操作整个手机;否则只能操作自身或与其签名一致的APP。而由于Instrumentation通常不能获取系统权限(需要系统签名,而系统签名文件在编译系统时已经被编译进去,不能获取到),于是基于Instrumentation的很多框架只能进行单个APP的测试,不能跨应用测试。
不能跨应用测试,一些例如分享到QQ之类的功能就不能被实现。
UI Automator是谷歌在Android 4.3引入的测试框架,最重要的特点就是支持跨应用测试,缺点是必须在Android 4.3及以上设备中才能使用。UI Automator基于Android 4.3中Instrumentation新引入的API,直接可以操作手机,而不局限于某个应用。
UI Automator使用默认的Instrumentation Test Runner即可,配置只需要添加一个依赖项如下。
dependencies {
androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.2'
}
示例代码先进行了按键操作(HOME键、音量键),并先后启动桌面的Settings和UnitTest应用。注意,如果桌面没有这个名称的应用,会抛出UiObjectNotFoundException,从而测试失败。
-
public class UiAutomatorTest extends InstrumentationTestCase {
-
private UiDevice mDevice;
-
@Override
-
protected void setUp() throws Exception {
-
super.setUp();
-
mDevice = UiDevice.getInstance(getInstrumentation());
-
}
-
public void testDemo() throws UiObjectNotFoundException {
-
mDevice.pressHome();
-
mDevice.pressKeyCode(KeyEvent.KEYCODE_VOLUME_UP);
-
mDevice.pressKeyCode(KeyEvent.KEYCODE_VOLUME_DOWN);
-
mDevice.findObject(new UiSelector().text("Settings")).clickAndWaitForNewWindow();
-
mDevice.pressHome();
-
mDevice.findObject(new UiSelector().text("UnitTest")).clickAndWaitForNewWindow();
-
}
-
}
参考资料与扩展阅读
《Best Practices for Testing》http://developer.android.com/intl/zh-cn/training/testing/index.html
《Gradle Plugin User Guide》 http://tools.android.com/tech-docs/new-build-system/user-guide
《在Android Studio中进行单元测试和UI测试》 http://www.jianshu.com/p/03118c11c199
《Android Espresso 测试框架介绍》 https://github.com/bboyfeiyu/android-tech-frontier/blob/master/issue-11/Android-Espresso测试框架介绍.md