2015-01-01 3 views
12

tl; dr:Kann jemand den Weg von chromedriver zum selen-webdriver im Code führen, ohne die Umgebungsvariable PATH zu setzen?Passender required ('chromedriver) .path direkt zu selen-webdriver

Ich versuche, selen-webdriver mit Chrom zu verwenden, aber würde es vorziehen, chromedriver physikalisch nicht zu installieren und den Pfad zu manipulieren. Ich habe den folgenden Code:

var webdriver = require('selenium-webdriver'); 
var driver = new webdriver.Builder(). 
    withCapabilities(webdriver.Capabilities.chrome()). 
    build(); 

Ohne chromedriver Satz in den Weg, wirft dies den Fehler:

Error: The ChromeDriver could not be found on the current PATH. Please download the latest 
version of the ChromeDriver from http://chromedriver.storage.googleapis.com/index.html and 
ensure it can be found on your PATH. 

Ich würde es vorziehen, nicht mein Weg zu Setup haben, so habe ich installiert chromedriver aus npm und zu meinem package.json:

"scripts": { 
    "preinstall-chromedriver": "npm install", 
    "install-chromedriver": "node node_modules/chromedriver/install.js", 
    "pretest_e2e": "npm run install-chromedriver", 
    "test_e2e": "node release/test/rune2e.js" 
}, 

Jetzt habe ich chromedriver installiert und den Pfad mit require('chromedriver').path bekommen, aber ich habe keine Möglichkeit, dies-Selen uns zum zugeben Fahrer. Weiß jemand?

Antwort

33

Sie müssen & Ihren eigenen Standard-Chrome-Dienst einrichten.

var webdriver = require('selenium-webdriver'); 
var chrome = require('selenium-webdriver/chrome'); 
var path = require('chromedriver').path; 

var service = new chrome.ServiceBuilder(path).build(); 
chrome.setDefaultService(service); 

var driver = new webdriver.Builder() 
    .withCapabilities(webdriver.Capabilities.chrome()) 
    .build(); 
+0

Ich bin neu in node.js, ein Fehler in zweiter Linie ist es, da es zu werden kein Chrom innerhalb Selen-WebDriver ist dann Sie 'var schreiben chrome = require ('selen-webdriver/chrome'); '. Nach all dem bekomme ich immer noch einen Fehler "SyntaxError: Fehler beim Parsen /home/abc/node_modules/selenium-webdriver/package.json: Unerwartetes Token/" – Tripathi29

+1

require ('selen-webdriver/chrome') bedeutet laden die Datei chrome.js in der selen-webdriver npm-Installation. Das sollte gut funktionieren. Ich denke jedoch, dass Sie eine beschädigte package.json-Datei haben (Sie sollten keinen Analysefehler von einer nicht aufgelösten Referenz sehen). Haben Sie Änderungen an dieser Datei vorgenommen? – jt000

+0

ja die Änderungen, die Sie in der package.json – Tripathi29

2

Sie können dies auch tun:

require('chromedriver'); 
const webdriver = require('selenium-webdriver'); 

const driver = new webdriver.Builder() 
    .withCapabilities(webdriver.Capabilities.chrome()) 
    .build(); 
+2

Das ist so einfach wie es geht, ich mag es! Anstelle von ";" sollten Sie jedoch "path.delimiter" verwenden. –

+0

Löst das die ursprüngliche Frage? Es sieht so aus, als hättest du gerade die Variable "webdriver" aus meiner obigen Antwort eingefügt. Vielleicht bin ich Missverständnis ... – jt000

+0

Die Idee hier ist, dass Sie keinen Service aufbauen müssen. Der Trick dabei ist, dass 'require ('chromedriver');' dem 'process.env.PATH' einen chromierten Pfad hinzufügt. Aus diesem Grund kann der 'selen-webdriver' den Chrometreiber starten, wenn ein Treiber mit' crome' Funktion benötigt wird. – mucsi96