如何设置黄瓜环境变量
how to set cucumber environment variables
我有以下 package.json:
{
"name": "newcucumber",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"test": "./node_modules/.bin/cucumber-js",
"firefox": "./node_modules/.bin/cucumber-js -- --profile.desktop.env.browser ff"
},
"author": "",
"license": "ISC",
"dependencies": {
"chromedriver": "^2.24.1",
"cucumber": "^1.3.0",
"firefox-profile": "^0.4.2",
"geckodriver": "^1.1.2",
"phantomjs-prebuilt": "^2.1.12",
"selenium-webdriver": "^3.0.0-beta-2"
}
}
我运行程序使用:
npm test
我想为 Cucumber 设置一个环境变量,这样我就可以从命令行 运行:npm test firefox
或 npm test phantomjs
.
它也可以作为 package.json 'scripts' 的一部分,如上所示,但我不确定我是否做对了。调用 npm run-script firefox
如何实现,在js代码中,如world.js或browser.js抓取env变量?
当你想定义环境变量时,你可以做类似的事情。顺便说一句,并不是必须要添加整个路径,npm 会弄清楚
{
"name": "newcucumber",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"test": "cucumber-js",
"firefox": "NODE_ENV=test cucumber-js -- --profile.desktop.env.browser ff"
},
"author": "",
"license": "ISC",
"dependencies": {
"chromedriver": "^2.24.1",
"cucumber": "^1.3.0",
"firefox-profile": "^0.4.2",
"geckodriver": "^1.1.2",
"phantomjs-prebuilt": "^2.1.12",
"selenium-webdriver": "^3.0.0-beta-2"
}
}
我自己还没有尝试过,但是根据 cucumber 的 CLI 文档,有一种方法可以将数据传递给世界构造函数(World parameters,在页面末尾)
您可以将浏览器传递给 World 构造函数,让它根据您的选择创建 webdriver 实例。
我猜你的 package.json 中的脚本部分可能(或多或少)如下:
"scripts": {
"test": "cucumber-js",
"firefox": "./node_modules/.bin/cucumber-js --world-parameters <JSON>"
}
其中 <JSON>
将包含信息。关于浏览器类型等,希望对你有帮助
我决定不更改 node_modules 或其他任何内容,因为在下一个 npm update <package>
之后更改将丢失。
想法是设置环境变量:
- 在调用
npm test
的目录中创建一个 start.sh
文件。
写在start.sh
:
#!/bin/bash
export BROWSER=
npm test
在您的 browser.js
或您调用浏览器的文件中键入:
var chrome = require('chromedriver'),
phantom = require('phantomjs-prebuilt'),
firefox = require('selenium-webdriver/firefox'),
webdriver = require('selenium-webdriver');
...
console.log("What was passed into global env: ", process.env.BROWSER);
switch(process.env.BROWSER) {
case 'firefox': //Setup Firefox
var capabilities = {
'browserName' : 'firefox'
}
break;
case 'phantomjs':
var capabilities = {
'browserName' : 'phantomjs'
}
break;
case 'chrome':
var capabilities = {
'browserName' : 'chrome'
}
break;
}
return browserHandle = new webdriver
.Builder()
.withCapabilities(capabilities)
.build();
- 致电
. start.sh firefox (phantomjs, chrome)
再一次,现在我得到了我最初想使用的答案:
这就是 package.json 的一部分(注意!!!引号的语法)的样子:
"scripts": {
"test": "cucumber-js",
"firefox": "cucumber-js --world-parameters '{\"browser\":\"firefox\"}'",
"chrome": "cucumber-js --world-parameters '{\"browser\":\"chrome\"}'",
"safari": "cucumber-js --world-parameters '{\"browser\":\"safari\"}'",
"phantomjs": "cucumber-js --world-parameters '{\"browser\":\"phantomjs\"}'"
}
JSON 对象被传递给 World。在您的 World.js 中,代码如下所示:
module.exports = function() {
this.World = function(input) {
console.log(input.browser); // Do whatever you want with the JSON (input) object
};
};
6axter82 的解决方案对我有用……在某种程度上。
为了从命令行传递变量,我必须添加以下调整。
(环境:Windows10/VS 代码/命令提示符)
要从 package.json 内的脚本 属性 执行,附加
需要反斜杠 ()。
"firefox": "cucumber-js --world-parameters '{\"browser\":\"firefox\"}'",
转换为
"firefox": "cucumber-js --world-parameters {\\"browser\\":\\"firefox\\"}"
(如果默认构造函数被 setWorldConstructor(World) 覆盖)按照 Cucumber.js/World Doc 中指定的方式为世界创建构造函数,特别是
function World({attach, parameters}) {
this.attach = attach
this.parameters = parameters
}
要引用世界class(world.js)中的参数值,使用以下表达式this.parameters.browser
希望对您有所帮助。
我有以下 package.json:
{
"name": "newcucumber",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"test": "./node_modules/.bin/cucumber-js",
"firefox": "./node_modules/.bin/cucumber-js -- --profile.desktop.env.browser ff"
},
"author": "",
"license": "ISC",
"dependencies": {
"chromedriver": "^2.24.1",
"cucumber": "^1.3.0",
"firefox-profile": "^0.4.2",
"geckodriver": "^1.1.2",
"phantomjs-prebuilt": "^2.1.12",
"selenium-webdriver": "^3.0.0-beta-2"
}
}
我运行程序使用:
npm test
我想为 Cucumber 设置一个环境变量,这样我就可以从命令行 运行:npm test firefox
或 npm test phantomjs
.
它也可以作为 package.json 'scripts' 的一部分,如上所示,但我不确定我是否做对了。调用 npm run-script firefox
如何实现,在js代码中,如world.js或browser.js抓取env变量?
当你想定义环境变量时,你可以做类似的事情。顺便说一句,并不是必须要添加整个路径,npm 会弄清楚
{
"name": "newcucumber",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"test": "cucumber-js",
"firefox": "NODE_ENV=test cucumber-js -- --profile.desktop.env.browser ff"
},
"author": "",
"license": "ISC",
"dependencies": {
"chromedriver": "^2.24.1",
"cucumber": "^1.3.0",
"firefox-profile": "^0.4.2",
"geckodriver": "^1.1.2",
"phantomjs-prebuilt": "^2.1.12",
"selenium-webdriver": "^3.0.0-beta-2"
}
}
我自己还没有尝试过,但是根据 cucumber 的 CLI 文档,有一种方法可以将数据传递给世界构造函数(World parameters,在页面末尾)
您可以将浏览器传递给 World 构造函数,让它根据您的选择创建 webdriver 实例。
我猜你的 package.json 中的脚本部分可能(或多或少)如下:
"scripts": {
"test": "cucumber-js",
"firefox": "./node_modules/.bin/cucumber-js --world-parameters <JSON>"
}
其中 <JSON>
将包含信息。关于浏览器类型等,希望对你有帮助
我决定不更改 node_modules 或其他任何内容,因为在下一个 npm update <package>
之后更改将丢失。
想法是设置环境变量:
- 在调用
npm test
的目录中创建一个start.sh
文件。 写在
start.sh
:#!/bin/bash export BROWSER= npm test
在您的
browser.js
或您调用浏览器的文件中键入:var chrome = require('chromedriver'), phantom = require('phantomjs-prebuilt'), firefox = require('selenium-webdriver/firefox'), webdriver = require('selenium-webdriver'); ... console.log("What was passed into global env: ", process.env.BROWSER); switch(process.env.BROWSER) { case 'firefox': //Setup Firefox var capabilities = { 'browserName' : 'firefox' } break; case 'phantomjs': var capabilities = { 'browserName' : 'phantomjs' } break; case 'chrome': var capabilities = { 'browserName' : 'chrome' } break; } return browserHandle = new webdriver .Builder() .withCapabilities(capabilities) .build();
- 致电
. start.sh firefox (phantomjs, chrome)
- 致电
再一次,现在我得到了我最初想使用的答案:
这就是 package.json 的一部分(注意!!!引号的语法)的样子:
"scripts": {
"test": "cucumber-js",
"firefox": "cucumber-js --world-parameters '{\"browser\":\"firefox\"}'",
"chrome": "cucumber-js --world-parameters '{\"browser\":\"chrome\"}'",
"safari": "cucumber-js --world-parameters '{\"browser\":\"safari\"}'",
"phantomjs": "cucumber-js --world-parameters '{\"browser\":\"phantomjs\"}'"
}
JSON 对象被传递给 World。在您的 World.js 中,代码如下所示:
module.exports = function() {
this.World = function(input) {
console.log(input.browser); // Do whatever you want with the JSON (input) object
};
};
6axter82 的解决方案对我有用……在某种程度上。 为了从命令行传递变量,我必须添加以下调整。 (环境:Windows10/VS 代码/命令提示符)
要从 package.json 内的脚本 属性 执行,附加 需要反斜杠 ()。
"firefox": "cucumber-js --world-parameters '{\"browser\":\"firefox\"}'",
转换为
"firefox": "cucumber-js --world-parameters {\\"browser\\":\\"firefox\\"}"
(如果默认构造函数被 setWorldConstructor(World) 覆盖)按照 Cucumber.js/World Doc 中指定的方式为世界创建构造函数,特别是
function World({attach, parameters}) { this.attach = attach this.parameters = parameters }
要引用世界class(world.js)中的参数值,使用以下表达式
this.parameters.browser
希望对您有所帮助。