您的浏览器不支持CSS3,建议使用Firfox、Chrome等浏览器,以取得最佳显示效果

Android测试初探(六) 利用UI Automator框架实现跨应用测试

Android, Android测试初探 691℃ 0 2年前 (2016-02-15)

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即可,配置只需要添加一个依赖项如下。

  1. dependencies {
  2. androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.2'
  3. }

示例代码先进行了按键操作(HOME键、音量键),并先后启动桌面的Settings和UnitTest应用。注意,如果桌面没有这个名称的应用,会抛出UiObjectNotFoundException,从而测试失败。

  1. public class UiAutomatorTest extends InstrumentationTestCase {
  2. private UiDevice mDevice;
  3. @Override
  4. protected void setUp() throws Exception {
  5. super.setUp();
  6. mDevice = UiDevice.getInstance(getInstrumentation());
  7. }
  8. public void testDemo() throws UiObjectNotFoundException {
  9. mDevice.pressHome();
  10. mDevice.pressKeyCode(KeyEvent.KEYCODE_VOLUME_UP);
  11. mDevice.pressKeyCode(KeyEvent.KEYCODE_VOLUME_DOWN);
  12. mDevice.findObject(new UiSelector().text("Settings")).clickAndWaitForNewWindow();
  13. mDevice.pressHome();
  14. mDevice.findObject(new UiSelector().text("UnitTest")).clickAndWaitForNewWindow();
  15. }
  16. }

参考资料与扩展阅读

《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

来自为知笔记(Wiz)

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

0

暂无评论

评论前:需填写以下信息,或 登录

用户登录

忘记密码?