2016-09-28 4 views
1

ich folgende package.json habe:wie Gurke Umgebungsvariablen setzen

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

Ich betreibe das Programm mit:

npm test 

Ich möchte eine Umgebungsvariable für Gurken setzen, so dass ich von der Befehlszeile ausführen könnte: npm test firefox oder npm test phantomjs.

Es könnte auch als Teil von Paket.json "Skripte" wie oben gesehen, aber ich bin mir nicht sicher, ob ich es richtig gemacht habe. Aufrufen npm run-script firefox

Wie implementiert man es, so dass in der Js-Code, wie world.js oder browser.js ich die Variable env greifen?

Antwort

1

Noch einmal, jetzt habe ich die Antwort, die ich in erster Linie verwenden wollte:

Dies ist, wie Teil von package.json (mind !!! Die Syntax von Anführungszeichen) sieht folgendermaßen aus:

"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\"}'" 
    } 

Das JSON-Objekt wird an World übergeben. In deiner Welt.js sieht der Code wie folgt aus:

module.exports = function() { 
    this.World = function(input) { 
    console.log(input.browser); // Do whatever you want with the JSON (input) object 
    }; 
}; 
0

Sie können so etwas tun, wenn Sie env vars definieren möchten. By the way, es nicht zwingend notwendig ist, den gesamten Pfad hinzuzufügen, npm es herauszufinden, wird

{ 
    "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" 
    } 
} 
+0

Wenn ich Ihrem Vorschlag ausführen, wird die folgende ausgedruckt: '> NODE_ENV = test Gurken-js - --profile.desktop.env.browser ff fs.js: 1574 return binding.realpath (pathModule._makeLong (Pfad), options.encoding); Fehler: ENOENT: keine solche Datei oder das Verzeichnis, realpath '--profile.desktop.env.browser' bei Error (nativ) bei Object.realpathSync (fs.js: 1574: 18) ' – 6axter82

0

Ich habe es nicht versucht, mich aber nach Gurken der CLI-Dokumentation, ist es eine Möglichkeit, Daten an die Welt weitergeben Konstruktor (World parameters, am Ende der Seite)

Sie können den Browser an den World-Konstruktor übergeben und die Webdriver-Instanz entsprechend Ihrer Auswahl erstellen lassen.

Ich denke, das Skript an Ihren package.json sein könnte (mehr oder weniger) wie folgt:

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

wo <JSON> die Informationen enthalten würde. über den Browsertyp usw. Hoffe es hilft.

0

Ich habe beschlossen, etwas in node_modules oder was auch immer zu ändern, denn nach dem nächsten npm update <package> gehen die Änderungen verloren.

Die Idee ist es, die Umgebungsvariable zu setzen:

  1. erstellen start.sh-Datei in dem Verzeichnis, in dem Sie npm test aus aufrufen.
  2. schreiben in start.sh:

    #!/bin/bash 
    export BROWSER=$1 
    npm test 
    
  3. In Ihrem browser.js oder die Datei, in der Sie Ihren Browser aufrufen eingeben:

    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. Anruf . start.sh firefox (phantomjs, chrome)
+0

alle vorgeschlagenen Lösungen von '@ acontell' und' @Svabael' funktionierten nicht für meine Gurke-js, es hat die ganze Zeit ausgedruckt Fehler: ENOENT: keine solche Datei oder Verzeichnis, realpath '--profile.desktop.env. Browser 'bei Fehler (nativ) bei Object.realpathSync (fs.js: 1574: 18) – 6axter82

Verwandte Themen