Selendroid 初学者教程(含示例)

您是否曾经开发过 Android 应用程序并将其发布到 Google Play?如果您收到以下用户评论,您会怎么做?

Selendroid Tutorial

当您将应用发布到 Google Play 时,必须对其进行充分测试以避免潜在的 bug。在发布应用之前,应该执行大量的测试场景。为了节省测试工作,您需要一个测试工具。Android 应用的最佳测试工具之一是 Selendroid。

什么是 Selendroid?

Selendroid 是一个用于多种移动应用程序的测试自动化框架:原生混合 Android 应用以及移动网络应用。

What is Selendroid

您可以使用 Selenium 2 客户端 API 编写测试。因为 Selendroid 仍然重用现有的 Selenium 网络基础设施。

Selendroid 是一款强大的测试工具。它可以在模拟器和真实设备上使用。

What is Selendroid

为什么我们需要 Selendroid?

Selendroid 是一款很棒的测试工具。但您可能仍然怀疑它的用处。

Why do we need Selendroid

本节将介绍 Selendroid 的重要功能,以回答您为什么需要 Selendroid 的问题。

Why do we need 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 Architecture

Selendroid 包含 4 个主要组件

Selendroid Architecture

  • Web Driver 客户端 – 基于 Selenium 的 Java 客户端库。此库应安装在用于开发测试用例的计算机上。
  • Selendroid-Server – 在 Android 设备或模拟器上运行的被测应用程序中的服务器。这是 Selendroid 架构的主要组件。
  • Android Driver-App – 一个内置的 Android 驱动程序,Web View 应用程序用于测试移动网络。
  • Selendroid-Standalone – 此组件用于安装 Selendroid 服务器和被测应用程序 (AUT)。

Selendroid 入门

您已经了解了 Selendroid 的重要性。现在让我们开始使用 Selendroid。

在使用 Selendroid 进行首次测试之前,应完成 3 个步骤。

Getting started with Selendroid

设置 Selendroid 环境

Selendroid 可以在 Window、Linux 和 Mac OS 上运行。在本教程中,我们将在 Window 操作系统中设置 Selendroid。

在使用 Selendroid 之前,您需要先安装以下软件包:

  • Java SDK(最低 1.6)

    您必须接受许可协议并下载 Java 安装程序(根据您的操作系统选择 x64 或 x86)。

    Setting up a Selendroid Environment

    像安装普通软件一样下载并安装 Java SDK。

  • 最新版本的 Android SDK
  • 您的计算机必须至少有一个 Android 虚拟设备 (AVD),或者将一个真实的 Android 设备插入到 PC 中。
  • 带依赖项的 Selendroid StandaloneSelendroid ClientSelenium Client
  • Eclipse 软件
  • 设置 JAVA_HOME 和 ANDROID_HOME

    步骤 1) 在 Windows 上,右键单击“计算机” -> “属性” -> “高级系统设置”

    Setting up a Selendroid Environment

    步骤 2) 显示“系统属性”窗口,选择“高级”选项卡 -> “环境变量”

    Setting up a Selendroid Environment

    步骤 3) 显示“环境”窗口,单击“新建” -> 输入变量 ANDROID_HOME,如下所示

    Setting up a Selendroid Environment

    变量值是您已安装的 android-sdks 的路径。

    找到系统变量 Path -> 编辑 -> 在当前行之后添加以下行

    Setting up a Selendroid Environment

    Setting up a Selendroid Environment

    与 ANDROID_HOME 类似,添加新变量 JAVA_HOME,其值如下

    Setting up a Selendroid Environment

    该值是您的 Java JDK 安装路径。

    步骤 4) 重启您的电脑 -> 完成

如何启动 Selendroid

步骤 1) 获取待测应用程序

您可以使用现有的 Selendroid 测试应用程序来检查 Selendroid 的工作方式(链接到示例待测应用程序)

下载完成后,将此 APK 和上述 Selendroid Standalone jar 文件复制到一个名为“Guru99”的文件夹中。

步骤 2) 启动 Selendroid

在 Windows 上打开终端并导航到在步骤 1 中创建的 Guru99 文件夹。

运行以下命令

Launch Selendroid

输出将显示如下

Launch Selendroid

运行此命令后,Selendroid-standalone HTTP 服务器启动!此服务器的默认端口号为 4444。所有硬件设备以及 Android 虚拟设备都将自动扫描和识别。Selendroid 将识别 Android 目标版本和设备屏幕尺寸。

要检查 Android 目标版本以及设备信息,您可以在浏览器中打开以下 URL:https://:4444/wd/hub/status

Launch Selendroid

Selendroid 基本命令

本节为您介绍一些基本的 Selendroid-Standalone 命令行。您可以使用它们来设置 Selendroid 测试环境。

  1. 设置 Selendroid 端口

    Selendroid 的默认端口是 4444。但您可以通过在启动 Selendroid 的命令中添加参数来更改为其他端口。

    参数:-port [端口号]

    例如

    Selendroid Basic Command

    在上面的命令中,5555 是新端口。

因此,检查 Android 目标版本的 URL 更改为:https://:5555/wd/hub/status

  1. 指定被测应用程序(二进制 APK 文件)的位置。Selendroid 通常需要此文件的绝对路径。

    参数:-app [文件路径]

    例如

    Selendroid Basic Command

    在上面的命令中,Selendroid 会根据“C:\Guru99App.apk”自动查找二进制文件,以获取被测应用程序的信息。

    检查 URL https://:4444/wd/hub/status,您将看到此信息。

    Selendroid Basic Command

  2. 更改 Selendroid 用于与检测服务器通信的端口。Selendroid 默认使用端口 8080。

    参数:-selendroidServerPort [端口号]

    示例

    Selendroid Basic Command

    端口现已更改为 9000。

  3. 更改启动模拟器的超时时间。单位是毫秒。

    参数:-timeoutEmulatorStart

    默认情况下,Selendroid 将等待 300,000 毫秒直到模拟器启动。您可以通过命令将其更改为新的超时时间(200,000 毫秒)。

    Selendroid Basic Command

    此时间到期后,如果模拟器无法启动,Selendroid 将抛出异常错误(寻找设备/模拟器时发生错误),然后停止运行。

  4. 当您在终端上启动 Selendroid 命令时,您会看到屏幕上打印出日志。您可以通过添加以下参数来更改您看到的日志类型。

    参数:-logLevel [日志类型]

    日志级别值为 ERROR、WARNING、INFO、DEBUG 和 VERBOSE。默认值:ERROR。

    例如,要将 Selendroid 设置为仅打印 WARNING 日志,您可以使用此命令。

    Selendroid Basic Command

    Selendroid 只会打印 WARNING 日志。

开始您的第一次 Selendroid 测试

本节是使用 Selendroid 创建您的第一个测试脚本的分步指南。

假设我们有一个名为 Guru99App 的 Android 应用程序正在测试中。该应用程序包含一个文本字段和一个名为“Show Text”的按钮。

在此处下载 APK

First Test with Selendroid

我们需要使用 Selendroid 执行以下测试用例

测试用例 条件 预期输出
  1. 启动应用程序
  2. 在文本字段中输入文本“Guru99 Test
  3. 按下“显示文本”按钮
被测应用程序的二进制文件可用

设备已连接到电脑

“Text Show here”文本更改为

用户在文本字段中输入的文本

步骤 1) 在 Eclipse 中创建一个 Java 项目。

步骤 2) 在 Eclipse 环境中添加 Selenium 和 Selendroid jar 文件。

右键单击 Guru99Test 项目 -> 构建路径 -> 添加外部归档文件

First Test with Selendroid

导航到存储 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 文件添加到项目中。

First Test with Selendroid

步骤 3) 添加上述库后,这些库将被添加到测试项目的“引用库”中。测试人员可以使用这些库的 API 来开发测试程序。

创建包“com.guru.test”并添加 Java 文件“Guru99Test.java”,如下所示:

右键单击 Guru99Test -> 新建 ->

First Test with Selendroid

在新 Java 包对话框的“名称”字段中键入“com.guru.test” -> “完成”

First Test with Selendroid

Eclipse 将在源代码结构中创建如下所示的文件夹和子文件夹列表

First Test with Selendroid

步骤 4) 为 Eclipse 安装 TestNG

在 Eclipse 中,帮助 -> 安装新软件,在安装对话框中,单击添加并输入以下内容

按“确定” -> “下一步”安装 TestNG。

First Test with Selendroid

步骤 5) 将 Guru99App.apk 复制到测试应用的文件夹中。

First Test with Selendroid

步骤 6) 获取被测应用程序的 GUI 元素 ID。

假设我们有一个名为 Guru99App.apk 的 APK 文件。按照前面部分描述的步骤,在终端执行命令。

First Test with Selendroid

在浏览器中打开以下链接:https://:4444/wd/hub/status

显示设备信息,复制 appId 值“com.guru99app:1.0”

First Test with Selendroid

步骤 7) 打开 Guru99Test.java 文件(在示例代码中)并进行如下更改:

First Test with Selendroid

要使用 Selendroid 创建新的测试会话,您必须以“com.guru99app:1.0”的格式提供应用程序 ID。此应用程序 ID 可以在步骤 6 中识别。如果您没有设置与 Android 设备匹配的应用程序 ID,测试会话将抛出错误并且不会启动。

初始化找到的设备后,Selendroid 创建一个自定义的 selendroid-server 并将其安装在设备上。

Selendroid 还安装被测应用程序并在设备上启动 selendroid-server。

成功初始化测试会话后,测试命令开始在设备上执行。(例如输入文本、按下按钮等)。如果测试附加了测试会话,模拟器将自动停止。

步骤 8) 开始新的测试会话

像步骤 6 一样,在终端上使用以下命令启动 Selendroid 服务器。

First Test with Selendroid

Selendroid 服务器启动后,在 Eclipse 中打开示例测试项目 Guru99test,双击 Guru99Test.java 文件中的第 77 行,设置断点 -> 将显示一个点,如下所示:

First Test with Selendroid

通过右键单击 Guru99Test 项目 -> 调试方式 -> Testng 测试来启动测试会话。

测试会话将如下启动

First Test with Selendroid

步骤 9) 获取被测应用程序 GUI 元素的 ID。

测试会话成功启动后,打开浏览器,导航到 URL https://:4444/inspector

您将看到被测应用程序已启动,如下所示。

First Test with Selendroid

将鼠标悬停在 AUT 的每个 UI 元素(按钮、文本字段、文本标签)上,每个元素的 ID 将在右侧窗格中高亮显示。

First Test with Selendroid

在此步骤之后,您可以获取以上每个 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);
					       
		    }
		

执行测试

以下是执行测试的代码。代码包含注释。

以下是测试步骤:

  1. 输入文本“Hello Guru”
  2. 点击显示文本按钮
  3. 等待一会儿
  4. 验证应用是否显示用户在文本字段中输入的文本(例如,显示文本“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 测试

First Test with Selendroid

步骤 10) 脚本开始执行如下:

First Test with Selendroid

步骤 12) 测试执行完成后,TestNG 会自动生成测试报告,如下所示:

First Test with Selendroid

First Test with Selendroid

干得好,您现在已经完成测试了。

摘要

  • Selendroid 是一个非常强大的工具,用于测试 Android 原生应用、混合应用以及网络应用。
  • 它既可以在真实设备上使用,也可以在模拟器上使用。
  • 它还允许您通过在多个设备上运行测试来并行运行测试。
  • 整个 Selendroid 套件由四个组件组成
    • Web Driver 客户端,
    • Selendroid-Server,
    • Android 驱动应用
    • 独立的 Selendroid
  • 要使用 Selendroid,您需要安装 Java JDK、Android SDK 和 Eclipse。