引言:
UIAutomator作为基于控件的自动化框架的一种,具备的强大兼容性及应用的灵活性, 可以很好地帮助我们解决自动化过程中的问题。
特点:
粗暴但灵活、 简单可依赖
缺点:无法对web做解析。
uiautomator的框架有9个类,分别是
·UIAutomationSupport: UI测试信息拓展类。
·UIAutomatorTestCase: UI测试基类。
·UICollection: UI测试控件集合。
·UIDevice: UI测试设备抽象。
·UIObject: UI测试控件抽象。
·UIObjectNotFoundException: UI测试控件无法找到的异常。
·UIScrollable: UI测试可滚动控件。
·UISelector: UI测试控件选择器。
·UIWatcher: UI测试界面观察者
uiautomator的常用API
1.UiDevice:
设备对象,通过UiDevice的getInstance(instrumentation)方法获取,可以通过UiDevice实例来检测设备的各种属性,比如获取屏幕的方向、尺寸等
2.UiObject
通过uiDevice的findObject()方法获取可以获取手机控件,然后就可以对UI控件进行相关的操作,比如点击、长按等:
对于手机软件中控件的描述可以通过UIAutomator获取到
UIAutomator的原理:
作为基于控件的自动化测试框架, 有两件比较重要的事情, 即界面解析和事件注入。 界面解析以获取目标控件, 事件注入以完成操作交互。在UIAutomator自动化测试过程中, 界面解析和事件注入最终都依赖于UiAutomation来完成, 而UiAutomatorBridge相当于UiAutomation的代理, 作为两者之间调用的桥梁, 几乎所有事件的处理及交互, 都经过UiAutomatorBridge进行派发。
UiAutomatorBridge与UiAutomation的关系: UiAutomatorBridge持有UiAutomation的实例作为成员变量, QueryController及InteractionController在执行事务的时候, 会通过UiAutomatorBridge来获得UiAutomation的实例进行调用。
UiAutomatorBridge与UiDevice的关系: UiDevice成员变量中拥有UiAutomatorBridge的实例, 视其为UiAutomation的代理, 所有与界面解析及事件注入相关的事务, 都调用UiAutomatorBridge来进行。
UIAutomator界面解析和事件注入的流程, 可以稍做总结如下:
·UIAutomator界面解析、 事件注入均由UiAutomation来完成。
·UiObject对象可以理解成使用时才被实例化, 每次调用都会重新解析实例化。
·UIAutomator的操作事件非基于控件, 最终都转换为坐标执行。
·控件遍历过程中每次只返回一个节点信息而不是控件树, 效率比较低
编写UIAutomator自动化测试脚本大体过程:
1.使用UIAutomator2中的instrumentation框架,调用UIdevice,UIobject这些常用的类。
2.最后通过实例化UIdevice,创建测试用例,调用一些常用的API来实现模拟用户操作的过程。
一个简单的小demo:
我用UIAutomator创建一个简单的相机自动化测试流程:
1、使用Android SDK自带的UIAutormatorViewer界面解析器来进行界面解析。通过点击界面中的目标控件,获得空间的元素属性(如text,description,resource-id,package等),这些属性在后面操作控件的方法API中会用到。
2.创建测试用例,编码模拟用户操作过程
a). 在执行测试用例前运行setup(),用于环境准备。(调用instumentation框架啊,实例化UIdevice类啊)
b). 写测试用例
.......
【最后两步可以看一下下面程序: