2015-01-01 2 views
12

Tl; др:Кто-нибудь знает, как пройти путь chromedriver к селеном WebDriver в коде без установки переменной PATH среды?Passing требуют ('chromedriver) .path непосредственно к селеном WebDriver

Я пытаюсь использовать селен-webdriver с хромом, но предпочитаю не физически устанавливать хромированный рекордер и манипулировать дорожкой. У меня есть следующий код:

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

Без набора chromedriver в пути, это бросает ошибку:

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. 

Я предпочел бы не настроить мой путь, так что я установил chromedriver от НПМ и добавил к моему 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" 
}, 

Теперь я chromedriver установлен и может получить путь с require('chromedriver').path, но у меня нет никакого способа прохождения это селен, мы bdriver. Кто-нибудь знает?

ответ

33

Вам необходимо создать &, установив свой собственный хром-сервис по умолчанию.

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

Я новичок в Node.js, есть ошибка во второй линии, как нет хрома внутри селен WebDriver, то вы тоже пишете 'вар chrome = require ('selenium-webdriver/chrome'); '. Выполняя все это, я все равно получаю сообщение об ошибке «SyntaxError: ошибка разбора /home/abc/node_modules/selenium-webdriver/package.json: Неожиданный токен/ « – Tripathi29

+1

require ('selenium-webdriver/chrome') означает загрузить файл chrome.js внутри установки npm selenium-webdriver. Это должно работать нормально. Однако, я думаю, у вас может быть поврежден файл package.json (вы не должны видеть ошибку синтаксического анализа из неразрешенной ссылки). Вы внесли какие-либо изменения в этот файл? – jt000

+0

yes Изменения, которые вы предложили сделать в пакете. Json – Tripathi29

2

Вы также можете сделать это:

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

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

Это так же просто, как и получается, мне это нравится! Однако вместо ''; ''вы должны использовать' path.delimiter'. –

+0

Решает ли исходный вопрос? Похоже, вы просто ввели переменную «webdriver» из моего ответа выше. Возможно, я недопонимаю ... – jt000

+0

Идея здесь в том, что вам не нужно создавать службу. Трюк здесь заключается в том, что 'require ('chromedriver');' добавит путь хромированной передачи к 'process.env.PATH'. Из-за этого 'selenium-webdriver' сможет запустить хромированный рекордер, если запрашивается драйвер с возможностью' crome'. – mucsi96

Смежные вопросы