Android 简明教程

Android - UI Testing

Android SDK 提供以下工具来支持对您的应用程序进行自动化、功能性 UI 测试。

  1. uiautomatorviewer

  2. uiautomator

uiautomatorviewer

一种 GUI 工具,用于扫描和分析 Android 应用程序的 UI 组件。

uiautomatorviewer 工具提供了一个方便的视觉界面来检查布局层次结构,以及查看测试设备上显示的各个 UI 组件的属性。利用这些信息,您稍后可以使用选择器对象(它们针对特定 UI 组件进行测试)来创建 uiautomator 测试。

要分析您想要测试的应用程序的 UI 组件,请在安装了示例给出的应用程序后执行以下步骤。

  1. 将您的 Android 设备连接到您的开发机器

  2. 打开一个终端窗口并导航至 <android-sdk>/tools/

  3. 通过以下命令运行该工具

uiautomatorviewer

按照以下方式执行命令

cmd

您将看到以下窗口出现。这是 UI Automator 查看器的默认窗口。

ui
  1. 单击右上角的设备图标。它将开始截取当前在设备中打开的屏幕的 UI XML 快照。这将类似于以下内容。

ui1

之后,您将在 uiautomatorviewer 窗口中看到您的设备屏幕快照。

ui3

在这个窗口的右侧,您将看到两个分区。上部分说明了节点结构、UI 组件的排列和包含方式。单击每个节点会在下部分中提供详细说明。

作为示例,考虑以下图片。当您单击按钮时,您可以在上部分中看到 Button 已被选中,其详细信息显示在下部分中。由于此按钮可单击,因此其单击属性被设为 true。

ui4

UI Automator 查看器还帮助您以不同的方向检查您的 UI。例如,只需将您的设备方向更改为横向,然后再次截取屏幕截图。它显示在以下图片中 −

ui5

uiautomator

现在您可以创建您自己的测试用例,并使用 uiautomatorviewer 运行该测试用例来检查它。为了创建您自己的测试用例,您需要执行以下步骤 −

  1. 从 Project Explorer 中,右键单击您创建的新项目,然后选择 Properties > Java Build Path,然后执行以下操作 −

  2. 单击 Add Library > JUnit,然后选择 JUnit3 以添加 JUnit 支持。

  3. 单击 Add External JARs…​,然后导航到 SDK 目录。在 platforms 目录下,选择最新的 SDK 版本,然后添加 uiautomator.jar 和 android.jar 文件。

  4. 使用 UiAutomatorTestCase 扩展您的类

  5. 撰写必要的测试用例。

  6. 一旦您对测试进行了编码,请按照以下步骤构建您的测试 JAR 并将它部署到您的目标 Android 测试设备。

  7. 创建必需的构建配置文件以构建输出 JAR。要生成构建配置文件,请打开终端并运行以下命令:

<android-sdk>/tools/android create uitest-project -n <name> -t 1 -p <path>
  1. <name> 是包含您的 uiautomator 测试源文件的项目名称,<path> 是对应项目目录的路径。

  2. 从命令行,设置 ANDROID_HOME 变量。

set ANDROID_HOME=<path_to_your_sdk>
  1. 转到您的 build.xml 文件所在项目目录并构建您的测试 JAR。

ant build
  1. 使用 \"adb push\" 命令将生成的测试 JAR 文件部署到测试设备。

adb push <path_to_output_jar> /data/local/tmp/
  1. 运行测试的命令如下所示:

adb shell uiautomator runtest LaunchSettings.jar -c com.uia.example.my.LaunchSettings

Example

以下示例演示了 UITesting 的使用方法。它创建了一个基本应用程序,可用于 uiautomatorviewer。

要试验此示例,需要在实际设备上运行此应用程序,然后按照一开始说明的 uiautomatorviewer 步骤进行操作。

Steps

Description

1

将使用 Android studio 在包 com.tutorialspoint.myapplication 下创建一个 Android 应用程序。

2

修改 src/MainActivity.java 文件以添加 Activity 代码。

3

修改布局 XML 文件 res/layout/activity_main.xml,如有需要,则添加任何 GUI 组件。

4

创建一个 src/second.java 文件来添加 Activity 代码。

5

修改布局 XML 文件 res/layout/view.xml,如果需要,则添加任何 GUI 组件。

6

运行该应用程序,选择一个正在运行的安卓设备,并在该设备上安装应用程序并验证结果。

以下是 MainActivity.java 的内容。

package com.tutorialspoint.myapplication;

import android.content.Intent;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends ActionBarActivity {
   Button b1;

   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

      b1=(Button)findViewById(R.id.button);
      b1.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
            Intent in =new Intent(MainActivity.this,second.class);
            startActivity(in);
         }
      });
   }
}

以下是 second.java 的内容。

package com.tutorialspoint.myapplication;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class second extends Activity {
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.view);
      Button b1=(Button)findViewById(R.id.button2);

      b1.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
            Toast.makeText(second.this,"Thanks",Toast.LENGTH_LONG).show();
         }
      });
   }
}

以下是 activity_main.xml 的内容。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
   android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

   <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="UI Animator Viewer"
      android:id="@+id/textView"
      android:textSize="25sp"
      android:layout_centerHorizontal="true" />

   <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Tutorials point"
      android:id="@+id/textView2"
      android:layout_below="@+id/textView"
      android:layout_alignRight="@+id/textView"
      android:layout_alignEnd="@+id/textView"
      android:textColor="#ff36ff15"
      android:textIsSelectable="false"
      android:textSize="35dp" />

   <ImageView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/imageView"
      android:src="@drawable/abc"
      android:layout_below="@+id/textView2"
      android:layout_centerHorizontal="true" />

   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Button"
      android:id="@+id/button"
      android:layout_marginTop="98dp"
      android:layout_below="@+id/imageView"
      android:layout_centerHorizontal="true" />

</RelativeLayout>

以下是 view.xml 的内容。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:orientation="vertical" android:layout_width="match_parent"
   android:layout_height="match_parent">

   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text=" Button"
      android:id="@+id/button2"
      android:layout_gravity="center_horizontal"
      android:layout_centerVertical="true"
      android:layout_centerHorizontal="true" />
</RelativeLayout>

以下是 Strings.xml 的内容。

<resources>
   <string name="app_name">My Application</string>
</resources>

以下是 AndroidManifest.xml 的内容。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.tutorialspoint.myapplication" >

   <application
      android:allowBackup="true"
      android:icon="@mipmap/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppTheme" >

      <activity
         android:name=".MainActivity"
         android:label="@string/app_name" >

         <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>

      </activity>

      <activity android:name=".second"></activity>

   </application>
</manifest>

我们尝试运行 UI 测试应用程序。我假设你已经将实际的 Android 移动设备连接到了你的电脑。要从 Android studio 运行该应用程序,请打开项目的一个活动文件,然后单击工具栏中的“运行”图标。在启动应用程序之前,Android studio 将显示以下窗口,用于选择要在其中运行 Android 应用程序的选项。

choose device

选择你的移动设备作为选项,然后检查将显示应用程序屏幕的移动设备。现在,只需按照 UI 自动化查看器部分顶部的步骤执行操作,即可对该应用程序执行 UI 测试。