Macaca [基于 Node.js 的自动化测试-Macaca] - 原来程序员都是这么聊天的

达峰的夏天 · 2016年07月08日 · 最后由 bingbingsyr 回复于 2019年10月12日 · 2968 次阅读
本帖已被设为精华帖!

上一篇 - 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

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

共收到 11 条回复 时间 点赞
达峰的夏天 [该话题已被删除] 中提及了此贴 07月08日 17:28

这个是需要掌握好时机么。输入文字的时间····

#2 楼 @ws328686288 互相等待就好

达峰的夏天 [该话题已被删除] 中提及了此贴 07月08日 19:25

xdf 好高产呀

思寒_seveniruby 将本帖设为了精华贴 07月09日 07:31

加精理由: 很 cool 的功能. 代码示例也很清晰.

#7 楼 @seveniruby 多谢思寒大大

#8 楼 @xdf 不要激动, 以后所有的加精都要注明理由. 这是管理员前阵子的约定.

ios 多机并行可实现么?

#9 楼 @raythan iOS 多机的实践最近在弄,比较麻烦,但是有办法做到

这个要是突破就好了,一台 mac 机对应一台设备成本太高了

达峰的夏天 [该话题已被删除] 中提及了此贴 08月06日 02:15
adfghzhang 使用 Macaca 进行 Android 多设备测试 中提及了此贴 12月08日 00:02

@xdf
iOS 多机现在支持了吗?

iOS 多机现在支持了吗?

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