Macaca win10 环境 Eclipse macaca java 使用记

老马 · 2016年08月22日 · 最后由 清华 回复于 2017年08月08日 · 3249 次阅读

一 先配置好 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 里 提取了一些公共 可复用部分

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 22 条回复 时间 点赞
老马 [该话题已被删除] 中提及了此贴 08月26日 12:07

为什么跑 Junit Test 的时候,报 500 错误【Response content:Internal Server Error】

上面问题解决了,但是跑安卓的脚本的时候,总是会改变输入法为 ultf8,导致无法输入。

显示 utf8 input method

用真机测试怎么总是唤不起来 chrome 呢?只能唤起手机自带的浏览器

@rikui 通过 packagename 唤起

提示没有 saveScreenshot 这个方法呀

#7 楼 @tt33025515


macaca.webdriver.client
macacaclient
1.0.12

你的 macacaclient 版本太老了 修改到 1.0.12 版本 自己关注下官方的更新

macaca 的 android 驱动就是装不上
真崩溃啊啊啊啊!!!!

老马 #14 · 2016年09月22日 Author

#10 楼 @tt33025515
用 cnpm 安装

#11 楼 @harsayer npm install -g cnpm --registry=https://registry.npm.taobao.org
cnpm i macaca-cli -g
cnpm i macaca-android -g
这个吗

老马 #12 · 2016年09月22日 Author

#12 楼 @tt33025515

是的 自己研究下 cnpm 的配置 别和以前的 npm 冲突了

#13 楼 @harsayer 也装不了,有 error

#13 楼 @harsayer 无论是 npm 还是 cnpm,error 都提示是 build 失败 uiautomator-client 有问题

#15 楼 @tt33025515
1 那你就 先全部卸载一遍用 cnpm 或 npm uninstall *** -g 把 macaca-cli macaca 那些驱动全部卸载干净
2 npm cache clean 或 cnpm cache clean 清理干净 , 还有那个 C:\Users\your name\AppData\Local\Temp 目录 npm 相关都删掉
3 在照着帖子 重新安装 用 cnpm 安装 你最好完全照着这个来 https://testerhome.com/topics/5483

npm cache npm prefix npm registry 先配置好 再安装

#6 楼 @xdf 这个 jsonObject 对象里面可以放哪些参数? 哪里有具体说明呀?

#17 楼 @rikui

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

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

这么大的字你看不到吗?

@fengmiss 跑 android 用例,Junit Test 的时候,报 500 错误【Response content:Internal Server Error】? 你是怎么解决的呀?

#10 楼 @tt33025515 据说配置 ant 后 安装 macaca-android 就正常了

已打赏 6.66,多谢楼主。

你好。pom.xml 依赖已经 import 了 ,
macacaclients 找不到这是为什么?

feng 回复

报 500 错误【Response content:Internal Server Error】? 你是怎么解决的呀?

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册