我需要在运行脚本的命令中传递凭据。
目前,我正在使用量角器文件中的以下部分:
onPrepare: function () {
jasmine.getEnv().addReporter(new SpecReporter({
spec: {
displayStacktrace: true
}
}));
if (browser.params.Url == 'http://devel/') {
browser.params.webmaster='abc';
browser.params.webmaspass='foo';
}
//(other environments)
else {
console.log('-------------error during log in');
}*/
}
它工作正常,但我需要更改它 - 我不能以这种方式传递凭据。我想把它换成:
if (browser.params.Url == 'http://devel/') {
browser.params.webmaster='';
browser.params.webmaspass='';
}
并使用
运行脚本 npm run dev-script --browser.params.Url='http://devel/' --browser.params.webmaster='abc' --browser.params.webmaspass='foo'
我有package.json:
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"dev-script": "protractor --params.Url=http://devel/ --browser.params.webmaster='' --browser.params.webmaspass=''"
},
(或任何变化)但它失败了 - 我无法在运行脚本期间更新params,我需要在代码中写下凭证(我觉得有点不安全)
我发现了类似Protractor needs password for login => insecure?的问题,但有关Google Auth问题的问题
有什么想法吗?
答案 0 :(得分:1)
您需要删除onPrepare
中的变量分配。您通过将其设置为空字符串来覆盖从命令行传入的内容。
当您从命令行传入它们时,它们将在params
对象上可用。您无需在onPrepare
中重新设置它们。在console.log()
中添加onPrepare
即可看到。
从命令行运行它,如下所示:protractor conf.js --params.webmaster=abc --params.webmaspass=foo --params.url=http://devel/
同样,如果您在onPrepare
中记录它们,您会看到它正在运行。你现在拥有它的方式就是覆盖你通过命令行传入的值。
onPrepare: function () {
jasmine.getEnv().addReporter(new SpecReporter({
spec: {
displayStacktrace: true
}
}));
if (browser.params.Url == 'http://devel/') {
consoel.log(browser.params.webmaster) //should be abc
console.log(browser.params.webmaspass) //should be foo
}
//(other environments)
else {
console.log('-------------error during log in');
}*/
}
另一种方法是在测试运行之前设置一些环境变量,然后使用process.env.envVariableName
或${envVariableName}
在脚本中访问它们。这两种方式都有效。
set DEVEL_WEBMASTER=abc
set DEVEL_WEBMASPASS=foo
onPrepare: function () {
jasmine.getEnv().addReporter(new SpecReporter({
spec: {
displayStacktrace: true
}
}));
if (browser.params.Url == 'http://devel/') {
browser.params.webmaster=process.env.DEVEL_WEBMASTER;
browser.params.webmaspass=process.env.DEVEL_WEBMASPASS;
}
//(other environments)
else {
console.log('-------------error during log in');
}*/
}
请记住,如果使用此方法,则必须为每个会话设置变量。如果您计划使用CI环境自动化这些测试,您可以将它们作为秘密变量添加到那里(如果您有这个选项)并且它们将始终准备就绪并等待。在每次构建期间都不需要手动设置它们。
答案 1 :(得分:0)
我没有在命令行的参数上看到配置文件。您必须指定配置文件: 例如:量角器config.js --params ......
在您的脚本文件中执行此操作:我在命令量角器后添加了配置文件
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"dev-script": "protractor config.js --params.Url=http://devel/ --browser.params.webmaster='' --browser.params.webmaspass=''"
},