繁体   English   中英

如何设置黄瓜环境变量

[英]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

我想为黄瓜设置一个环境变量,这样我就可以从命令行运行: npm test firefoxnpm test phantomjs

它也可以作为package.json'脚本'的一部分,如上所示,但我不确定我是否做得对。 调用npm run-script firefox

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

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

这是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
  };
};

当你想定义env vars时,你可以做类似的事情。 顺便说一下,添加整个路径并不是强制性的,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构造函数( 世界参数 ,在页面末尾)

您可以将浏览器传递给World构造函数,并让它根据您的选择创建webdriver实例。

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

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

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

我决定不在node_modules或其他任何东西中更改某些内容,导致在下一个npm update <package> ,更改将丢失。

想法是设置env变量:

  1. 在您调用npm test from的目录中创建一个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)

6axter82的解决方案在某种程度上对我有用。 为了从命令行传入变量,我必须添加以下调整。 (环境:Windows 10 / VS代码/命令提示符)

  1. 要从package.json中的scripts属性执行,需要额外的反斜杠()。
    "firefox": "cucumber-js --world-parameters '{\\"browser\\":\\"firefox\\"}'",

    转换成

    "firefox": "cucumber-js --world-parameters {\\\\\\"browser\\\\\\":\\\\\\"firefox\\\\\\"}"

  2. (如果默认构造函数被setWorldConstructor(World)覆盖)创建在Cucumber.js / World Doc上指定的World的构造函数,具体

    function World({attach, parameters}) { this.attach = attach this.parameters = parameters }

  3. 要在World类(world.js)中引用参数值,请使用以下表达式this.parameters.browser

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM