《深入理解Android自动化测试》
又双叒叕重印咯!!!
好了,废话少说,咱们开始吧!
终极自动化框架UIAutomator使用详解
注意:
本文节选自《深入理解Android自动化测试》第五章 5.1节
前面介绍Instrumentation时提到,当UIAutomator这把倚天剑被Android祭出后,Instrumentation就基本与自动化Say Goodbye了(当然,此时Instrumentation也才真正回归到其单元测试框架的本来位置)。
作为一把无双的倚天剑,UIAutomator的特点非常显著:
UIAutomator通过注入原生事件进行模拟——通过模拟用户操作来与设备用户界面交互以及获取屏幕内容,它依赖于平台的辅助功能API在远程的控件树上获取屏幕内容以及执行一些操作。同时它也允许通过注入原生事件(即InputEvent)来模拟用户的按键和触屏操作。通过调用其executeAndWaitForEvent()函数对应用注入不同的事件来进行测试,该函数将接受一个可执行Runnable线程对象用来执行事件注入操作。
其次UiAutomation具有很好的耦合性——它既不会像Instrumentation一样为控制服务的生命周期而提供钩子(hooks),也不会调用那些可直接用于用户界面测试自动化的API。比如,模拟一个用户在屏幕上的点击事件需要构造并注入一个按下和一个弹起事件,然后必须调用UiAutomation的一个injectInputEvent(InputEvent, boolean)的调用来发送给操作系统。
UiAutomation支持跨应用操作——用户可编写可以跨越多个应用的测试用例脚本了。比如,打开系统的设置应用去修改一些设置然后再与另外一个依赖于该设置的应用进行交互。而这点,也正好是Instrumentation的缺陷所在。
第四UiAutomation还可方便地进行事件监控——只需创建一个UiAutomation.OnAccessibilityEventListener的实现类并将它的实例传递给setOnAccessibilityEventListener()方法。你的监听接口将会在每次有事件触发的时候接收到一个发送给onAccessibilityEvent()的回调,而参数就是一个描述该事件的AccessibilityEvent 的对象。
第五UiAutomation的扩展性也是非常好的——它提供了一系列接口供大家进行二次开发或一些小工具的开发。
第六UiAutomation还可借助Instrumentation框架运行——通过调用Instrumentation.getUiAutomation()即可获得UiAutomation的一个实例。在adb shell上运行InstrumentationTestCase时只需在instrument命令后加上“-w”选项即可运行。
最后UiAutomation非常容易上手——不仅具有非常清晰的控件捕获,脚本编写的门槛也大大降低,开发效率非常高。
从Android官网UI测试(UI Testing)对UIAutomator的推崇就可以看出,未来Android自动化,必将基于UIAutomator进行,下面简单介绍一下这款神器。
http://developer.android.com/tools/testing/testing_ui.html 。
更多内容,请点击“阅读原文”
参考《深入理解Android自动化测试》一书,谢谢!