上一篇 - Android 输入中文的实现

经常有用户朋友问到 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

下一篇 - 如何查找界面元素


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