移動端混合型App(hybrid app)自動化測試選型與實踐(轉)

原文 http://www.cnblogs.com/zzzhuxf/p/3860647.html

背景

公司產品的業務已經發展到了移動端,開發選型已經結束,決定使用phonegap作移動端的web應用開發平臺。考慮到業務的複雜與多樣,移動端的測試一樣須要自動化。在網上看了不少,最終鎖定了3個移動端測試工具:Selendroid,Appium,Robotium。之因此選擇他們3個,是由於團隊已經有了以Selenium爲基礎的測試框架,而這三個工具與Selenium能夠說一脈相承。html

目標

基於phonegap的混合型app(hybrid app)web應用移動端自動化測試java

選型過程

Selendroid(放棄)android

放棄Selendroid的緣由是在按照官網教程操做後,運行測試時,報錯,拿着報錯在網上查詢,結果都沒有解決。資料少的可憐,後來看到Appium中集成了Selendroid後,果斷放棄。ios

Robotium(放棄)web

其實Robotium在嘗試的過程當中是最順利的一個,功能也強大。app

但其只支持Android設備,並且其以Android Test工程測試的方式很難集成到公司團隊已有的框架中,因此也放棄了。框架

可是仍然會關注其發展,社區活躍,功可以精深有不少能夠借鑑的地方。在Appium的研究過程當中也起了很大的做用。maven

Appium(選中)工具

Appium支持ios和android設備,支持hybrid app,集成了Selendroid,易於集成到公司現有框架中,社區正在造成,文檔資料也在豐富中。測試

在嘗試的過程當中雖有曲折,但最後也順利實現了。

混合型app以Appium搭建自動化測試開發環境

Appium

官方網址:http://appium.io/

中文社區:http://testerhome.com/

下載地址(由testerhome社區提供):http://pan.baidu.com/s/1jGvAISu#dir

 

1. 下載最新版本AppiumServer 1.2.0,解壓後,進入目錄下找到Appium.exe,運行便可,此程序做爲Appnium與被測設備之間通信的服務端

出現以下界面說明啓動成功

 

2. 將真機鏈接到PC端

 

3. 我使用Eclipse做爲開發IDE,創建一個maven工程appium-demo,在pom中引用了公司框架中的Selenium核心工程,這樣能夠省去添加Selenium依賴的過程

,同時在maven的中央庫中找到Appium包,並引用

Appium的maven引用

GroupId:io.appium

ArtifactId:java-client

Version:1.5.0

 

4. 創建工程後,就能夠寫測試代碼了,在工程中創建一個Junit Test類Test1.java,代碼以下:

package com.example.hello;

 

import io.appium.java_client.AppiumDriver;

import java.io.File;

import java.net.MalformedURLException;

import java.net.URL;

import java.util.Set;

import junit.framework.TestCase;

import org.junit.After;

import org.junit.Before;

import org.junit.Test;

import org.junit.runner.RunWith;

import org.junit.runners.BlockJUnit4ClassRunner;

import org.openqa.selenium.By;

import org.openqa.selenium.JavascriptExecutor;

import org.openqa.selenium.WebElement;

import org.openqa.selenium.remote.DesiredCapabilities;

 

@RunWith(BlockJUnit4ClassRunner.class)

public class Test1 extends TestCase {

 

  private AppiumDriver driver;

 

  @Before

  public void start() throws MalformedURLException {

    // 使用phonegap打包的hybrid app路徑

    String apppath = "D:\\Work\\codes\\hands\\hands-hello-phonegap\\platforms\\android\\bin\\HelloWorld.apk";

 

    // 初始化AppniumDriver

    DesiredCapabilities capabilities = new DesiredCapabilities();

    capabilities.setCapability("deviceName", "NX403A");// 真機測試android設備

    capabilities.setCapability("platformVersion", "4.2.2");// 真機android版本爲4.2.2

    capabilities.setCapability("platformName", "Android");// 真機爲android系統

    capabilities.setCapability("app", apppath);// 被測app apk包的位置

    capabilities.setCapability("appPackage", "com.example.hello");// 被測appActivity類所在包

    capabilities.setCapability("appActivity", ".HelloWorld");// 被測appActivity

    capabilities.setCapability("automationName", "selendroid");// 由於真機爲4.2版本,因此使用selendroid

    // http://127.0.0.1:4723/wd/hub地址就是AppiumServer的地址

    driver = new AppiumDriver(new URL("http://127.0.0.1:4723/wd/hub"),

        capabilities);

  }

 

  @Test

  public void main() {

    try {

      Set contextNames = driver.getContextHandles();

      for (String contextName : contextNames) {

        System.out.println(contextName); // 用於返回被測appNATIVE_APP仍是WEBVIEW,若是二者都有就是混合型App

      }

 

      Thread.sleep(5000);// 等它一會

 

      driver.context("WEBVIEW_0");// appium切換到webview模式以便查找web元素

      WebElement text_baidusearch = driver.findElement(By.id("word"));

      text_baidusearch.click();// 點擊百度的搜索輸入框(web元素)

 

     

      JavascriptExecutor jse = (JavascriptExecutor) driver;

      jse.executeScript("document.getElementByIdx_x('word').value='輸入法'");

 

      Thread.sleep(10000);// 等一會觀察下效果

    } catch (InterruptedException e) {

      e.printStackTrace();

    }

  }

 

  @After

  public void stop() {

    driver.quit();

  }

 

}

工程結構以下

 移動端混合型App(hybrid <wbr>app)自動化測試選型與實踐(轉)

5. 保持被測設備爲解鎖狀態,雖然Appium有一個unlock的功能,但有時不起做用,因此最好仍是將鎖屏關閉。運行Test1.java,獲得以下結果

 

相關文章
相關標籤/搜索