我可以访问量角器配置文件中的参数吗?
Can I access parameters in my protractor configuration file?
我通过以下 运行 开始我的量角器测试:
protractor protractor.conf.js --params.baseUrl=http://www.google.com --suite all
我想要 运行 一个 'before launch' 依赖于一个参数(在本例中为 baseUrl)的函数。有可能吗?
exports.config = {
seleniumServerJar: './node_modules/protractor/selenium/selenium-server-standalone-2.45.0.jar',
seleniumPort: 4455,
suites: {
all: 'test/*/*.js',
},
capabilities: {
'browserName': 'firefox'
},
beforeLaunch: function() {
console.log('I want to access my baseUrl parameter here: ' + config.params.baseUrl);
},
onPrepare: function() {
require('jasmine-reporters');
jasmine.getEnv().addReporter(
new jasmine.JUnitXmlReporter('output/xmloutput', true, true));
}
};
如果我 运行 我得到一个 ReferenceError 因为没有定义配置。我该怎么做?这可能吗?
我不完全确定量角器全局变量是否在 beforeLaunch()
阶段设置,但它们肯定在 onPrepare()
步骤可用。
通过全局browser
对象访问params
对象:
console.log(browser.params.baseUrl);
更新:
使用 Jasmine 2.6+,量角器 4.x、browser.params 为空,但以下在 onPrepare()
步骤中有效:
console.log(browser.baseUrl);
如果您需要整个配置文件中的每一项,您可以使用 browser.getProcessedConfig()
来完成此操作。
onPrepare: () => {
browser.getProcessedConfig().then(console.log); // even `params` is in here
}
这是一个示例代码,用于在 Protractor 配置文件中遍历 cmd 行参数并直接从命令行设置规格(以及其他一些 运行 配置值):
config.js
// usage: protractor config.js --params.specs="*" --params.browser=ie --params.threads=1
// protractor config.js --params.specs="dir1|dir2"
// protractor config.js --params.specs="dir1|dir2/spec1.js|dir2/spec2.js"
// process command line arguments and initialize run configuration file
var init = function(config) {
const path = require('path');
var specs;
for (var i = 3; i < process.argv.length; i++) {
var match = process.argv[i].match(/^--params\.([^=]+)=(.*)$/);
if (match)
switch (match[1]) {
case 'specs':
specs = match[2];
break;
case 'browser':
config.capabilities.browserName = match[2];
if (match[2].toLowerCase() === 'ie') {
config.capabilities.browserName = 'internet explorer';
config.capabilities.platform = 'ANY';
config.capabilities.version = '11';
config.seleniumArgs = ['-Dwebdriver.ie.driver=' + path.join('node_modules', 'protractor' ,'selenium' ,'IEDriverServer.exe')];
}
if (match[2] !== 'chrome' && match[2] !== 'firefox')
config.directConnect = false;
break;
case 'timeout':
config.jasmineNodeOpts.defaultTimeoutInterval = parseInt(match[2]);
break;
case 'threads':
config.capabilities.maxInstances = parseInt(match[2]);
config.capabilities.shardTestFiles = config.capabilities.maxInstances > 1;
break;
}
}
// generate specs array
specs.split(/\|/g).forEach(function(dir) {
if (dir.endsWith('.js'))
config.specs.push(dir);
else
config.specs.push(path.join(dir, '*.js'));
});
return config;
};
exports.config = (function() {
return init({
specs: [],
framework: 'jasmine',
jasmineNodeOpts: {
defaultTimeoutInterval: 300000 // 5 min
},
capabilities: {
browserName: 'chrome',
shardTestFiles: false,
maxInstances: 1
},
directConnect: true
});
})();
简单的解决方案
量角器是一个节点进程。任何节点进程都可以使用自定义节点变量启动。不确定它是如何在 windows 中完成的(如果你知道如何,请发表评论)但是对于 mac 和任何 linux/unix OS 你可以像这样使用环境变量启动量角器
MY_VAR=Dev protractor tmp/config.js
然后它将在您的流程中的任何地方可用
console.log(process.env.MY_VAR)
甚至在之外 onPrepare
在您的配置中
我通过以下 运行 开始我的量角器测试:
protractor protractor.conf.js --params.baseUrl=http://www.google.com --suite all
我想要 运行 一个 'before launch' 依赖于一个参数(在本例中为 baseUrl)的函数。有可能吗?
exports.config = {
seleniumServerJar: './node_modules/protractor/selenium/selenium-server-standalone-2.45.0.jar',
seleniumPort: 4455,
suites: {
all: 'test/*/*.js',
},
capabilities: {
'browserName': 'firefox'
},
beforeLaunch: function() {
console.log('I want to access my baseUrl parameter here: ' + config.params.baseUrl);
},
onPrepare: function() {
require('jasmine-reporters');
jasmine.getEnv().addReporter(
new jasmine.JUnitXmlReporter('output/xmloutput', true, true));
}
};
如果我 运行 我得到一个 ReferenceError 因为没有定义配置。我该怎么做?这可能吗?
我不完全确定量角器全局变量是否在 beforeLaunch()
阶段设置,但它们肯定在 onPrepare()
步骤可用。
通过全局browser
对象访问params
对象:
console.log(browser.params.baseUrl);
更新:
使用 Jasmine 2.6+,量角器 4.x、browser.params 为空,但以下在 onPrepare()
步骤中有效:
console.log(browser.baseUrl);
如果您需要整个配置文件中的每一项,您可以使用 browser.getProcessedConfig()
来完成此操作。
onPrepare: () => {
browser.getProcessedConfig().then(console.log); // even `params` is in here
}
这是一个示例代码,用于在 Protractor 配置文件中遍历 cmd 行参数并直接从命令行设置规格(以及其他一些 运行 配置值):
config.js
// usage: protractor config.js --params.specs="*" --params.browser=ie --params.threads=1
// protractor config.js --params.specs="dir1|dir2"
// protractor config.js --params.specs="dir1|dir2/spec1.js|dir2/spec2.js"
// process command line arguments and initialize run configuration file
var init = function(config) {
const path = require('path');
var specs;
for (var i = 3; i < process.argv.length; i++) {
var match = process.argv[i].match(/^--params\.([^=]+)=(.*)$/);
if (match)
switch (match[1]) {
case 'specs':
specs = match[2];
break;
case 'browser':
config.capabilities.browserName = match[2];
if (match[2].toLowerCase() === 'ie') {
config.capabilities.browserName = 'internet explorer';
config.capabilities.platform = 'ANY';
config.capabilities.version = '11';
config.seleniumArgs = ['-Dwebdriver.ie.driver=' + path.join('node_modules', 'protractor' ,'selenium' ,'IEDriverServer.exe')];
}
if (match[2] !== 'chrome' && match[2] !== 'firefox')
config.directConnect = false;
break;
case 'timeout':
config.jasmineNodeOpts.defaultTimeoutInterval = parseInt(match[2]);
break;
case 'threads':
config.capabilities.maxInstances = parseInt(match[2]);
config.capabilities.shardTestFiles = config.capabilities.maxInstances > 1;
break;
}
}
// generate specs array
specs.split(/\|/g).forEach(function(dir) {
if (dir.endsWith('.js'))
config.specs.push(dir);
else
config.specs.push(path.join(dir, '*.js'));
});
return config;
};
exports.config = (function() {
return init({
specs: [],
framework: 'jasmine',
jasmineNodeOpts: {
defaultTimeoutInterval: 300000 // 5 min
},
capabilities: {
browserName: 'chrome',
shardTestFiles: false,
maxInstances: 1
},
directConnect: true
});
})();
简单的解决方案
量角器是一个节点进程。任何节点进程都可以使用自定义节点变量启动。不确定它是如何在 windows 中完成的(如果你知道如何,请发表评论)但是对于 mac 和任何 linux/unix OS 你可以像这样使用环境变量启动量角器
MY_VAR=Dev protractor tmp/config.js
然后它将在您的流程中的任何地方可用
console.log(process.env.MY_VAR)
甚至在之外 onPrepare
在您的配置中