基于WebDriverAgent + Cucumber的自动化测试框架

        前段时间由于所在项目需要对移动设备进行测试,所以就有了去研究针对移动设备自动化测试工具想法。通过对目前比较主流的第三方的测试框架进行搜索发现,现在最主流的测试框架无外乎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

      同时在上图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("//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

图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的小伙伴致以特别感谢。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容