移动测试 - Selendroid 框架

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

Selendroid 的优势

  • 完全兼容 JSON Wire Protocol/Selenium 3 Ready。

  • 无需修改被测应用即可实现自动化。

  • 使用内置 Android 驱动程序 webview 应用测试移动网络。

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

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

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

  • 现有模拟器会自动启动。

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

  • 完整作为节点集成到 Selenium Grid 中,以便进行扩展和并行测试。

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

  • 内置 Inspector,简化测试用例开发。

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

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

Selendroid 的缺点

此工具的缺点是速度很慢,在某些 RAM 小于 4GB 的机器上无法使用。

如何使用 Selendroid

步骤 1 − 使用 Robotium 的先决条件是 Java SDK(最低 1.6)。如果您的系统上没有安装 Java,请按照以下步骤操作。

  • Oracle JavaSE 下载 JDK 和 JRE>

  • 接受许可协议。

  • 安装 JDK 和 JRE。

  • 按照以下屏幕截图所示设置环境变量。

环境变量

步骤 2 −从 SDK Android 下载 Android Studio(由于文件大小,下载过程需要一些时间)。

  • 双击 exe 并运行安装程序。
  • 使用所有默认选项继续。
  • 设置 ANDROID_HOME。

步骤 3 −从 Selendroid

下载 Selenium jar 文件并测试应用程序
  • 下载 selenium jar 文件并测试应用程序。
  • 将其放入任何文件夹,即 D:\SelendroidJars。

步骤 4 − 带有 USB 电缆的物理设备。

  • 确保设备已通过 USB 电缆连接到工作站。

  • 确保已启用 USB 调试模式(在设置 → 开发人员选项下)。

使用 Selendroid 测试应用程序

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

步骤 1 − 安装 Eclipse。

步骤 2 − 创建一个 Java 项目。

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

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

步骤 5 − 在 Eclipse 中配置 testNG。

步骤 6 − 使用 USB 数据线将移动设备与系统连接。从设置下的开发人员选项中设置 USB 调试模式。

步骤 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

步骤 8 − 创建一个 Java 项目;在构建路径中添加 Selendroid Standalone 库、Selenium jar 和 JUnit 库。

Selenium Master

步骤 9 − 在 Java 项目下创建包。

步骤 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(); 
   } 
}

步骤 11 − 使用 testNG 运行配置运行该类。