Android测试:UI 自动化测试

原文地址:

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

感谢大家阅读。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181017G0JE6L00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券