Macaca ubuntu16.04 Eclipse Macaca Java 测试 Android APP 记

老马 · 2016年08月23日 · 最后由 huang 回复于 2016年09月30日 · 2692 次阅读

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

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

二 Eclipse 导入 wd.java Maven 项目

使用 git clone 来 down 项目在后续才是最方便的.

(如果你熟悉 maven 的 pom 和 setting 设置 也完全可以创建维护个人的 macaca java 项目 这块还在研究中) 已补充 ubuntu16.04 Eclipse 使用 Maven pom 和 settings 创建本地 macaca java 项目记

cmd@TR:~/workspace/git$ git clone https://github.com/macacajs/wd.java.git
正克隆到 'wd.java'...
remote: Counting objects: 977, done.
remote: Compressing objects: 100% (221/221), done.
remote: Total 977 (delta 174), reused 0 (delta 0), pack-reused 750
接收对象中: 100% (977/977), 294.54 KiB | 343.00 KiB/s, 完成.
处理 delta 中: 100% (691/691), 完成.
检查连接... 完成。
cmd@TR:~/workspace/git$ cd wd.java/
cmd@TR:~/workspace/git/wd.java$ ls -al
总用量 44
drwxrwxr-x 5 cmd cmd 4096 8月  23 13:55 .
drwxrwxrwx 3 cmd cmd 4096 8月  23 13:55 ..
drwxrwxr-x 4 cmd cmd 4096 8月  23 13:55 doc
drwxrwxr-x 8 cmd cmd 4096 8月  23 13:55 .git
-rw-rw-r-- 1 cmd cmd  100 8月  23 13:55 .gitignore
-rw-rw-r-- 1 cmd cmd 1100 8月  23 13:55 LICENSE
-rw-rw-r-- 1 cmd cmd 1312 8月  23 13:55 pom.xml
-rw-rw-r-- 1 cmd cmd  591 8月  23 13:55 README.md
-rw-rw-r-- 1 cmd cmd 1074 8月  23 13:55 settings.xml
drwxrwxr-x 4 cmd cmd 4096 8月  23 13:55 src
-rw-rw-r-- 1 cmd cmd  114 8月  23 13:55 .travis.yml
cmd@TR:~/workspace/git/wd.java$ git pull
Already up-to-date.
cmd@TR:~/workspace/git/wd.java$ mvn -s settings.xml clean install

日志略

会看到 [INFO] BUILD SUCCESS 说明 wd.java 项目部署成功.

然后再打开 Eclipse 导入 /home/cmd/workspace/git/wd.java/ 已存在的 Maven 项目.

三 Eclipse 中编辑修改 SampleTest.java

参考官方示例 https://macacajs.github.io/macaca/java.html
https://github.com/macacajs/macaca-test-sample-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 SampleTest {

    MacacaClient driver = new MacacaClient();

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

      //porps.put("deviceName", "iPhone 6s"); //ios 需要指定设备名
        porps.put("platformName", "Android"); // Android or ios
        porps.put("version", ""); //系统版本 ios需要指定系统版本

      //porps.put("udid", "your udid"); //ios udid唯一设备识别符
      //porps.put("bundleId", "zx.ios-app-bootstrap"); //ios bundleId App应用标识符

        porps.put("app", "/home/cmd/App/***.apk");
        //porps.put("package", "com.***.***");//appPackage 启动包名  
       // porps.put("activity", ".***");//appActivity 启动类名

        JSONObject desiredCapabilities = new JSONObject();
        desiredCapabilities.put("desiredCapabilities", porps);
        driver.initDriver(desiredCapabilities);

    }

    @Test
    public void test_case_1() throws Exception {
        System.out.println("test case #1 Login");

        driver
            .elementById("com.acp.aicaitencent:id/tvBottomTab4")
            .click()
            .sleep(5000)

            .elementById("com.acp.aicaitencent:id/layoutLogin")
            .click()
            .sleep(5000)

            .elementById("com.acp.aicaitencent:id/etUserName")
            .sendKeys("******")
            .sleep(5000)

            .elementById("com.acp.aicaitencent:id/etPwd")
            .sendKeys("********")
            .sleep(5000)

            .elementById("com.acp.aicaitencent:id/tvLogin")
            .click()
            .sleep(5000);

                   driver.takeScreenshot()
                .saveScreenshot("/home/cmd/macaca/AndroidAcp.png");
    }


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

四 执行脚本

当然还是要先开一终端跑 macaca server --verbose 再启动安卓模拟器。

1 可以直接 Eclipse 中选中 SampleTest.java 右键 Run As->Junit Test

2 也可以到 git clone 下来的 wd.java 项目下执行 mvn test

五 mvn test 指定运行项目下的单元测试类

1 Eclipse 下的 macacaclient 项目如图

2 指定运行 H5Mobile

先 cd 到~/workspace/git/wd.java 工程项目下
再 cmd@TR:~/workspace/git/wd.java$ mvn test -Dtest=macaca.client.H5Mobile
如图

其他 mvn test 命令行使用可以参考帮助 mvn test --help

更多信息请参考 wiki 汇总

小马的 macaca 入门指引合集

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

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

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 10 条回复 时间 点赞
老马 #12 · 2016年08月23日 Author

https://testerhome.com/topics/5754
该作者也可以参考下.
我通过

porps.put("package", "com.***.main");//appPackage   
porps.put("activity", ".***");//aappActivity 

的方式 发现并不可以 .不知道为什么,理论上应该是可以的 要么是我没找对包名和启动类名.要么是哪里没弄对.大家也可以试下这种方式.

重新利用 adb logcat 找了下 包和启动类名 替换后是可以的

11楼 已删除

android 的自动化测试的话必须要用模拟器或者真机吗,要是必须用模拟器一般用什么模拟器啊,原本以为是运行 macaca run 机会自动调出一个模拟器的东西来运行 app 的操作@harsayer

执行 mvn test :提示 Connect to localhost:3456 [localhost/127.0.0.1, localhost/0:0:0:0:0:0:0:1] failed: Connection refused。 执行 的是 porps.put("platformName", "desktop"); 这个是我本地的 host 导致的吗? 我谷歌了 没有什么好的解决方案

#4 楼 @cxf macaca server --verbose 你没跑 仔细看文章 应该没有漏什么

已解决,qqq。。。。嘿嘿,把那句加粗 @!~

老马 [该话题已被删除] 中提及了此贴 08月26日 12:07

@cxf 执行 mvn test 报的那个异常是怎么解决的呢?!!

@harsayer 执行 macaca server --verbose 命令

index.js:17:12 [master] pid:7034 webdriver server start with config:
{ port: 3456,
verbose: true,
ip: '192.168.239.136',
host: 'perfor-HP-Compaq-Pro-6380-MT',
loaded_time: '2016-09-27 11:05:17' }
middlewares.js:17:10 [master] pid:7034 base middlewares attached
router.js:108:10 [master] pid:7034 router set
webdriver sdk launched
fs.js:60
throw err; // Forgot a callback but don't know where? Use NODE_DEBUG=fs
^
Error: EACCES: permission denied, open '/opt/nodejs/lib/node_modules/macaca-cli/node_modules/webdriver-server/logs/digest-2016_09_27.log'
at Error (native)

老马 #10 · 2016年09月27日 Author

#9 楼 @huangejuan

Error: EACCES: permission denied, open '/opt/nodejs/lib/node_modules/macaca-cli/node_modules/webdriver-server/logs/digest-2016_09_27.log'
at Error (native)

这句你的 macaca-cli 的权限设置有问题. 查看下 nodejs 的目录权限设置 最好都设置成当前用户和用户组.
https://testerhome.com/topics/5509 这里有提 需要你注意下目录权限问题的. 你完全照着执行一般是没有问题的.

throw err; // Forgot a callback but don't know where? Use NODE_DEBUG=fs 这个错 我帮不了你 你自己没安装对

建议你先检查修复下权限问题 再执行 如果还报错

重新安装下 macaca-cli 或 安装个 npm-check 检查更新工具来更新 macaca-cli 到最新版 1.1.4

@harsayer O(∩_∩) O 谢谢。重装了 macaca-cli 依然报错了!

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