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");
}
}