一 先配置好 Eclipse 及其相关的 maven 插件和 git 插件等和 android 开发环境

当然还有 win10 环境下的 macaca-cli 和各种驱动 等 macaca 执行环境,请参考win10 环境折腾 macaca 总结记
此处省略,自行度娘 谷哥.许久之前就配置好了,这次是直接拿来用的.

二 Eclipse 导入 wd.java Maven 项目

1 Git 仓库的 clone a git repository 项目到本地,再导入已存在的 Maven 项目

参考 https://hacpai.com/article/1358680207381

2 或者直接下载项目的 zip 包到本地解压,再导入已存在的 Maven 项目

下载地址 https://github.com/macacajs/wd.java

其他 win 环境下类似的创建 macaca java 项目的方式你也可以参考ubuntu16.04 Eclipse 尝试 Macaca Java 记
基本都类似。

三 Eclipse 执行 Maven Test

然后选中项目 macacaclient 右键 Run as ->Maven Test. 这时 Eclipse Console 控制台会输出.
省略,参考ubuntu16.04 Eclipse 尝试 Macaca Java 记 2.1 节
这步只是把 Maven 源代码项目中的原项目里自带的 SampleTest.java 跑通了,测试整个运行环境是否正确而已。

四 改造自己的 H5Web 项目

参考 https://github.com/macacajs/macaca-test-sample-java/blob/master/src/test/java/macaca/client/SampleTest.java
先在 macaca.client 下右键 new-》java class 起名为 H5Web
如图:

H5Web.java 修改为:

package macaca.client;

import static org.hamcrest.Matchers.containsString;

//import org.apache.log4j.Logger;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

import com.alibaba.fastjson.JSONObject;
import macaca.client.MacacaClient;

public class H5Web {

    MacacaClient driver = new MacacaClient();

    @Before
    public void setUp() throws Exception {
        JSONObject porps = new JSONObject();
        porps.put("autoAcceptAlerts", true);
        porps.put("javascriptEnabled", true);

        porps.put("platform", "ANY");
        porps.put("platformName", "desktop");
        porps.put("version", "");
        porps.put("browserName", "chrome");

        JSONObject desiredCapabilities = new JSONObject();
        desiredCapabilities.put("desiredCapabilities", porps);
        driver.initDriver(desiredCapabilities).setWindowSize(480, 800).get("http://m.aicai.com/m/login.do?agentId=1&vt=5");
    }

    @Test
    public void test_case_1() throws Exception {
        driver
            .elementById("jq_account")
            .sendKeys("h5test0808a")
            .sleep(1000)

            .elementById("jq_password")
            .sendKeys("0808a123")
            .sleep(1000)

            .elementById("submit")
            .click();


        String html = driver.source();
        Assert.assertThat(html, containsString("请输入验证码"));

        driver.takeScreenshot()
              .saveScreenshot("D:\\macaca\\Screenshot\\H5Web.png");

    }


    @After
    public void tearDown() throws Exception {
        driver.quit();
    }
}

修改到直到没有语法 或其他错误为止。

当然 跑之前,你得开一 cmd 命令行终端执行 macaca server --verbose
还有 当然 你本机要安装好 chrome 浏览器。

然后选中 H5Web.java 右键 选择 Run As->Junit Test 这样便可以用 Junit 单独跑 H5Web.java 了。

五 改造自己的 H5Mobile 项目

类似同上
先在 macaca.client 下右键 new-》java class 起名为 H5Mobile

H5Mobile.java 修改为:

package macaca.client;

import static org.hamcrest.Matchers.containsString;

//import org.apache.log4j.Logger;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

import com.alibaba.fastjson.JSONObject;
import macaca.client.MacacaClient;

public class H5Mobile {

    MacacaClient driver = new MacacaClient();

    @Before
    public void setUp() throws Exception {
        JSONObject porps = new JSONObject();
        porps.put("autoAcceptAlerts", true);
        porps.put("javascriptEnabled", true);

        porps.put("platform", "Android");
        porps.put("platformName", "Android");
        porps.put("version", "");
        porps.put("browserName", "chrome");

        JSONObject desiredCapabilities = new JSONObject();
        desiredCapabilities.put("desiredCapabilities", porps);
        driver.initDriver(desiredCapabilities).setWindowSize(480, 800);
    }

    @Test
    public void test_case_1() throws Exception {
        driver
            .get("http://m.aicai.com/m/login.do?agentId=1&vt=5")
            .elementById("jq_account")
            .sendKeys("h5test0808a")
            .sleep(1000)

            .elementById("jq_password")
            .sendKeys("0808a123")
            .sleep(1000)

            .elementById("submit")
            .click();

        String html = driver.source();
        Assert.assertThat(html, containsString("请输入验证码"));

        driver.takeScreenshot()
              .saveScreenshot("D:\\macaca\\Screenshot\\H5Mobile.png");

    }


    @After
    public void tearDown() throws Exception {
        driver.quit();
    }
}

跑之前,你得开一 cmd 命令行终端执行 macaca server --verbose 上一步已经开了的话就不用再开两个了。
还有 当然 你得先启动一个安卓模拟器,同样 我还是启动的我的 Genymotion 模拟器。

C:\Users\cmd>adb devices -l
List of devices attached
192.168.236.101:5555   device product:vbox86p model:Samsung_Galaxy_S6___5_1_0___API_22___1440x2560 device:vbox86p

然后选中 H5Mobile.java 右键 选择 Run As->Junit Test 这样便可以用 Junit 单独跑 H5Mobile.java 了。

如图

怎么样 是不是 很简单呢 其他的参考 wd.java API 文档实现自己项目的 UI 自动化吧。

六 mvn 命令行执行指定脚本

如果你是参考 maven pom 和 settings 独立创建本地 macaca 项目

我先复制 SampleTest.java 过来到 D:\workspace\Macaca\uiautotest\src\test\java\uiauto
那么你可以 cmd 命令行
D:\workspace\Macaca\uiautotest>mvn test
日志略 也可以检测是否 跑的通 SampleTest.java BUILD SUCCESS

然后你就可以指定执行自己创建 java 测试类
D:\workspace\Macaca\uiautotest>mvn test -Dtest=uiauto.H5web

同理如果是本文 Eclipse git 仓库的项目方式,道理类似 那就是目录 D:\workspace\git\wd.java 下执行命令 任君选择。

已经说过了 Eclipse git 仓库方式或 git clone 方式的项目,好处就是可以调试 debug wd.java 提供的源码或改造源码,进而更打造适合本公司项目相结合的 UI 自动化。

maven 的 pom 和 settings 设置 创建个人的 macaca java 项目方式,如果你不需要调试 debug wd.java 的源码,只想利用 macaca java 来编写 macaca 自动化脚本,这种创建和维护方式是适合你的。

DesiredCapabilities 的话 请参考
https://github.com/SeleniumHQ/selenium/wiki/DesiredCapabilities

官方已添加 https://macacajs.github.io/macaca/desired-caps.html 可以参考这个了

FAQ:

12016年9月2日补充修正

由于之前对 maven 了解并不深入,所以在本文第四 第五小节,给自己挖了一个坑.坑是什么呢?
那就是,当我到
cmd@TR:~/workspace/MacacaDev/uiautotest$ mvn test 的时候发现永远都只有 SampleTest.java 被 BUILD SUCCESS 那项目下的那些 H5Web H5Mobile AndroidAcp 呢?

然后我就去搜索 mvn test 执行多个测试类,搜到了

http://blog.csdn.net/rainnnbow/article/details/50424150
约定优于配置
maven 的 default 生命周期的 test 阶段与 maven-surefire-plugin 插件的 test 插件目标内置绑定。默认情况下,maven-surefire-plugin 的 test 目标会自动执行测试源码路径(默认:src/test/java)下的所有符合一组命名规则的测试类。该命名规则如下:

  1. */Test.java 任何子目录下所有命名以 Test 开头的 java 类
  2. **/*Test.java 任何子目录下所有命名以 Test 结尾的 java 类
  3. **/*TestCase.java 任何子目录下所有命名以 TestCase 结尾的 java 类

然后我便明白了,选个最简单影响最小的方式.
重新删掉老的,新建都改成带 *Test.java 的 , 再执行 mvn test 4 个脚本共 5 个 test case 全部成功

更多信息请参考 wiki 汇总

小马的 macaca 入门指引合集

更多的关于 wd.java 样例学习可参考 wd.java 的作者的样例:

https://github.com/Yinxl/bootstrap
这个例子很好 common 里 提取了一些公共 可复用部分


↙↙↙阅读原文可查看相关链接,并与作者交流