当 运行 Nightwatch.js 测试时,如何获取当前 运行 测试的浏览器名称?

When running Nightwatch.js test how can I get the name of browser currently running the tests?

情况:我们正在使用 Nightwatch
在多个浏览器中进行 运行 测试 (通过 Saucelabs;一切在 Saucelabs 上运行良好)。

Desired:我们想知道测试是哪个浏览器currently 运行 以便我们可以保存包含浏览器名称的屏幕截图。

是否可以确定 运行 测试的是哪个浏览器?

很简单,运行一个Nightwatch测试时,传入browserclient)参数,eg:

module.exports = {
  'Demo test GitHub': function (browser) {
    console.log(browser.options); // this will output the browser details
    browser
      .url('http://www.github.com/dwyl')   // visit the url
      .waitForElementVisible('body'); // wait for the body to be rendered
      .assert.containsText('body', 'do what you love') // assert contains
      .saveScreenshot('dwyl_github.png')
      .end();
  }
};

browser 对象包含具有以下形式的 options 对象:

{ screenshots: true,
  screenshotsPath: './node_modules/nightwatch/screenshots/1.0.20/',
  skip_testcases_on_fail: true,
  log_screenshot_data: true,
  username: 'thisguy',
  accessKey: 'notimportant',
  desiredCapabilities: 
   { browserName: 'internet explorer',
     javascriptEnabled: true,
     acceptSslCerts: true,
     platform: 'Windows 10',
     version: '11.0',
     name: 'Github' } }

所以我们写了一个小帮助函数来将浏览器的名称格式化为我们可以包含在屏幕截图文件名中的字符串:

function userAgent(browser) { // see: https://git.io/vobdn
  var a = browser.options.desiredCapabilities;
  return (a.platform + '~' + a.browserName + '~' + a.version).replace(/ /g, '');
}

然后用作:

module.exports = {
  'Demo test GitHub': function (browser) {
    console.log(browser.options); // this will output the browser details
    browser
      .url('http://www.github.com/dwyl')   // visit the url
      .waitForElementVisible('body'); // wait for the body to be rendered
      .assert.containsText('body', 'do what you love') // assert contains
      .saveScreenshot(userAgent(browser) + '_dwyl_github.png')
      .end();
  }
};

示例文件名:Windows10~internetexplorer~11.0~dwyl_github.png

使用 ~ ("tilde") 作为单词分隔符的原因是我们稍后可以在屏幕截图查看器中 split 这个角色。 请参阅:https://github.com/dwyl/learn-nightwatch 了解更多详情。