Javascript 传递require(';chromedriver)。直接指向selenium webdriver的路径

Javascript 传递require(';chromedriver)。直接指向selenium webdriver的路径,javascript,node.js,selenium,selenium-chromedriver,Javascript,Node.js,Selenium,Selenium Chromedriver,tl;dr:有人知道如何在代码中将chromedriver的路径传递给selenium webdriver,而不设置path环境变量吗 我正在尝试将SeleniumWebDriver与chrome一起使用,但不希望实际安装chromedriver并操纵路径。我有以下代码: var webdriver = require('selenium-webdriver'); var driver = new webdriver.Builder(). withCapabilities(webdriv

tl;dr:有人知道如何在代码中将chromedriver的路径传递给selenium webdriver,而不设置path环境变量吗

我正在尝试将SeleniumWebDriver与chrome一起使用,但不希望实际安装chromedriver并操纵路径。我有以下代码:

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.
我不想设置路径,所以我从npm安装了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')获取路径。路径
,但我无法将其传递给selenium webdriver。有人知道吗?

您需要创建并设置自己的默认chrome服务

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();
您也可以这样做:

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

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

我是node.js的新手,第二行是否有错误,因为selenium webdriver中没有chrome,那么您也在写'var chrome=require('selenium-webdriver/chrome');`。在完成所有这些之后,我仍然收到一个错误“SyntaxError:error parsing/home/abc/node_modules/selenium webdriver/package.json:Unexpected token/”require('selenium-webdriver/chrome')表示在selenium webdriver npm安装中加载chrome.js文件。这应该很好用。但是,我认为您可能有一个损坏的package.json文件(您不应该从未解析的引用中看到解析错误)。您是否对此文件进行了任何更改?是的,您建议在package.json中进行的更改应该放在您的package.json文件中。不在SyntaxError中提到的“selenium webdriver/package.json”中。我发现此错误服务器提前终止,状态为0。这很简单,我喜欢!但是,不是
“;”
,您应该使用
path.delimiter
。这解决了原始问题吗?看起来您刚刚内联了我上面回答中的“webdriver”变量。也许我误解了……这里的想法是您不需要构建服务。这里的技巧是
require('chromedriver')
将chromedriver路径添加到
进程.env.path
。因此,如果请求具有
crome
功能的驱动程序,则
selenium webdriver
将能够启动chromedriver。谢谢,选项1可能会起作用,但选项2使用路径环境变量,问题明确指出它不想设置该变量。
Option 1:
process.env.PATH = 'path to chrome driver binary folder';
var driver = new Builder().forBrowser('chrome').build();

Option 2:
install chromedriver (npm install chromedriver)
require('chromedriver'); in your code

//chrome driver will automatically look for chromedriver or chromedriver.exe in the path mentioned based on OS
reference: 
https://github.com/SeleniumHQ/selenium/blob/master/javascript/node/selenium-webdriver/chrome.js line 142
https://github.com/SeleniumHQ/selenium/blob/master/javascript/node/selenium-webdriver/io/index.js line 237