Android - UI 测试
Android SDK 提供了以下工具来支持对您的应用程序进行自动化、功能性的 UI 测试。
- uiautomatorviewer
- uiautomator
uiautomatorviewer
一个 GUI 工具,用于扫描和分析 Android 应用程序的 UI 组件。
uiautomatorviewer 工具提供了一个便捷的可视化界面,用于检查布局层次结构并查看测试设备上显示的单个 UI 组件的属性。使用这些信息,您可以稍后使用针对特定 UI 组件的 selector 对象创建 uiautomator 测试。
要分析您想要测试的应用程序的 UI 组件,请在安装示例中给出的应用程序后执行以下步骤。
- 将您的 Android 设备连接到开发机器
- 打开终端窗口并导航到 <android-sdk>/tools/
- 使用此命令运行工具
uiautomatorviewer
命令将按以下方式执行
您将看到以下窗口出现。这是 UI Automator Viewer 的默认窗口。
点击右上角的设备图标。它将开始捕获设备上当前打开屏幕的 UI XML 快照。类似于这样。
之后,您将在 uiautomatorviewer 窗口中看到设备屏幕的快照。
在该窗口的右侧,您将看到两个分区。上方分区解释了节点结构,即 UI 组件的排列和包含方式。点击每个节点会在下方分区显示详细信息。
例如,考虑下图。当您点击按钮时,您可以在上方分区看到 Button 被选中,并在下方分区显示其详细信息。由于此按钮是可点击的,因此其 clickable 属性设置为 true。
UI Automator Viewer 还帮助您以不同方向检查 UI。例如,只需将设备方向更改为横向,然后再次捕获屏幕截图。下图显示了这一点 −
uiautomator
现在您可以创建自己的测试用例并使用 uiautomatorviewer 运行它来检查它们。要创建自己的测试用例,请执行以下步骤 −
在 Project Explorer 中,右键单击您创建的新项目,然后选择 Properties > Java Build Path,并执行以下操作 −
点击 Add Library > JUnit,然后选择 JUnit3 以添加 JUnit 支持。
点击 Add External JARs... 并导航到 SDK 目录。在 platforms 目录下,选择最新的 SDK 版本并添加 uiautomator.jar 和 android.jar 文件。
将您的类扩展为 UiAutomatorTestCase
编写必要的测试用例。
编码测试后,按照以下步骤构建并将测试 JAR 部署到目标 Android 测试设备。
创建所需的构建配置文件以构建输出 JAR。要生成构建配置文件,请打开终端并运行以下命令:
<android-sdk>/tools/android create uitest-project -n <name> -t 1 -p <path>
<name> 是包含您的 uiautomator 测试源文件的项目名称,<path> 是相应项目目录的路径。
从命令行设置 ANDROID_HOME 变量。
set ANDROID_HOME=<path_to_your_sdk>
- 转到包含 build.xml 文件的项目目录并构建您的测试 JAR。
ant build
- 使用 adb push 命令将生成的测试 JAR 文件部署到测试设备。
adb push <path_to_output_jar> /data/local/tmp/
- 使用以下命令运行您的测试 −
adb shell uiautomator runtest LaunchSettings.jar -c com.uia.example.my.LaunchSettings
示例
下面的示例演示了 UITesting 的使用。它创建一个基本的应用程序,可用于 uiautomatorviewer。
要实验这个示例,您需要在实际设备上运行它,然后按照开头解释的 uiautomatorviewer 步骤操作。
| 步骤 | 描述 |
|---|---|
| 1 | 您将使用 Android Studio 在包 com..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 | 运行应用程序,选择一个运行中的 Android 设备,将应用程序安装到该设备上并验证结果。 |
以下是 MainActivity.java 的内容。
package com..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..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 的内容
在以下代码中,abc 表示 example.com 的徽标
<?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=""
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..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 Testing 应用程序。我假设您已将实际的 Android 移动设备连接到计算机。要从 Android Studio 运行应用程序,请打开项目的一个 activity 文件,然后点击工具栏中的 Run
图标。在启动应用程序之前,Android Studio 将显示以下窗口,让您选择要在哪里运行 Android 应用程序。
选择您的移动设备作为选项,然后检查您的移动设备,它将显示应用程序屏幕。现在,只需按照顶部 ui automator viewer 部分中提到的步骤,对此应用程序执行 UI 测试。