[Selenium] IOS 之 ios-driver


從 Selenium 的官方文檔來看,推薦用戶使用 ios-driver 或 appium 而不是官方發布的 iPone Driver. 他們的地址分別是:

http://ios-driver.github.io/ios-driver

http://appium.io/

 

ios-driver 基於2種不同的框架構建起來,一種是針對原生 app 進行構建,還一種針對 Web 的 app 或者混合式 app 進行構建。鑒於2中不同 app 的設計原理,需要滿足不同的開發環境需求。

1. 原生 app

由於使用 UIAutomation 框架,所以需要確保 iOS SDK 的版本大於5.0.檢查方法如下:

$ xcodebuild -showsdks

執行結果:

OS X SDKs:

  OS X 10.8      -sdk macosx10.8

iOS X SDKs:

  iOS X 7.0      -sdk iphoneox7.0

iOS Simulator SDKs:

  Simulator -iOS7.0  -sdk iphonesimulator7.0

1.1 ios-driver 的 Web 實例

首先,進入 ios-driver 官網下載 ios-server-0.6.5-jar-with-dependencies.jar

在第一次運行 ios-driver 之前,應確保一下目錄和文件的權限更新:

$ sudo chmod a +rw /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.0.sdk/Applications

$ sudo chmod a +rw /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.0.sdk/Applications/MobileSafari.app

然后更新 MobileSafari Info.plist 的權限以允許 ios-driver 編輯它。執行命令如下:
$ sudo chmod 666 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.0.sdk/Applications/MobileSafari.app/Info.plist

在啟動  ios-driver 之前,請確保系統上安裝的 Java 版本至少為1.7.0版本:
$ java -version

java version "1.7.0_04"

接着進入剛下載的 ios-server-0.6.5-jar-with-dependencies.jar 的路徑,命令如下:

$ java -jar  ios-server-0.6.5-jar-with-dependencies.jar -simulators

...... test can access the server at http://0.0.0.0:5555/wd/hub/devices/all ...

默認端口號為5555,可在瀏覽器中訪問如下地址,如果看到類似JSON 對象的信息,則說明前述操作成功:

http://localhost:5555/wd/hub/status

記下來以百度首頁為例進行闡述

注意:在 Eclipse 中要添加之前下載的 ios-server-0.6.5-jar-with-dependencies.jar 文件,因為需要如下庫的支持;

org.uiautomation.ios.IOSCapabilities

示例代碼:

package com.learningselenium.ios;

 

import junit.framework.TestCase;

import java.net.URL;

import org.openqa.selenium.remote.RemoteWebDriver;

import org.openqa.selenium.remote.DesiredCapabilities;

import org.uiautomation.ios.IOSCapabilities;

 

public class testiOSBaidu extends TestCase{

  public void testBaidu() throws Exception{

    //設置DesiredCapabilities,其中IOSCapabilities設置為iphone,如果程序運行在iPad模擬器上,可設置為ipad。

    //參數Safari 表示待測試程序的bundle name,因為這里是測試 Web 頁面,默認是用 Safari 打開

    DesiredCapabilities safari = IOSCapabilities.iphone("Safari");

    RemoteWebDriver driver = new RemoteWebDriver(new URL("http://localhost:5555/wd/hub"), safari );

 

    driver.get("http://www.baidu.com");

    driver.close();

  }

}

1.2 ios-driver 的 Native app 實例

接下來以蘋果官網的示例程序 InternationalMountains 為例,對原生 app 的測試過程進行講解,示例代碼下載地址:

https://developer.apple.com/legacy/library/samplecode/internationalMountains/introduction/intro.html

請確保app 程序和 UIAutomation已關聯,方法如下:

在 Xcode 的菜單中選擇 Product->Profile,並選擇 Automation。該設定會構建 app 並啟動 Instruments

將 Instruments 關閉,並在 Xcode 中選擇 Window->Organizer->Projects,可看到 InternationalMountains.app 文件所在位置為:

~/Library/Developer/Xcode/DerivedData/InternationalMountainseordguimrxknwoaynobkvpirkacs/Build/Products/Debugiphonesimulator/InternationalMountains.app

接着進入剛下載的 ios-server-0.6.5-jar-with-dependencies.jar 的路徑,執行如下命令:

$ java -jar  ios-server-0.6.5-jar-with-dependencies.jar -aut

~/Library/Developer/Xcode/DerivedData/InternationalMountainseordguimrxknwoaynobkvpirkacs/Build/Products/Debugiphonesimulator/InternationalMountains.app -port 4444

接下來確認 ios-driver 啟動成功並可訪問該 app,可通過瀏覽器訪問如下地址,如果看到類似JSON 對象的信息,說明前述操作成功:

http://localhost:4444/wd/htb/status

如果是在模擬器中運行app,則需要在啟動 ios-driver 時使用 -simulators 參數,執行命令及打印信息:

$ java -jar  ios-server-0.6.5-jar-with-dependencies.jar -aut

~/Library/Developer/Xcode/DerivedData/InternationalMountainseordguimrxknwoaynobkvpirkacs/Build/Products/Debugiphonesimulator/InternationalMountains.app -port 4444 -simulators 

... test can access the server at http://0.0.0.0:4444/wd/hub ...

應確保已經通過了 Xcode 啟動了模擬器,否則需要通過瀏覽器查看 ios-driver 的啟動狀態是否正常

針對 InternationalMountains 的測試用例代碼如下:

package com.learningselenium.ios;

 

import java.net.URL;

import jave.util.List;

import java.io.File;

import junit.framework.TestCase;

 

import org.openqa.selenium.By;

import org.openqa.selenium.WebElement;

import org.openqa.selenium.TakesScreenshot;

import org.openqa.selenium.OutputType;

import org.openqa.selenium.remote.RemoteWebDriver;

import org.openqa.selenium.remote.DesiredCapabilities;

import org.openqa.selenium.remote.Augmenter;

import org.uiautomation.ios.IOSCapabilities;

public class testiOSInternationalMountains extends TestCase{

  public void testInternationalMountains() throws Exception{

    DesiredCapabilities nativeAppCap= IOSCapabilities.iphone("InternationalMountains", "1.1");

    RemoteWebDriver driver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), nativeAppCap);

 

    List<WebElement> cells = driver.findElement(By.className("UIATableCell"));

    assertEquals(9, cells.size());

 

    WebElement first = cells.get(0);  //操作列表中第一個元素

    first.click();

    //截屏操作和操作頁面元素

    TaksScreenshot screen = (TaksScreenshot ) new Augmenter().augment(driver);

    File ss = new File("screenshot.png");

    screen.getScreenshotAs(OutputType.FILE).renameTo(ss);

    System.out.println("screenshot take:" + ss.getAbsolutePath());

    By selector = By.xpath("//UIAStaticText[contains(@name, ‘climbed’)]");

    WebElement text = driver.findElement(selector);

    System.out.println(text.getAttribute("name"));

    driver.quit();

  }

}

如果需要在真實設備上運行app,則需要在啟動 ios-driver 時使用 -beta 參數,執行命令:

$ java -jar  ios-server-0.6.5-jar-with-dependencies.jar -beta -port 4444

 1.3 ios-driver 的源碼編譯

前置條件為系統已安裝 Git,JDK7 和 apache-maven。然后在 /etc/profile 中添加如下命令:

export JAVA_HOME = /Library/Java/JavaVirtualMachines/jdk1.7.0_xx.jdk/Contents/Home

export M2_HOME=/Users/{YourAccountName}/Desktop/apache-maven-3.1.x

export PATH=$JAVA_HOME/bin:$PATH

export M2=¥M2_HOME/bin

export PATH=$M2:$PATH

通過如下地址並使用 Git 獲取源碼后解包:

https://github.com/ios-driver/ios-driver

在解壓后的源碼根目錄執行如下命令:

sudo mvn clean package 

sudo mvn clean install

如果編譯成成,會看到如下日志:

。。。

[INFO]BUILD SUCCESS

...

如果不需要運行測試用例,則加上如下參數即可

-DskipTests

如果在編譯過程中,出現如下錯誤信息,說明系統中安裝了 JDK1.6 和 JDK1.7 兩個不同版本:

[warning]...Detected JDK Version:1.6...is not in the allowed range 1.7

解決方案:在用戶根目錄創建 .mavenrc 文件並添加如下內容:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_xx.jdk/Contents/Home

2. Web app 或混合式 app

針對這種方式的 app,需要用到遠程 Webkit 的調試協議,並且 iOS 的版本要求為6+,Safari 的版本要求為6+。如果無法滿足以上條件,也可繼續測試原生 app,但無法在 Safari 上運行 Web 頁面,也不能使用 DOM 選擇器來與 UIWebviews 交互。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM