Mobile Testing 简明教程

Mobile Testing - Selendroid Framework

Selendroid 是一个用于测试安卓原生应用程序和混合应用程序的测试自动化框架。Selendroid 测试使用 Selenium Webdriver 客户端 API 编写。

Benefits of Selendroid

  1. 与 JSON Wire Protocol/Selenium 3 Ready 完全兼容。

  2. 无需修改被测应用即可对其进行自动化。

  3. 使用内置 Android 驱动器 webview 应用测试移动网络。

  4. 用于自动化原生或混合应用的相同概念。

  5. 可以通过不同的定位器类型找到 UI 元素。

  6. 支持手势:高级用户交互 API。

  7. 现有模拟器会自动启动。

  8. Selendroid 支持硬件设备的热插拔。

  9. 作为节点完全集成到 Selenium Grid 中,用于扩展和并行测试。

  10. 支持多个 Android 目标 API(10 到 19)。

  11. 内置检查器,用于简化测试用例开发。

  12. Selendroid 可以在运行时用您自己的扩展进行扩展。

  13. Selendroid 可以同时与多个 Android 设备(模拟器或硬件设备)进行交互。

Drawbacks of Selendroid

本工具的缺点是它相当慢,在低于 4GB RAM 的某些机器上无法使用。

How to Use Selendroid

Step 1 - 使用 Robotium 的前提条件是 Java SDK(最低 1.6)。如果您系统中尚未安装 Java,请按照以下步骤操作。

  1. Oracle JavaSE 下载 JDK 和 JRE

  2. Accept license agreement.

  3. Install JDK and JRE.

  4. 设置环境变量,如下面的屏幕截图所示。

environment variable

Step 2 − 从 SDK Android 下载 Android Studio(受文件大小影响,下载将花费一定时间)。

  1. 双击 exe 并运行安装程序。

  2. 使用所有默认选项继续。

  3. Set the ANDROID_HOME.

Step 3 − 从 Selendroid 下载 Selenium jar 文件和测试应用程序

  1. 下载 Selenium jar 文件和测试应用程序。

  2. 将其放置在任何文件夹中,如 D:\SelendroidJars。

Step 4 − 带有 USB 数据线的实体设备。

  1. 确保将设备通过 USB 数据线连接到工作站。

  2. 确保启用了 USB 调试模式(在设置 → 开发者选项中)。

Test an App with Selendroid

要使用 Selendroid 测试应用程序,请按照以下步骤操作 −

Step 1 − 安装 Eclipse。

Step 2 − 创建 Java 项目。

Step 3 − 将下载的 Selendroid jar 文件添加到新创建的项目中。

Step 4 − 将下载的 Selenium jar 文件添加到新创建的项目中。

Step 5 − 在 Eclipse 中配置 testNG。

Step 6 − 使用 USB 数据线将移动设备与系统连接起来。从设置中的开发者选项中设置 USB 调试模式。

Step 7 − 运行 Selendroid 服务器。打开命令提示符并编写以下代码,然后按 Enter:

java -jar selendroid-standalone-0.17.0-with-dependencies.jar -app selendroid-test-app-0.17.0.apk

Selendroid-standalone 将在端口 4444 上启动一个 http 服务器,并将扫描用户已创建的全部 Android 虚拟设备 (avd)(~/.android/avd/)。

打开 Web 浏览器并导航到: http://localhost:4444/wd/hub/status

Step 8 − 创建 Java 项目;在构建路径中添加 Selendroid Standalone 库、Selenium jar 以及 JUnit 库。

selenium master

Step 9 − 在 Java 项目中创建包。

Step 10 − 在软件包下创建一个类,并编写以下代码。

package selTest;

import io.selendroid.SelendroidDriver;
import io.selendroid.common.SelendroidCapabilities;
import io.selendroid.standalone.SelendroidConfiguration;
import io.selendroid.standalone.SelendroidLauncher;

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;

public class SelendroidTest {

   private WebDriver driver ;

   @BeforeSuite
   public void setUp() throws Exception {
      SelendroidConfiguration config = new SelendroidConfiguration();
      config.addSupportedApp("selendroid-test-app-0.9.0.apk");
      SelendroidLauncher selendroidServer = new SelendroidLauncher(config);
      selendroidServer.launchSelendroid();

      SelendroidCapabilities caps = new
         SelendroidCapabilities("io.selendroid.testapp:0.9.0");
      driver = new SelendroidDriver(caps);
   }

   @Test
   public void selendroidTest() throws Exception {
      WebElement inputField = driver.findElement(By.id("my_text_field"));
      Assert.assertEquals("true", inputField.getAttribute("enabled"));
      inputField.sendKeys("Selendroid");

      Assert.assertEquals("Selendroid", inputField.getText());

      WebElement button = driver.findElement(By.id("buttonTest"));
      button.click();

      button = driver.findElement(By.id("button2"));
      button.click();

      Thread.sleep(5000);

      button = driver.findElement(By.id("startUserRegistration"));
      button.click();

      Thread.sleep(10000);

      WebElement element = driver.findElement(By.id("label_username"));

      String text = element.getText();
      System.out.println(text);
      element = driver.findElement(By.id("inputUsername"));
      element.sendKeys("bob");

      element = driver.findElement(By.id("inputEmail"));
      element.sendKeys("test@gmail.com");

      element = driver.findElement(By.id("inputPassword"));
      element.clear();
      element.sendKeys("test1233");

      element = driver.findElement(By.id("inputName"));
      element.clear();
      element.sendKeys("My Name ");

      element = driver.findElement(By.id("input_preferedProgrammingLanguage"));
      element.click();

      element = driver.findElement(By.id("text1"));
      element.click();

      element = driver.findElement(By.id("input_adds"));
      element.click();

      element = driver.findElement(By.id("btnRegisterUser"));
      element.click();

      element = driver.findElement(By.id("buttonRegisterUser"));
      element.click();
   }

   @AfterSuite
   public void tearDown(){
      driver.quit();
   }
}

Step 11 − 使用 testNG 运行配置运行类。