uiau

来源:互联网 发布:网络变压器是什么 编辑:程序博客网 时间:2024/04/28 08:23


UiAutomator 是 Google 仿照微软 Uiautomation 提供的一套自动化框架,基于 Android AccessilibilityService 提供(注: Android AccessilibilityService ,是一个可访问服务,是一个为增强用户界面并帮助残疾用户的应用程序,或者用户可能无法完全与设备的交互。例如,用户在开车。那么用户就有可能需要添加额外的或者替代的用户反馈方式)。其应用方式有以下几种,一种是 UiAutomatorView+monkey ,另一种是直接调用 UiAutomator API 。其中,第一种方法同 hierachyview+monkey 差不多。其区别是: UiAutomatorView 通过 ADB 向设备侧发送一个 dump 命令,而不是建立一个 socket ,下载一个包含当前界面控件布局信息的 xml 文件。相比较 hierachyview 下载的内容而言,该文件小很多。因此,从效率上讲,这种方法比第一种应用模式快很多。第二种方法,则是直接调用 UiAutomator 框架对外提供的 API ,主要有 UiDevice 、 UiSelector 、 UiObject 等。其原理与第一种方式,即 HierachyView+Monkey ,差不多。其过程大致是:首先, UiAutomator 测试框架通过 Accessibilityservice ,获取当前窗口的控件层次关系及属性信息,并查找到目标控件。若是点击事件,则计算出该控件的中心点坐标。其次, UiAutomator 通过测试框架,注入用户事件(点击、输入类操作),从而实现模拟人的操作。 UiAutomator 对外提供 UiAutomatorTestCase 、 UiDevice 、 UiSelector 、 UiObject 、 UiCollection 、 UiScrollable 等类,其作用如下: l UiAutomatorTestCase :继承自 Junit TestCase ( Junit ),对外提供 setup 、 teardown 等,以便初始化用例、清除环境等。 l UiDevice :此类主要包含了获取设备状态信息,和模拟用户至于设备的操作两类 API 。 UiSelector ,主要是通过一定查询方式,定位到所要操作的 UI 元素。 l UiObject : UiObject 可代表页面的任意元素,它的各种属性定位通常通过 UiSelector 来完成。 l UiCollection : UiCollection 一般与 UiSelector 连用,如它的构造函数也要求提供 Uiselector: UiCollection(UiSelector selector) 。它的 API 较少,主要用以从 Uiselector 筛选出的元素集中挑出所要的元素 :getChildByDescription(), getChildByInstance(), getChildByText() , 以及统计元素集的个数 getChildCount() 。 l UiScrollable : UiScrollable 用来表示可以滑动的界面元素 其继承关系为 UiObject - UiCollection -UiScrollable 。 但 UiAutomator 的实现方式与 HierachyView+Monkey 有很大不一样。以控件点击操作为例,其实现流程大致如下: 定义一个点击对象 Object ,该对象则通过 UiSelector 对象定位到具体的控件。而 UiSelector 则通过 UiAutomatorBridge (它可看做是 UiSelector 与 AccesibilityService 之间的连接器),将查询内容( AccessibilityNodeInfo )和输入事件( AccessibilityEvent )传给 AccessibilityService 。实际业务过程比这复杂的多。这样,就实现了对某个控件的查找或点击操作。备注: AccessibilityEvent ,所有可操纵的 UI 元素都定义为一个 AccessibilityEeventt ; AccessibilityNodeInfo 指视窗中的组件树节点。 第三种则是 accessibilityservice 。先来介绍下 Accessibilityserveice 服务。前面已经讲过,它是一个 Android 的一个服务。若是用 Accessibilityservice 进行自动化,我们需要继承 Accessibilityservice 开发一个服务。这样,我们就可以依据这个服务获取当前界面的控件属性信息。其获取内容跟 Uiautomator 一样,都是 AccessibilityNodeInfo 。控件信息获取到后,若是要进行点击等操作,则可通过 Monkey 或其他方式,如 Input 等,来模拟点击操作。 上述几种 Android 测试方法中, UiAutomator 比较正统,是 Google 正式推出的,也是应用范围最广的。另外几种方法,则见得不多,其中 Hierachyview+monkey 的方式,公司内部 Ares 就采用了。这类测试工具的一个好处就是可以跨应用。但不足之处也很多,速度慢、不支持 WebView 等(这种模式下,对 WebView 控制有限,无法注入 Java Script )。

0 0
原创粉丝点击