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=''"
  },