Protractor 量角器,根据输入动态选择浏览器

Protractor 量角器,根据输入动态选择浏览器,protractor,Protractor,我是一个新的量角器,我想能够运行我的铬浏览器画或无头 所以我做了这样的事情 let chrome = { browserName: 'chrome', platform: 'MAC', 'max-duration': '1800', }; let chromeHeadless = { browserName: 'chrome', chromeOptions: { args: [ "--headless", "--dis

我是一个新的量角器,我想能够运行我的铬浏览器画或无头

所以我做了这样的事情

 let chrome = {
     browserName: 'chrome',
     platform: 'MAC',
     'max-duration': '1800',

 };

let chromeHeadless = {
     browserName: 'chrome',     
    chromeOptions: {
      args: [ "--headless", "--disable-gpu", "--window-size=800,600" ]
    }
};

browserDefault = browser.params.browserToUse

exports.config = {
   params: {

    'browserToUse': "get from user'

   },
   capabilities: browserDefault,
 }
我把这段代码作为

 protractor config.js --params.browserToUse='chromeHeadless' 

但这是行不通的。量角器无法表示它不理解“browser.params.browserInput”。让量角器根据输入动态选择chrome或chromeheadless的正确方法是什么?

全局变量
browser
只有在代码运行到
onPrepare()
时才是init。您使用了
browser
外部
onPrepare()
函数,
browser
尚未初始化,未定义,因此您遇到了错误

另一点是,当变量
browser
初始化时,浏览器窗口已打开,这意味着量角器知道启动浏览器的功能。因此,您不能使用
browser.params.xxx
指定哪些功能,您需要在初始化
browser
变量之前告诉量角器这些功能

let capabilitiesMap = {
    'chrome-headful' : {
        browserName: 'chrome',
        platform: 'MAC',
        'max-duration': '1800',   
    },

    'chrome-headless': {
        browserName: 'chrome',     
        chromeOptions: {
          args: [ "--headless", "--disable-gpu", "--window-size=800,600" ]
        }
    }
};

let browserToUse = 'chrome-headful'; // set default value

// extract the browserToUse value from cli
process.argv.slice(3).forEach(function(arg) {
    var name = arg.split('=')[0];
    var value = arg.split('=')[1];
    var name = name.replace('--', '');

    if (name === 'browserToUse') {
        if (Object.prototype.hasOwnProperty.call(capabilitiesMap, value) ) {
            browserToUse = value;
        }
    } 
});


let config = {

    seleniumAddress: '',
    specs: [],
    onPrepare: function() {}

};

config.capabilities = capabilitiesMap[browserToUse];

exports.config = config;

CLI示例:
dragrator conf.js--browserToUse=chrome headless

我也遇到了这个问题,并使用conf.js中的
getMultiCapabilities()函数解决了它

const _ = require('lodash');    
 let capabilities = {

   chrome: {
     browserName: 'chrome',
     platform: 'MAC',
     'max-duration': '1800',

 },

chromeHeadless : {
     browserName: 'chrome',     
    chromeOptions: {
      args: [ "--headless", "--disable-gpu", "--window-size=800,600" ]
    }
}

}
getMultiCapabilities() {
    const browsers = this.params.browserToUse.split(',');//if you pass more than one browser e.g chrome,chromeHeadless
    const cap = _(capabilities).pick(browsers).values().value(); //this uses the lodash npm module
    return cap;
  },

在使用Chrome的测试环境中,我做了以下工作。在能力方面:

chromeOptions: {
   args: []
}

这样,当浏览器启动时,它就有了正确的配置。如果我有“headless=true”,你可能会想要“Chrome headless” 然后在命令行上调用它,就像您对
--params.headless=false
所做的那样,这样以后如果我想在脚本中找到它(在浏览器启动后),它就可以随时使用


注意,我只有一个命令行参数和命令行控件,因此可以假定此参数是最后一个。

browser.params.browserInput
?。您能否分享控制台错误以提供更好的说明
 beforeLaunch: function() {
    //at this point browser is not yet defined, so process command line directly
  if (process.argv[process.argv.length-1].search('headless=true')>-1){
      config.capabilities.chromeOptions.args.push("--headless");
      config.capabilities.chromeOptions.args.push("--disable-gpu");
      config.capabilities.chromeOptions.args.push("--window-size=1600,1000");
    }  
  }