引言

最近在做 iOS UI 自动化脚本,用 appium + java 已经跑起来了,appium 使用的是 wda 引擎,在实际使用中感觉较慢.之前听过 Macaca 这个工具,使用是 xctestwd 引擎.

本次作为环境搭建,记录下入门心得

安装

这里推荐用淘宝的 cnpm 安装,npm 在 mac 上总是安装失败

全局安装

cnpm i macaca-cli -g

安装 iOS driver

cnpm i -g macaca-ios

安装 Android driver

cnpm i macaca-android -g

查看页面元素工具

app-inspector 工具,这个工具可以在 web 上显示页面元素.

官方:https://macacajs.github.io/app-inspector/

安装命令

cnpm install app-inspector -g

目前 Android 可以正常查看元素,iOS 还暂时不可以

问题

这有个天坑,编译的时候报 XCTestWD 中报错

'No such module'Swifter''

解决方案

1.cd /usr/local/lib/node_modules/app-inspector/node_modules/_xctestwd@1.3.31@xctestwd
2.在 Cartfile 文件
github "cezheng/Fuzi" ~> 1.0.0,改成 1.0.0
3.carthage update 下载依赖

启动 app-inspector

app-inspector -u 192.168.56.101:5555

启动 macaca 服务

普通模式

macaca server

详细模式

macaca server --verbose

可以看到 session 日志

maacaca for java

pom

我本地遇到的问题是,jar 包没有下载到本地,目前先手动导入 jar 包替代.

<dependency>
    <groupId>macaca.webdriver.client</groupId>
    <artifactId>macacaclient</artifactId>
    <version>2.0.20</version>
</dependency>

Android desiredCapabilities 设置



/**
     * 设置desiredCapabilities操作
     */
    @Before
    public void setUp() throws Exception {
        Logger logger = Logger.getLogger(getClass());
        JSONObject porps = new JSONObject();
        porps.put("autoAcceptAlerts", true);
        porps.put("platformName", "android"); // android or ios
        porps.put("javascriptEnabled", true);
        porps.put("platform", "ANY");
        porps.put("package","com.xxxx.player");
        porps.put("activity","com.xxxx.business.welcome.WelcomeActivity");
        porps.put("udid","192.168.56.101:5555");
        //porps.put("app", "path/to/app");
        JSONObject desiredCapabilities = new JSONObject();
        desiredCapabilities.put("desiredCapabilities", porps);
        driver.initDriver(desiredCapabilities)

        logger.info("启动app!");
    }


iOS desiredCapabilities 设置

/**
     * 设置desiredCapabilities操作
     */
    @Before
    public void setUp() throws Exception {

        logger = Logger.getLogger(getClass());
        JSONObject porps = new JSONObject();
        //porps.put("autoAcceptAlerts", true);
        porps.put("platformName", "iOS"); // android or ios
        porps.put("javascriptEnabled", true);
        porps.put("platform", "iOS");
        porps.put("bundleId","com.xxxx.xxxx-IOS");
        porps.put("udid","93EAE4C0-70D4-4A9B-A04E-E21E1B53A911");
        porps.put("deviceName","iPhone 6");
        //porps.put("app", "path/to/app");
        JSONObject desiredCapabilities = new JSONObject();
        desiredCapabilities.put("desiredCapabilities", porps);
        driver.initDriver(desiredCapabilities);
        logger.info("启动app!");
    }


API 操作

简单看了常用 api 操作,基本上是和 appium 差不多.应该会 apium 的人,用 macaca 做自动化问题不大

简单列举几个操作

driver.elementsById()
driver.elementsById().cilck()
driver.elementsById().sendKeys();

最后

给我的感受就是搭建环境比 appium 麻烦,不过中文文档和 demo 代码做的都比较好,和 appium 各有千秋.

参考文章

Macaca 环境搭建(iOS+Mac)

https://www.jianshu.com/p/eda698c96db8

Macaca 之使用中存在的各种坑

https://blog.csdn.net/yxys01/article/details/73920702


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