如何设置黄瓜环境变量
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我抓住环境变量?
再一次,现在我已经得到了我想在第一个地方使用的答案:
这是包装的一部分。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
};
};
当您想要定义环境变量时,可以这样做。顺便说一下,并不是一定要添加整个路径,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"
}
}
我决定不改变node_modules或其他任何东西,因为在下一个npm update <package>
之后更改将丢失。
- 在调用
npm test
的目录下创建一个start.sh
文件。 写入
start.sh
:#!/bin/bash export BROWSER=$1 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)
我自己没有尝试过,但是,根据cucumber的CLI文档,有一种方法可以将数据传递给世界构造函数(世界参数,在页面末尾)
你可以将浏览器传递给World构造函数,让它根据你的选择创建webdriver实例。
我猜是你包里的脚本部分。Json可以(或多或少)如下所示:
"scripts": {
"test": "cucumber-js",
"firefox": "./node_modules/.bin/cucumber-js --world-parameters <JSON>"
}
,其中<JSON>
将包含信息。关于浏览器类型等。
6axter82的解决方案适用于我…在某种程度上。为了从命令行传递变量,我必须添加以下调整。(环境:Windows 10/VS Code/Command Prompt)
-
从包内的脚本属性执行。json,额外的需要反斜杠()。
"firefox": "cucumber-js --world-parameters '{'"browser'":'"firefox'"}'",
转换成
"firefox": "cucumber-js --world-parameters {'''"browser'''":'''"firefox'''"}"
-
(如果默认构造函数被setWorldConstructor(World)覆盖)按照Cucumber.js/World Doc中指定的为World创建构造函数,特别是
function World({attach, parameters}) { this.attach = attach this.parameters = parameters }
-
要引用World类(World .js)中的参数值,使用以下表达式
this.parameters.browser
- 在node.js中设置Apache环境变量
- 可以'无法正确访问NODE_ENV环境变量,这是NODE.js的错误吗
- 如何将 Node.js 环境变量注入客户端 JavaScript
- Strapi-使用环境变量进行配置
- 执行批处理文件的Javascript,该文件包含基于每个会话的环境变量设置
- 如何将环境变量从.bash_profile引入javascript
- 同构JS应用程序中的环境变量:Webpackfind&代替
- Rails从本地环境变量中删除端口
- Node.js Node_PATH环境变量
- 如何从批处理文件调用一个带有2个参数的java脚本函数,并将结果返回到环境变量
- 在 html 文件中使用环境变量
- WebPack:访问客户端代码中的节点环境变量
- 吞噬基于环境变量的ReactJS
- 如何根据 Docker 环境变量选择要复制的文件
- 如何在 Travis CI 中访问环境变量
- sails.js中app.js文件中的环境变量
- 如何在javascript上从rails访问环境变量
- 未设置Node.JS环境变量
- 关于为什么我不能在jsforce-auth函数中使用heroku环境变量的任何线索
- 如何设置黄瓜环境变量