我是量角器的新手,我希望能够运行涂有油漆或无头的chrome浏览器。
所以我设置了类似的东西
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的正确方法是什么
答案 0 :(得分:1)
仅当代码运行到browser
中时,全局变量onPrepare()
才是初始化变量。您在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示例:protractor conf.js --browserToUse=chrome-headless
答案 1 :(得分:0)
我也遇到了这个问题,并使用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;
},
答案 2 :(得分:0)
在仅适用于Chrome的测试环境中,我执行了以下操作。在功能方面:
chromeOptions: {
args: []
}
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");
}
}
这样,在启动浏览器时,它具有正确的配置。如果我有“ headless = true”,则可能需要“ Chrome-headless”。
然后在命令行上像使用--params.headless=false
一样调用它,因此我应该稍后再在浏览器启动后在脚本本身中找到它,
请注意,我只有一个命令行参数和命令行控制,因此可以认为该参数是最后一个参数就可以了。