如何设置黄瓜环境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 

我想为黄瓜设置一个环境variables,以便我可以从命令行运行: npm test firefox或者npm test phantomjs

它也可以作为package.json“脚本”的一部分,如上所述,但我不确定是否正确。 调用npm run-script firefox

如何实现它,以便在js代码中,像world.js或browser.js,我抓住envvariables?

再一次,现在我已经得到了我想要使用的答案:

这是package.json(MIND !!!引号语法)的一部分:

 "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 }; }; 

当你想要定义envvariables时,你可以做这样的事情。 顺便说一句,加上整个path并不是强制性的,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构造函数,并根据您的select创buildwebdriver实例。

我猜你的package.json中的脚本部分可能(或多或less)如下所示:

 "scripts": { "test": "cucumber-js", "firefox": "./node_modules/.bin/cucumber-js --world-parameters <JSON>" } 

其中<JSON>将包含信息。 关于浏览器types等希望它有帮助。

我决定不改变node_modules或其他什么,在下一个npm update <package> ,更改将会丢失。

这个想法是设置envvariables:

  1. 在你调用npm test的目录下创build一个start.sh文件。
  2. 写入start.sh

     #!/bin/bash export BROWSER=$1 npm test 
  3. 在您的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(); 
    1. 打电话. start.sh firefox (phantomjs, chrome) . start.sh firefox (phantomjs, chrome)