Передача требует ('chromedriver).path непосредственно для selenium-webdriver

tl; dr: Кто-нибудь знает, как передать путь хромодровера в selenium-webdriver в коде без установки переменной среды PATH?

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

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

Без установки хромированной решетки в пути это вызывает ошибку:

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 из npm и добавил в свой пакет 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"
},

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

Ответ 1

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

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();

Ответ 2

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

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

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