经常有用户朋友问到 Macaca 是否支持多机,多流程等问题,本文刚好做个演示。
在设计之初,Macaca 就已经考虑了如何支持多设备同时运行。与Macaca 实现混合流程任务这篇介绍的原理不同,多机使用多个 Macaca 命令运行即可。
这里通过一段简单的代码实现多机聊天:
const wd = webdriverClient(options);
wd.addPromiseChainMethod('chat', function() {
var _historyNum = 0;
var _send = (reject, num) => {
return this
.native()
.waitForElementByClassName('android.widget.EditText')
.sendKeys(`${data.getRandom()}\n`)
.sleep(1000)
.then(() => {
_historyNum += num;
reject();
});
};
return _.retry(() => {
return new Promise((resolve, reject) => {
this
.webview()
.source()
.then(html => {
const json = xml2map.tojson(html);
const li = json.html.body.div[0].div[1].ul.li;
if (li) {
const historyNum = li.length || 1;
if (historyNum > _historyNum) {
return _send(reject, 2);
}
reject();
} else {
_send(reject, 1);
}
});
});
}, 100, Infinity);
});
const driver = wd.initPromiseChain();
before(function() {
return driver
.initDriver();
});
after(function() {
return driver
//.quit();
});
it('should chat now haha~', function() {
return driver
.chat();
});
示例源码请见:macaca-multi-task-sample
不同流程通过不同的端口驱动设备,所以在运行前指定就好了,就这么简单。
$ MACACA_SERVER_PORT=3457 MACACA_CHROMEDRIVER_PORT=9516 macaca run -p 3457
演示代码一并放出。
相信以后应该不会有人问 Macaca 是不是支持多机了,哈哈~,另外,你身边如果有程序员朋友请不要伤害他们,因为他们忙到得靠程序自动跟你聊天啦、
欢迎讨论,互相学习。
微博: http://weibo.com/xudafeng
Github: https://github.com/xudafeng