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
最后,欢迎扫码关注微信公众号。程序员同行学习交流,聊天交友,国内外名企求职内推(微软 / 小冰 / Amazon / Shopee / Coupang / ATM / 头条 / 拼多多等),可加我微信 jzj2015 进技术群(备注进技术群,并简单自我介绍)。

本文由jzj1993原创,转载请注明来源:https://www.paincker.com/android-test-6
(标注了原文链接的文章除外)
暂无评论