【问题标题】:how can Parametrize protractor-config file for different browsers and test suites如何为不同的浏览器和测试套件参数化量角器配置文件
【发布时间】:2016-05-11 21:03:40
【问题描述】:

我正在通过命令 npm run e2e 运行我的量角器测试

我想要一种方法,如果我通过npm run e2e firefox,那么我的测试将在 Firefox 浏览器上执行。

或者如果我运行 npm run e2e chrome 那么它应该在 chrome 上运行

如果我同时通过npm run e2e firefox chrome,那么我的测试应该在两个浏览器上并行运行。

是否可以参数化量角器配置文件?

同样,如果我可以通过命令传递测试套件名称,它应该只执行该特定测试套件下的测试。

这是我的配置文件,这是我想要实现的:

`//var HtmlReporter = require('protractor-html-screenshot-reporter');

exports.config = {

allScriptsTimeout: 30000,
//Add parameters for browser names
params:{
  pass: {
      browserName : 'chrome',
      testSuitName : 'e2e/TestSuites/_BVT/*.js',
  }
 },  
suites: {    
//Define here List of Sanity Test Scenarios:
  BVT : testSuitName,   
}, 
// configure multiple browsers to run tests
multiCapabilities: [
 shardTestFiles: true,
 maxInstances: 2   
{'browserName': browserName}
],
baseUrl: 'http://mytestUrl/',
 framework: 'jasmine2',
jasmineNodeOpts: {
 defaultTimeoutInterval: 30000
},  
onPrepare: function() {  
var jasmineReporters = require('jasmine-reporters');
browser.driver.manage().window().maximize();
return browser.getProcessedConfig().then(function(config) {   
  var browserName = config.capabilities.browserName;
  var junitReporter = new jasmineReporters.JUnitXmlReporter({
         consolidateAll: true,
         savePath: 'tests/test-results',            
         filePrefix: browserName + '-xmloutput',
         modifySuiteName: function(generatedSuiteName, suite) {             
             return browserName + '.' + generatedSuiteName;
         }              
     });
     jasmine.getEnv().addReporter(junitReporter);
  });    
}, 
resultJsonOutputFile: 'tests/test-results/output.json'    
};`

不胜感激。
提前致谢。

【问题讨论】:

  • 您是否在您的规范文件中尝试过capabilities: { 'browserName': 'chrome' },?这将允许您选择您的浏览器。
  • 是的,我确实尝试过,但我想参数化 browserName : $param 值,以便我可以从命令行传递这个值,并且配置文件将采用 chrome、firefox 或 IE 的这个值..跨度>
  • 你能看看这个链接stackoverflow.com/questions/23135649/…和referenceConf.js链接github.com/angular/protractor/blob/master/docs/referenceConf.js你可以使用参数来做到这一点
  • @MohamedNAOUALI 这显示了如何将用户名、密码等参数传递给配置并在我的测试中使用它。但我希望我的浏览器值和测试套件值被参数化。我希望我的配置文件看起来像:功能:{'browserName':param1},和套件:{Test1:param2},当我执行npm run e2e 'chrome' 'logintest.js' 命令时,我的logintest.js 应该在chrome 浏览器上执行。有没有可能做到这一点?
  • 对此有什么想法吗?

标签: protractor


【解决方案1】:

我知道这篇文章现在有点老了,但这个解决方案可能会帮助遇到类似问题的人。

使用多个配置文件,每个浏览器类型一个,设置一个基本配置文件,并将其添加到其他每个配置文件中,然后为每个配置文件创建一个 npm 脚本。不需要参数,一切都很好。

所以基本配置(称为“protractor_base.js”之类的东西)看起来像:

exports.config = {
  seleniumAddress: 'http://localhost:4444/wd/hub',
  rootElement: '[ng-app]',

  allScriptsTimeout: 60000,

  framework: 'jasmine',

  specs: ['example-spec.js']
};

然后你的其他配置(即“protractor_chrome.conf.js”)看起来像:

protractor = require('./protractor_base.js');
var config = protractor.config;

config.capabilities: {
  'browserName': 'chrome'
};


exports.config = config;

然后您可以指定一个多浏览器配置,只是一个 chrome 等。

【讨论】:

    【解决方案2】:
    --capabilities.chromeOptions.args=headless --capabilities.chromeOptions.args=disable-gpu --capabilities.chromeOptions.args=window-size=1200,600
    

    上面的代码应该适合你。

    【讨论】:

      【解决方案3】:

      我正在寻找将参数从命令行传递到量角器配置文件并找到一种方法:

      npm run e2e -- --baseUrl=http://testurl:8080 --suite=suite_name_defined_in_config --capabilities.browserName=browser_Name
      

      我的 npm package.json 在哪里:

       "e2e": "protractor tests/protractor-conf.js",
      

      配置文件包含:

      suites: {
          BVT: 'e2e/TestSuites/_BVT/*.js',
          Full: 'e2e/TestSuites/Full/**/*.js',      
      },
      capabilities: {
        'browserName': 'chrome'
      },
      baseUrl: 'http://localhost:8080/',  
      

      【讨论】:

      • 如果我有一个数组的功能值,将它作为参数传递的正确方法是什么?例如(不起作用):--capabilities.chromeOptions.args = ["--headless", "--disable-gpu", "--window-size=800x600"]
      猜你喜欢
      • 2019-06-09
      • 1970-01-01
      • 1970-01-01
      • 2013-06-25
      • 1970-01-01
      • 1970-01-01
      • 2016-08-30
      • 1970-01-01
      • 2016-01-11
      相关资源
      最近更新 更多