上一篇 - macaca-electron 模块的独立使用

在日常的测试场景中经常会遇到多个驱动混用的情况。例如测试手机 APP 时,需要填写验证码,验证码又需要从某些 PC 端方可获取,还有很多情况需要手机,PC 端联动,我们来举个简单的例子如何来解决此类。

思路

Macaca 支持一个任务中同一端口创建多 session,不同的 session 处理不同 driver 的任务即可。

代码如下:

var _ = require('macaca-utils');
var webdriverClient = require('webdriver-client');

var AndroidChromeOpts = {
  platformName: 'Android',
  browserName: 'Chrome'
};

var ElectronOpts = {
  platformName: 'desktop',
  browserName: 'electron'
};


function initElectron() {
  var electron_wd = webdriverClient(ElectronOpts);
  return electron_wd.initPromiseChain();
}

function initAndroidChrome() {
  var android_chrome_wd = webdriverClient(AndroidChromeOpts);
  return android_chrome_wd.initPromiseChain();
}

describe('macaca mobile sample', function() {

  this.timeout(5 * 60 * 1000);

  var driver2 = initElectron();

  before(function() {
    return driver2
      .initDriver();
  });

  after(function() {
    return driver2
      .quit();
  });

  it('#0 should get url', function() {
    return driver2
      .setWindowSize(800, 600)
      .get('http://www.weibo.com')
      .sleep(5000)
      .elementByCss('input.W_input')
      .sendKeys('达峰的夏天')
      .sleep(3000)
      .elementByCss('[node-type="searchSubmit"]')
      .click()
      .sleep(5000)
      .elementByCss('#pl_weibo_directtop .star_card')
      .text()
      .then(content => {
        var arr = content.split(' ');
        var url = arr[arr.length - 1];
        console.log(`get url: ${url}`);

        const driver1 = initAndroidChrome();
        return driver1
          .initDriver()
          .get(url)
          .sleep(5000);
      });
  });

});

示例

示例中先打开 PC 端页面拿到 url,然后进入 Android 模拟器调用浏览器再次打开移动版。

持续集成

本示例添加了持续集成,可以通过 log 看到执行效果,加深理解。

builds/136067202

本示例源代码:macaca-multi-driver-sample


欢迎讨论,互相学习。

微博: http://weibo.com/xudafeng
Github: https://github.com/xudafeng

下一篇 - Macaca 获取 Android 应用的性能


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