Selendroid 初学者教程(含示例)
您是否曾经开发过 Android 应用程序并将其发布到 Google Play?如果您收到以下用户评论,您会怎么做?
当您将应用发布到 Google Play 时,必须对其进行充分测试以避免潜在的 bug。在发布应用之前,应该执行大量的测试场景。为了节省测试工作,您需要一个测试工具。Android 应用的最佳测试工具之一是 Selendroid。
什么是 Selendroid?
Selendroid 是一个用于多种移动应用程序的测试自动化框架:原生和混合 Android 应用以及移动网络应用。
您可以使用 Selenium 2 客户端 API 编写测试。因为 Selendroid 仍然重用现有的 Selenium 网络基础设施。
Selendroid 是一款强大的测试工具。它可以在模拟器和真实设备上使用。
为什么我们需要 Selendroid?
Selendroid 是一款很棒的测试工具。但您可能仍然怀疑它的用处。
本节将介绍 Selendroid 的重要功能,以回答您为什么需要 Selendroid 的问题。
- 您可以使用 Selendroid 测试应用程序,而无需对应用程序进行任何修改。您只需要将二进制文件 (APK) 安装在计算机上。为了在设备上安装二进制文件,测试应用程序和移动应用程序必须使用相同的签名密钥进行签名。
- Selendroid 测试应用程序可以同时与多个设备或模拟器进行交互。这是 Selendroid 的一大优势。因此,您可以使用各种 Android 设备测试您的应用程序以检查兼容性。
- Selendroid 可以模拟用户对应用程序的人机交互,例如设备上的触摸、滑动、拖放。
- 您可以在测试期间更改硬件设备(插拔),而无需重新启动或停止测试。Selendroid 会自动识别新设备。
- 随着 Android API 版本的更新,Selendroid 也支持新的 Android API(从 API 10 到 API 19)。
- Selendroid 还带有一些内置的检查器工具,可帮助您识别被测应用程序的 UI 元素。例如,ID 按钮、文本字段、文本视图……
Selendroid 架构
Selendroid 基于 Android 仪器化框架。Selendroid 测试基于 Selenium Web 驱动程序客户端 API 编写,因此它支持与当前 Selenium 框架的完全集成。
下图描述了 Selendroid 的架构
Selendroid 包含 4 个主要组件
- Web Driver 客户端 – 基于 Selenium 的 Java 客户端库。此库应安装在用于开发测试用例的计算机上。
- Selendroid-Server – 在 Android 设备或模拟器上运行的被测应用程序中的服务器。这是 Selendroid 架构的主要组件。
- Android Driver-App – 一个内置的 Android 驱动程序,Web View 应用程序用于测试移动网络。
- Selendroid-Standalone – 此组件用于安装 Selendroid 服务器和被测应用程序 (AUT)。
Selendroid 入门
您已经了解了 Selendroid 的重要性。现在让我们开始使用 Selendroid。
在使用 Selendroid 进行首次测试之前,应完成 3 个步骤。
设置 Selendroid 环境
Selendroid 可以在 Window、Linux 和 Mac OS 上运行。在本教程中,我们将在 Window 操作系统中设置 Selendroid。
在使用 Selendroid 之前,您需要先安装以下软件包:
- Java SDK(最低 1.6)
您必须接受许可协议并下载 Java 安装程序(根据您的操作系统选择 x64 或 x86)。
像安装普通软件一样下载并安装 Java SDK。
- 最新版本的 Android SDK
- 您的计算机必须至少有一个 Android 虚拟设备 (AVD),或者将一个真实的 Android 设备插入到 PC 中。
- 带依赖项的 Selendroid Standalone、Selendroid Client 和 Selenium Client
- Eclipse 软件
- 设置 JAVA_HOME 和 ANDROID_HOME
步骤 1) 在 Windows 上,右键单击“计算机” -> “属性” -> “高级系统设置”
步骤 2) 显示“系统属性”窗口,选择“高级”选项卡 -> “环境变量”
步骤 3) 显示“环境”窗口,单击“新建” -> 输入变量 ANDROID_HOME,如下所示
变量值是您已安装的 android-sdks 的路径。
找到系统变量 Path -> 编辑 -> 在当前行之后添加以下行
与 ANDROID_HOME 类似,添加新变量 JAVA_HOME,其值如下
该值是您的 Java JDK 安装路径。
步骤 4) 重启您的电脑 -> 完成
如何启动 Selendroid
步骤 1) 获取待测应用程序
您可以使用现有的 Selendroid 测试应用程序来检查 Selendroid 的工作方式(链接到示例待测应用程序)
下载完成后,将此 APK 和上述 Selendroid Standalone jar 文件复制到一个名为“Guru99”的文件夹中。
步骤 2) 启动 Selendroid
在 Windows 上打开终端并导航到在步骤 1 中创建的 Guru99 文件夹。
运行以下命令
输出将显示如下
运行此命令后,Selendroid-standalone HTTP 服务器启动!此服务器的默认端口号为 4444。所有硬件设备以及 Android 虚拟设备都将自动扫描和识别。Selendroid 将识别 Android 目标版本和设备屏幕尺寸。
要检查 Android 目标版本以及设备信息,您可以在浏览器中打开以下 URL:https://:4444/wd/hub/status
。
Selendroid 基本命令
本节为您介绍一些基本的 Selendroid-Standalone 命令行。您可以使用它们来设置 Selendroid 测试环境。
- 设置 Selendroid 端口
Selendroid 的默认端口是 4444。但您可以通过在启动 Selendroid 的命令中添加参数来更改为其他端口。
参数:-port [端口号]
例如
在上面的命令中,5555 是新端口。
因此,检查 Android 目标版本的 URL 更改为:https://:5555/wd/hub/status
。
- 指定被测应用程序(二进制 APK 文件)的位置。Selendroid 通常需要此文件的绝对路径。
参数:-app [文件路径]
例如
在上面的命令中,Selendroid 会根据“C:\Guru99App.apk”自动查找二进制文件,以获取被测应用程序的信息。
检查 URL
https://:4444/wd/hub/status
,您将看到此信息。 - 更改 Selendroid 用于与检测服务器通信的端口。Selendroid 默认使用端口 8080。
参数:-selendroidServerPort [端口号]
示例
端口现已更改为 9000。
- 更改启动模拟器的超时时间。单位是毫秒。
参数:-timeoutEmulatorStart
默认情况下,Selendroid 将等待 300,000 毫秒直到模拟器启动。您可以通过命令将其更改为新的超时时间(200,000 毫秒)。
此时间到期后,如果模拟器无法启动,Selendroid 将抛出异常错误(寻找设备/模拟器时发生错误),然后停止运行。
- 当您在终端上启动 Selendroid 命令时,您会看到屏幕上打印出日志。您可以通过添加以下参数来更改您看到的日志类型。
参数:-logLevel [日志类型]
日志级别值为 ERROR、WARNING、INFO、DEBUG 和 VERBOSE。默认值:ERROR。
例如,要将 Selendroid 设置为仅打印 WARNING 日志,您可以使用此命令。
Selendroid 只会打印 WARNING 日志。
开始您的第一次 Selendroid 测试
本节是使用 Selendroid 创建您的第一个测试脚本的分步指南。
假设我们有一个名为 Guru99App 的 Android 应用程序正在测试中。该应用程序包含一个文本字段和一个名为“Show Text”的按钮。
我们需要使用 Selendroid 执行以下测试用例
测试用例 | 条件 | 预期输出 |
---|---|---|
|
被测应用程序的二进制文件可用
设备已连接到电脑 |
“Text Show here”文本更改为
用户在文本字段中输入的文本 |
步骤 1) 在 Eclipse 中创建一个 Java 项目。
步骤 2) 在 Eclipse 环境中添加 Selenium 和 Selendroid jar 文件。
右键单击 Guru99Test 项目 -> 构建路径 -> 添加外部归档文件
导航到存储 jar 文件的文件夹。
应添加 3 个 jar 文件
- selendroid-client-0.10.0.jar:Selendroid java 客户端库
- selendroid-standalone-0.11.0-with-dependencies:Selendroid 独立服务器库
- selenium-java-2.40.0.jar:Selenium Web Driver 库
全选 -> 选择“打开”将 jar 文件添加到项目中。
步骤 3) 添加上述库后,这些库将被添加到测试项目的“引用库”中。测试人员可以使用这些库的 API 来开发测试程序。
创建包“com.guru.test”并添加 Java 文件“Guru99Test.java”,如下所示:
右键单击 Guru99Test -> 新建 -> 包
在新 Java 包对话框的“名称”字段中键入“com.guru.test” -> “完成”
Eclipse 将在源代码结构中创建如下所示的文件夹和子文件夹列表
步骤 4) 为 Eclipse 安装 TestNG
在 Eclipse 中,帮助 -> 安装新软件,在安装对话框中,单击添加并输入以下内容
- 姓名:TestNG
- 位置:https://github.com/selendroid/selendroid
按“确定” -> “下一步”安装 TestNG。
步骤 5) 将 Guru99App.apk 复制到测试应用的文件夹中。
步骤 6) 获取被测应用程序的 GUI 元素 ID。
假设我们有一个名为 Guru99App.apk 的 APK 文件。按照前面部分描述的步骤,在终端执行命令。
在浏览器中打开以下链接:https://:4444/wd/hub/status
。
显示设备信息,复制 appId 值“com.guru99app:1.0”
步骤 7) 打开 Guru99Test.java 文件(在示例代码中)并进行如下更改:
要使用 Selendroid 创建新的测试会话,您必须以“com.guru99app:1.0”的格式提供应用程序 ID。此应用程序 ID 可以在步骤 6 中识别。如果您没有设置与 Android 设备匹配的应用程序 ID,测试会话将抛出错误并且不会启动。
初始化找到的设备后,Selendroid 创建一个自定义的 selendroid-server 并将其安装在设备上。
Selendroid 还安装被测应用程序并在设备上启动 selendroid-server。
成功初始化测试会话后,测试命令开始在设备上执行。(例如输入文本、按下按钮等)。如果测试附加了测试会话,模拟器将自动停止。
步骤 8) 开始新的测试会话
像步骤 6 一样,在终端上使用以下命令启动 Selendroid 服务器。
Selendroid 服务器启动后,在 Eclipse 中打开示例测试项目 Guru99test,双击 Guru99Test.java 文件中的第 77 行,设置断点 -> 将显示一个点,如下所示:
通过右键单击 Guru99Test 项目 -> 调试方式 -> Testng 测试来启动测试会话。
测试会话将如下启动
步骤 9) 获取被测应用程序 GUI 元素的 ID。
测试会话成功启动后,打开浏览器,导航到 URL https://:4444/inspector
。
您将看到被测应用程序已启动,如下所示。
将鼠标悬停在 AUT 的每个 UI 元素(按钮、文本字段、文本标签)上,每个元素的 ID 将在右侧窗格中高亮显示。
在此步骤之后,您可以获取以上每个 UI 元素的 ID。
- 按钮“显示文本”ID:“btnShow”
- 文本字段 ID:“edtText”
- 标签文本 ID:“txtView”
这些 ID 将在下一步中使用
步骤 10) 像下面这样输入测试程序。
使用 Selendroid 的测试程序包含 3 个部分
设置测试
以下是设置测试的代码,它将为测试会话设置条件。如果发生错误,Selendroid 将抛出异常,测试应用程序将停止。
代码包含注释以解释每个语句。
package com.guru.test; import io.selendroid.SelendroidCapabilities; import io.selendroid.SelendroidConfiguration; import io.selendroid.SelendroidDriver; import io.selendroid.SelendroidLauncher; import io.selendroid.device.DeviceTargetPlatform; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.testng.Assert; import org.testng.annotations.AfterSuite; import org.testng.annotations.BeforeSuite; import org.testng.annotations.Test; /** * @author Guru99 Test App using Selendroid * Application under test: Guru99App * */ public class Guru99Test { //Declare web driver variable private WebDriver driver; /** * Setup the environment before testing * @throws Exception */ @BeforeSuite public void setUp() throws Exception { //Start selendroid-standalone during test SelendroidConfiguration config = new SelendroidConfiguration(); // Add the selendroid-test-app to the standalone server config.addSupportedApp("Guru99App.apk"); //start the standalone server SelendroidLauncher selendroidServer = new SelendroidLauncher(config); selendroidServer.launchSelendroid(); // Create the selendroid capabilities SelendroidCapabilities capa = new SelendroidCapabilities(); // Specify to use selendroid's test app capa.setAut("com.guru99app:1.0"); // Specify to use the Android device API 19 capa.setPlatformVersion(DeviceTargetPlatform.ANDROID19); // Don't request simulator, use real device capa.setEmulator(false); //capa.wait(10000000); // Create instance of Selendroid Driver driver = new SelendroidDriver(capa); }
执行测试
以下是执行测试的代码。代码包含注释。
以下是测试步骤:
- 输入文本“Hello Guru”
- 点击显示文本按钮
- 等待一会儿
- 验证应用是否显示用户在文本字段中输入的文本(例如,显示文本“Hello Guru”)
/** * Start execute the test case * 01. Enter the text "Selendroid" to the textfield * 02. Press OK button * @throws Exception */ @Test public void selendroidTest() throws Exception { // Print the log System.out.print("Start executing test"); // Find the input text field on screen // The id of this text field was get from step 9 WebElement inputField = driver.findElement(By.id("edtText")); // Verify that the text field enabled so user can enter text Assert.assertEquals("true", inputField.getAttribute("enabled")); // Enter a text to text field inputField.sendKeys("Hello Guru"); // click Show Text button // The id of this button was get from step 9 WebElement button = driver.findElement(By.id("btnShow")); button.click(); // Delay time to take effect Thread.sleep(5000); //Find the label "Text Show Here" on screen // The id of this label was get from step 9 WebElement txtView = driver.findElement(By.id("txtView")); //Get the text display on screen String expected = txtView.getText(); // Verify that the text which user enter on text field is same as text display on screen Assert.assertEquals(expected, inputField.getText()); }
完成测试
以下代码将通过停止 Selendroid 驱动程序来完成测试。
/** * Stop the Selendroid driver * */ @AfterSuite public void tearDown() { driver.quit(); }
您可以在本文中包含的示例代码中查看详细信息。
步骤 10) 通过 USB 数据线将 Android 设备连接到 PC。需要注意的点 –
- 请确保设备未配置屏幕锁定。
- 设备必须通过 USB 连接到运行 selendroid-standalone 组件的计算机。
- 设备应至少安装 Android 目标版本 API 10。
步骤 11) 运行测试应用程序:右键单击 Guru99test -> 运行方式 -> TestNG 测试
步骤 10) 脚本开始执行如下:
步骤 12) 测试执行完成后,TestNG 会自动生成测试报告,如下所示:
干得好,您现在已经完成测试了。
摘要
- Selendroid 是一个非常强大的工具,用于测试 Android 原生应用、混合应用以及网络应用。
- 它既可以在真实设备上使用,也可以在模拟器上使用。
- 它还允许您通过在多个设备上运行测试来并行运行测试。
- 整个 Selendroid 套件由四个组件组成
- Web Driver 客户端,
- Selendroid-Server,
- Android 驱动应用
- 独立的 Selendroid
- 要使用 Selendroid,您需要安装 Java JDK、Android SDK 和 Eclipse。