原文地址:
http://alexzh.com/tutorials/android-testing-ui-automator-part-4/
译文:
这是Android测试项目系列文章的第四篇。
第一篇关于单元测试的文章可以在这里读到:
http://alexzh.com/tutorials/android-testing-unit-testing/
第二篇关于Mockito 和 Robolectric测试框架的文章可以在这里读到:
http://alexzh.com/tutorials/android-testing-mockito-robolectric/
第三篇关于Espresso框架的文章可以在这里读到:
http://alexzh.com/tutorials/android-testing-espresso-part-3/
所有代码的托管在Github上面
https://github.com/AlexZhukovich/SimpleCoffeeOrderTestProject
1. 什么是UI Automator(UI 自动化测试)
UI Automator(UI 自动化)测试框架,是Android Testing Support Library官方包所提供的,他提供了一组可以与任何应用程序交互UI测试的API。这个框架适合编写黑盒的自动化测试:
UI Automator的主要功能:
UI Automator View;
与任何应用进行交互;
访问设备的状态
设备旋转
点击返回键、Home键、或Menu健
打开通知栏遮盖
当前屏幕截图
但是,UI Automator需要运行在Android 4.3(API 18)及以上版本。
2. 什么是UI Automator View
UIAutomatorView工具有一个很方便的功能就是会扫描并分析任何展示在Android设备上的UI组件。UIAutomatorView传来的信息允许你创建不错的UI Automator测试例子。
你可以在/tools/ 目录下找到uiautomatorview程序。或者你可以从Android设备模拟器(Android Studio下的Tools/Androids/Android Device Monitor)上启动这个程序。
3. 将 UI Automator集成进项目
首先,你需要在build.gradle文件中添加dependecies和runner依赖;
但是,UI Automator还有一个额外问题就是最低版本的限制API 18;
接下来就要展示如何解决这个问题。在androidTest文件下添加一个额外的AndroidManifest.xml文件;
AndroidManifest.xml文件(androidTest文件夹下)
这个文件包含了UIAutomator 框架所支持的信息。然后就可以在所有的Ui Automator框架所写的测试来通过@SdkSuppress(minSdkVersion=18)的注解来进行设置。如果你的项目使用了Espresso测试框架,那么所有的测试都是可以在API > 8的设备上来运行。
4. 运行UI Automator测试
当我们讨论UI Automator Test的时候,其使用方法与instrumentation Test的配置方法是一样的。
(1) 使用Android Studio
首先,需要为instrumentation测试创建配置。你可以选择“Run/Edit Configurations...”,然后选择 “+”并点击 “Android Test”。
接着,你需要为Android tests创建一个module。在我这个例子中,我将创建的“Module”命名为“UI tests”,并将其挂载在“app”下;
经过上述一系列操作,运行菜单下就可以看到UI tests的选项,接着就可以选择并运行这个测试。
(2) 使用Gradle
如果你想使用gradle来运行instrumentation测试,就可以使用下面的命令:
or
当命令行运行结束后,就可以在下列路径找到当前测试的测试报告:
//build/reports/androidTests/connected/index.html
5. 编写UI Automator 测试
(1)基本的UI Automator 组件
以下是一些常用的 UI Automator组件:
By- 使用程序类,允许使用简洁的方式创建 BySelectors
BySelector- 指定在调用findObject(BySelector)的时候来匹配UI元素
UiCollection-用于枚举屏幕元素来进行计算,通过文本,描述,索引等来定位子元素。表示项目集合,作为咖啡订单应用程序中的咖啡示例列表;
UiDevice- 提供对设备状态信息的访问;
UiObject- 基于UiSelector,包含View的信息;
UiObject2- UiObject2与UiObject稍微又些不同。UiObject2也代表一个UI 元素;
UiScrollable- 用于在可滑动Ui组件中搜索元素;
UiSelector- 用于搜索显示在设备屏幕上的UI 元素。你可以为他使用不同的属性,如text,class,Content description等。
Configurator- 允许你为运行UI自动化测试设置关键参数;
(2)使用 UiDevice的例子
UiDevice提供对设备状态信息的访问。下面的常用的UiDevice actions:
点击 “Home” 键
点击 “Back” 键
点击 电源按钮
点击屏幕上任意坐标
打开消息通知栏
你可以在这里(http://developer.android.com/reference/android/support/test/uiautomator/UiDevice.html)找到关于这个类的更多的使用方法;
(3)使用 UiCollection的例子
UiCollection用于枚举屏幕元素来进行计算,通过文本,描述,索引等来定位子元素。表示项目集合,作为咖啡订单应用程序中的咖啡示例列表;
下面的代码片段展示如何初始化一个collection。collection的根节点是 RelativeLayout
如果你想要得到这个集合中展示的coffees的数量,如下代码:
你也可以从集合中得到一种叫做“Espresso”的特殊的咖啡:
你可以在这里(https://developer.android.com/reference/android/support/test/uiautomator/UiCollection)找到关于这个类的更多的使用方法;
(4)使用UiObject的例子
UiObject相当于一个UI元素。
通过下面的代码你可以找到屏幕上的UI元素。
但是,payButton的值能够为null,最好在使用之前检查是否存在
你可以在这里(https://developer.android.com/reference/android/support/test/uiautomator/UiObject)找到关于这个类的更多的使用方法;
(5)使用UiObject2的例子
UiObject2相当于一个UI元素。
下面是与UiObject有关的相同例子。
你可以在这里(https://developer.android.com/reference/android/support/test/uiautomator/UiObject2)找到关于这个类的更多的使用方法;
(6)使用UiScrollable的例子
UiScrollable用于在可滑动Ui组件中搜索元素;
你可以将这个对象滚动到不同的方向,例如向前、向后等。
你也可以滚动直到找到某个text,例如滚动到Settings。
你可以在这里(https://developer.android.com/reference/android/support/test/uiautomator/UiScrollable)找到关于这个类的更多的使用方法;
(7)使用UiSelector的例子
UiSelector用于搜索显示在设备屏幕上的UI 元素。你可以为他使用不同的属性,如text,class,Content description等。
你可以从不同的属性创建一个新的 UiObject,如:
Text
Resource ID
Content description
如果多个元素匹配UiSelector,则返回层次结构的第一个元素。
你可以在这里(https://developer.android.com/reference/android/support/test/uiautomator/UiSelector)找到关于这个类的更多的使用方法;
(8)使用UiConfigurator的例子
Configurator允许你为运行UI自动化测试设置关键参数。例如,这个类允许在启动uiautomator操作之前设置等待用户界面进入空闲状态的超时。
你可以在这里(https://developer.android.com/reference/android/support/test/uiautomator/Configurator)找到关于这个类的更多的使用方法;
(9)创建系统应用程序测试
在第一个UI Automator测试中,我们检查基本的计算器应用程序。首先,需要启动这个应用程序,接着让两个数相加,如 2和3相加。最后,检查结果。
最后,关于这段代码的评论很少。在每次测试前调用它setup方法来打开“计算器”应用程序。你可能会在同一个测试套件中测试相同的应用程序,就可以使用@Before注解的方法内可以编写在应用程序打开前的准备工作。
如果我们需要用 UiObject2来做一些操作,就可以使用以下代码;
(10)创建通知测试
首先,需要打开应用程序列表:
接着,需要找到并打开“设置” App;
下一步是搜索电池设置并打开它;
之后,我们可以打开附加菜单,选择“省电模式”;
当启动省电模式时,需要同时改变其状态;
最后,我们必须打开通知,找到关于电池保护的通知;
最后我们需要返回设备的默认状态,这意味着省电模式的转变;
该测试的全部源码:
当然,测试系统应用不是一个好的主意,但是现在你知道了如何去测试通知。当你的activity有跳转动画时,你也可以使用wait方法。
Note:如果你想使用模拟器运行上述测试代码,需要更改“充电器连接”为无状态,因为当你的设备没有连接充电器时,这个模式(省电模式)是可用的。
资源:
Testing UI for Multiple Apps:https://developer.android.com/training/testing/ui-testing/uiautomator-testing.html
Testing Support Library:https://developer.android.com/topic/libraries/testing-support-library/index.html#UIAutomator
感谢大家阅读。
领取专属 10元无门槛券
私享最新 技术干货