angular-phonecat教程:Chrome Canary下的protractor.js意外行为

时间:2014-08-14 17:06:49

标签: node.js angularjs google-chrome

我正在进行设置,以便在OS X下使用Chrome Canary作为测试浏览器运行angular-phonecat教程。

我得到了一切正常,除非我输入npm run protractor e2e测试在所有浏览器的SAFARI上运行,尽管事实上我已将Chrome Canary指定为protractor-conf.js文件中的浏览器名称。这是代码:

exports.config = {
  allScriptsTimeout: 11000,

  specs: [
       'e2e/*.js'
 ],

 capabilities: {
   'browserName': 'ChromeCanary',
   'ChromeOptions': {
     'binary': '/Applications/Google\ Chrome\ Canary.app/Contents/MacOS/Google\ Chrome\ Canary'
 }
},

  chromeOnly: false,

  baseUrl: 'http://localhost:8000/',

  framework: 'jasmine',

  jasmineNodeOpts: {
    defaultTimeoutInterval: 30000
  }
};

当我设置chromeOnly: true时,测试会返回ELIFECYCLE错误。我觉得这很尴尬,因为在Karma配置文件中指定了相同的浏览器名称,并且单元测试按照预期在Canary上运行。这是karma.conf.js代码:

module.exports = function(config){
  config.set({

    basePath : '../',

    files : [
      'app/bower_components/angular/angular.js',
      'app/bower_components/angular-route/angular-route.js',
      'app/bower_components/angular-resource/angular-resource.js',
      'app/bower_components/angular-animate/angular-animate.js',
      'app/bower_components/angular-mocks/angular-mocks.js',
      'app/js/**/*.js',
      'test/unit/**/*.js'
    ],

    autoWatch : true,

    frameworks: ['jasmine'],

    browsers : ['ChromeCanary'],

    plugins : [
            'karma-chrome-launcher',
            'karma-firefox-launcher',
            'karma-jasmine'
            ],

    junitReporter : {
      outputFile: 'test_out/unit.xml',
      suite: 'unit'
    }

  });
};

两个问题:

  1. 可能导致此行为的原因是什么?
  2. 我还能修补什么才能让e2e测试在Canary上运行?

1 个答案:

答案 0 :(得分:3)

我只需重复使用Chrome浏览器名称,但提供备用二进制路径,就可以使用Chrome Canary。这是适用于上述示例的代码段。

capabilities: {
    'browserName': 'Chrome',
    'ChromeOptions': {
      'binary': '/Applications/Google\ Chrome\ Canary.app/Contents/MacOS/Google\ Chrome\ Canary'
    }

可能更容易将其抽象为单独的browsers.js文件,因此您可以像这样使用canary和chrome。

exports.chrome = {
  name: 'Chrome',
  browserName: 'chrome',
  chromeOptions: {
    'args': [
      'incognito',
      'disable-extensions',
      'start-maximized',
      'enable-crash-reporter-for-testing'
    ]
  }
};

exports.chromeCanary = {
  name: 'ChromeCanary',
  browserName: 'chrome',
  chromeOptions: {
    'binary': 'C:/Users/gattridg/AppData/Local/Google/Chrome SxS/Application/chrome.exe',
    'args': [
      'incognito',
      'disable-extensions',
      'start-maximized',
      'enable-crash-reporter-for-testing'
    ]
  }
};

然后在你的protractor.conf.js

  var browsers = require('./browsers'),

    multiCapabilities: [
      browsers.chrome
      browsers.chromeCanary

    ],