? ? ? ? 前段時間由于所在項目需要對移動設備進行測試,所以就有了去研究針對移動設備自動化測試工具想法。通過對目前比較主流的第三方的測試框架進行搜索發現,現在最主流的測試框架無外乎Appium 和 WebDriverAgent。最終選擇了后者作為我們的測試框架,具體原因如下:
1.同時支持模擬器和真機。
2.實現了大部分的WebDriver spec。
3.支持USB,設備不需要聯網。
4.提供了Inspector,有了這個就可以方便的找到界面上的元素。
5.和Xcode協同工作,讓測試用例的編寫和執行更為方便。
6.可以輕松的實現模擬用戶使用流程。
7.支持原生和非原生App。
? ? ? 較之Appium而言,WebDriverAgent最大的短板是只支持IOS,不支持Android設備的測試。但Appium對跨平臺的支持的問題多也是眾所周知的, 誰用誰知道^_^。
? ? ? 上面說了這么多,下面就讓我們說說怎么搭建測試環境。由于我們使用Xcode來啟動webDriverAgent,所以以下準備工作必不可少。
1.下載Xcode ,最好是8.0以上的。
2.下載webDriverAgent 到本地。
3.下載Jwda,這里面有一些比較common的action在里面。
4.下載安裝FBSimulatorControl,這個不是必須但是建議下載,因為后面會用到。
? ? ? 用Xcode打開webDriverAgent. 找到WebDriverAgentRunner->UITestingUITests.m,運行testRunner,然后就可以看到如下圖1所示內容,simulator啟動成功。
? ? ? 同時在上圖1里面可以看到ServerURL信息,通過這個URL加上一些Status或者Inspector信息,我們就能很直觀的看到一些simulator上的元素以及狀態信息。
http://10.205.21.123:8100/status ? ?/*查看狀態信息*/
http://10.205.21.123:8100/Inspector /*查看Inspector*/
? ? ? 接下來用Intellij或者Eclipse打開Jwda工程(以下是以Instllij為例)。在DeviceConfig文件中可以看到待測試設備的信息,以及一些配置信息。也包括上面提到的FBSimulatorControl的信息,如果沒有安裝編譯時會報錯。接下來按如下步驟操作
1.在pom.xml 中添加下面的cucumber依賴.
<dependency>
? ? ? ?<groupId>info.cukes</groupId>
? ? ? <artifactId>cucumber-core</artifactId>
? ? ? <version>1.2.3</version>
</dependency>
<dependency>
? ? ?<groupId>info.cukes</groupId>
? ? ?<artifactId>cucumber-java</artifactId>
? ? ? <version>1.2.3</version>
</dependency>
<dependency>
? ? ?<groupId>info.cukes</groupId>
? ? <artifactId>cucumber-junit</artifactId>
? ? <version>1.2.3</version>
</dependency>
待新的依賴加載完成后,在Java下面創建文件夾
1.common存放一些通用的類文件,例如執行文件。
2.stepDefinations 顧名思義,主要是存放一些定義的一些執行步驟。
packagestepDefinations;
importcom.google.gson.JsonObject;
importcommon.JWda;
importcucumber.api.java.Before;
importcucumber.api.java.en.Given;
importorg.junit.After;
public class Demo {
public static JWda Instance;
@Before
public void stepInit(){
Instance = new JWda();
Instance.cleanKeychain("com.apple.mobilesafari");
Instance.openApp("7p","com.apple.mobilesafari");
}
@After
public void closeBrowser(){
// ? ?Instance.CloseBrowser();
}
@Given("Open baidu from safari")
public void Open_baidu_from_safari() throws Exception{
JsonObject objAddress1 = Instance.findElementsByXpath("http://XCUIElementTypeOther[@label='Address']");
Instance.input(objAddress1.get("ELEMENT").getAsString(),"https://www.baidu.com");
JsonObject objAddress2 = Instance.findElementsByClass("XCUIElementTypeButton","Go");
Instance.tap(objAddress2.get("ELEMENT").getAsString());
}
3.feature 文件夾,用以存放測試用例。
圖2所示的執行文件中,features是用來指定測試用例的存放位置信息;format用來配置打印測試報告格式及存儲位置;glue告訴編譯器執行步驟的存儲路徑。
? ? ? 至此,環境搭建工作就結束了,后面就是如何創建用例,我們將會在下一篇文章中講解。各位看官可以通過鏈接下載我的Demo . 需要說明的幾處修改:
1.運行之前需要根據本地文件存放路徑對DeviceConfig文件中的信息進行修改。
2.通過fbsimctl list查詢到各種不同型號的simulator的串碼,例如
CNlyguo:phantomjs lyguo$ fbsimctl list
F443C728-3D0F-4253-B7B7-C73F316DEC98 | iPad Pro (12.9 inch) | Shutdown | iPad Pro (12.9-inch) | iOS 10.3 | x86_64
523BF692-3252-41F1-B956-BE9C391A0526 | iPad Air 2 | Shutdown | iPad Air 2 | iOS 10.3 | x86_64
24B252BC-6FB6-4A30-8E67-62B6DDDF9FD2 | iPhone 7 Plus | Booted | iPhone 7 Plus | iOS 10.3 | x86_64
在此對提供Jwda的小伙伴致以特別感謝。