最近在做 iOS UI 自动化脚本,用 appium + java 已经跑起来了,appium 使用的是 wda 引擎,在实际使用中感觉较慢.之前听过 Macaca 这个工具,使用是 xctestwd 引擎.
本次作为环境搭建,记录下入门心得
这里推荐用淘宝的 cnpm 安装,npm 在 mac 上总是安装失败
cnpm i macaca-cli -g
cnpm i -g macaca-ios
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 -u 192.168.56.101:5555
macaca server
macaca server --verbose
可以看到 session 日志
我本地遇到的问题是,jar 包没有下载到本地,目前先手动导入 jar 包替代.
<dependency>
<groupId>macaca.webdriver.client</groupId>
<artifactId>macacaclient</artifactId>
<version>2.0.20</version>
</dependency>
/**
* 设置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!");
}
/**
* 设置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 操作,基本上是和 appium 差不多.应该会 apium 的人,用 macaca 做自动化问题不大
简单列举几个操作
driver.elementsById()
driver.elementsById().cilck()
driver.elementsById().sendKeys();
给我的感受就是搭建环境比 appium 麻烦,不过中文文档和 demo 代码做的都比较好,和 appium 各有千秋.
https://www.jianshu.com/p/eda698c96db8