UIAutomator是一个Android自动化测试框架,是谷歌在Android4.1版本发布时推出的一款用Java编写的UI测试框架,它只能用于UI即黑盒方面的测试。因此UIAutomator只能运行在Android4.1以后的版本,其最大的特色是能够跨进程操做。咱们可使用UIAutomator框架提供的一些方便的API来对Android应用进行一系列的自动化测试操做,如点击、滑动、键盘输入、长按以及经常使用的断言方法。能够代替繁复的手工测试。浏览器
优势:框架
缺点:socket
首先,Google的UIAutomator参考微软的UIAutomation提供的一套用在Android上的自动化测试框架。 基于Android AccessilibilityService。 在这里简单介绍一下:AccessilibilityService是一个可访问服务,它是一个为加强用户界面并帮助残疾用户的应用程序,或者用户可能没法彻底与设备交互。举个简单的例子,假如一个用户在开车。那么用户就有可能须要添加额外的或者替代的用户反馈方式。其应用方式通常有两种:函数
第一种方法是:UIAutomatorView + monkey。它与hierachyview + monkey差很少。其区别是:UIAutomatorView经过ADB向设备侧发送一个dump命令,而不是创建一个socket,下载一个包含当前界面控件布局信息的xml文件。相比较hierachyview下载的内容而言,该文件小不少。所以,从效率上讲,这种方法比第一种应用模式快不少。工具
第二种方法是: 直接调用UIAutomator框架对外提供的API,主要有UIDevice、UISelector、UIObject和 UIScrollable等。其原理与第一种方式即HierachyView + Monkey差很少。其过程大体是:首先,UIAutomator测试框架经过Accessibilityservice,获取当前窗口的控件层次关系及属性信息,并查找到目标控件。如果点击事件,则计算出该控件的中心点坐标。其次,UIAutomator经过 InputManager.getInstance().injectInputEvent隐藏接口来注入用户事件(点击、输入类操做),从而实现跨进程 自动化的目的。布局
UIAutomator对外还提供了UIAutomatorTestCase、UIDevice、UISelector、UIObject、UICollection、UIScrollable等重要的类,其各自的做用以下:单元测试
定义一个点击对象Object,该对象则经过UISelector对象定位到具体的控件。而UISelector则经过 UIAutomatorBridge(它可看作是UISelector与AccesibilityService之间的链接器),将查询内容 (AccessibilityNodeInfo)和输入事件(AccessibilityEvent)传给AccessibilityService。实 际业务过程比这复杂的多。这样,就实现了对某个控件的查找或点击操做。备注:AccessibilityEvent,全部可操纵的UI元素都定义为一个 AccessibilityEeventt;AccessibilityNodeInfo指视窗中的组件树节点。测试