Jasmine 在脚本运行命令中传递参数的量角器
我需要在运行脚本的命令中传递凭据 目前,我正在量角器文件中使用以下部分:Jasmine 在脚本运行命令中传递参数的量角器,jasmine,protractor,Jasmine,Protractor,我需要在运行脚本的命令中传递凭据 目前,我正在量角器文件中使用以下部分: onPrepare: function () { jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } })); if (browser.params.Url == 'http://devel/') { browser.
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运行开发脚本--browser.params.Url='0http://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=''"
},
(或任何变体)但它失败了-我无法在运行脚本期间更新参数,我需要在代码中写下凭据(我发现这有点不安全)
我发现了一些问题,比如关于谷歌认证的问题
有什么想法吗?您需要删除
onPrepare
中的变量赋值。通过将命令行中传递的内容设置为空字符串,可以覆盖该内容
当您从命令行传入它们时,它们将在params
对象上可用。无需在onPrepare
中再次设置它们。在onPrepare
中添加一个console.log()
,您将看到
像这样从命令行运行它:gragrator 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.envariablename
或${envariablename}
在脚本中访问它们。两种方法都会奏效
set DEVEL_WEBMASTER=abc
set DEVEL_WEBMASPASS=foo
请记住,如果使用此方法,则必须为每个会话设置变量。如果您计划使用CI环境自动化这些测试,您可以将它们作为秘密变量添加到那里(如果您有该选项),它们将始终准备就绪并等待。在每次构建期间,不需要手动设置它们 我在这里做的是在我的package.json中创建脚本:
scripts: {
"automation-test": "concurrently --raw --kill-others \"./node_modules/.bin/webdriver-manager start\" \"sleep 5 && ./node_modules/.bin/protractor configuration/protractor.config.js\"",
"automation:pending": "TAGS=@pending npm run automation-test"
}
在我的dragrator.conf.js中,我只是将值分配给一个变量,以便在配置中使用。像这样:
let tags = process.env.TAGS;
那么我运行的命令就是:
npm run automation:pending
但我也可以像这样传递标签:
npm run automation-test TAGS=@pending
我没有看到命令行参数上的配置文件。必须指定配置文件: 示例:量角器config.js——参数…… 在脚本文件中执行此操作:我在命令量角器之后添加了一个配置文件
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"dev-script": "protractor config.js --params.Url=http://devel/ --browser.params.webmaster='' --browser.params.webmaspass=''"
},
如果您有一个“测试”帐户来进行测试,那么在配置文件中存储密码并不是不安全的。是的,我知道,但由于公司的安全原因,我不能以这种方式存储它:(复制到我自己尝试了第一个解决方案,但每次我得到
{“code”:-32000,“message”:“无法导航到无效URL”}
。因此,我将尝试使用环境变量方法,但我是否应该将其放在conf.js或外部文件中并导入它?您如何尝试导航到url?如果尚未设置baseUrl
,您可能还需要设置它。它可能正在尝试附加http://devel/
到您已经在那里的位置。
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"dev-script": "protractor config.js --params.Url=http://devel/ --browser.params.webmaster='' --browser.params.webmaspass=''"
},