Android 简明教程
Android - UI Testing
Android SDK 提供以下工具来支持对您的应用程序进行自动化、功能性 UI 测试。
-
uiautomatorviewer
-
uiautomator
uiautomatorviewer
一种 GUI 工具,用于扫描和分析 Android 应用程序的 UI 组件。
uiautomatorviewer 工具提供了一个方便的视觉界面来检查布局层次结构,以及查看测试设备上显示的各个 UI 组件的属性。利用这些信息,您稍后可以使用选择器对象(它们针对特定 UI 组件进行测试)来创建 uiautomator 测试。
要分析您想要测试的应用程序的 UI 组件,请在安装了示例给出的应用程序后执行以下步骤。
-
将您的 Android 设备连接到您的开发机器
-
打开一个终端窗口并导航至 <android-sdk>/tools/
-
通过以下命令运行该工具
uiautomatorviewer
按照以下方式执行命令
您将看到以下窗口出现。这是 UI Automator 查看器的默认窗口。
-
单击右上角的设备图标。它将开始截取当前在设备中打开的屏幕的 UI XML 快照。这将类似于以下内容。
之后,您将在 uiautomatorviewer 窗口中看到您的设备屏幕快照。
在这个窗口的右侧,您将看到两个分区。上部分说明了节点结构、UI 组件的排列和包含方式。单击每个节点会在下部分中提供详细说明。
作为示例,考虑以下图片。当您单击按钮时,您可以在上部分中看到 Button 已被选中,其详细信息显示在下部分中。由于此按钮可单击,因此其单击属性被设为 true。
UI Automator 查看器还帮助您以不同的方向检查您的 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
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 应用程序的选项。
选择你的移动设备作为选项,然后检查将显示应用程序屏幕的移动设备。现在,只需按照 UI 自动化查看器部分顶部的步骤执行操作,即可对该应用程序执行 UI 测试。