Node.js抱怨“当前路径上找不到ChromeDriver”,即使chromedriver在路径上。

33

我正在Linux上使用Node 5.10.0。 运行脚本时遇到一些问题,如下所示:

[davea@mydevbox mydir]$ node SkyNet.js 
Validation Complete
/home/davea/node_modules/selenium-webdriver/chrome.js:185
      throw Error(
      ^

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.
    at Error (native)
    at new ServiceBuilder (/home/davea/node_modules/selenium-webdriver/chrome.js:185:13)
    at getDefaultService (/home/davea/node_modules/selenium-webdriver/chrome.js:362:22)
    at Driver (/home/davea/node_modules/selenium-webdriver/chrome.js:771:34)
    at Builder.build (/home/davea/node_modules/selenium-webdriver/builder.js:464:16)
    at Object.<anonymous> (/home/davea/mydir/js/Optimus.js:14:4)
    at Module._compile (module.js:413:34)
    at Object.Module._extensions..js (module.js:422:10)
    at Module.load (module.js:357:32)
    at Function.Module._load (module.js:314:12)

提示说我的路径上没有chromedriver,但我刚从这里下载了适当版本的chromedriver - http://chromedriver.storage.googleapis.com/index.html?path=2.9/,如你所见,它已在我的PATH中

[davea@mydevbox mydir]$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/opt/aws/bin:/home/davea/bin:/home/davea/bin:/usr/lib/chromedriver

使用以下权限...

[davea@mydevbox mydir]$ ls -al /usr/lib/chromedriver
-rwxr-xr-x 1 davea evotext 5503600 Feb  3  2014 /usr/lib/chromedriver

所以我很困惑为什么会出现这个错误。任何帮助都将不胜感激,-戴夫

8个回答

48

补充Niels的回答,对于不使用Babel的人:

  1. 首先使用npm安装chromedrive包。如果你全局安装,请确保将node包添加到你的路径中。
npm install -g chromedriver
如果 PATH 错误仍然存在,只需将其保存到本地项目的依赖项中。
npm install --save-dev chromedriver
  1. 对于不使用Babel的用户
const webdriver = require('selenium-webdriver');
const chrome = require('selenium-webdriver/chrome');
const chromedriver = require('chromedriver');

chrome.setDefaultService(new chrome.ServiceBuilder(chromedriver.path).build());

1
这个可以工作,谢谢。那些应该是const而不是let。此外,在进行设置后,您可能还想包括可用驱动程序的实例化。 - Neil Gaetano Lindberg
是的,仅仅下载驱动并提供$PATH是不够的。我必须使用npm install -g chromedriver。 - Yasin Bekar

17
我遇到了相同的问题。我通过使用chromedriver软件包中的路径解决了它。
这是我的代码:
import webdriver from 'selenium-webdriver';
import chrome from 'selenium-webdriver/chrome';
import chromedriver from 'chromedriver';

chrome.setDefaultService(new chrome.ServiceBuilder(chromedriver.path).build());

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

这是基于这个回答的代码:将require('chromedriver').path直接传递给selenium-webdriver


这很棒,但需要了解Babel和转译。我只想指出所有的 import variableName from 'package-name' 可以简单地写成:const variableName = require('package-name'); - Neil Gaetano Lindberg

10

可能有点晚了,但如果有人遇到这个问题,对我有用的解决方法如下:

首先执行 npm install -g chromedriver --save

然后在代码顶部添加以下行:require('chromedriver');

这里是一个演示:

require('chromedriver');
var webdriver = require('selenium-webdriver');
var driver = new webdriver.Builder()
  .forBrowser('chrome')
  .build();
driver.get('https://google.com');

更多详细信息,您可以访问这里:https://www.npmjs.com/package/chromedriver


1
你的意思是在我们的代码顶部添加这个?我没有任何代码,我只有一个.side文件。这个代码应该放在哪里? - pabrams
它是使用nodejs编写的,因此需要是一个js文件。将其添加到您的e2e测试顶部,例如VisitGoogle.js。'driver.get('https://google.com');'是让chrome driver访问google.com的示例。有关更多详细信息,您需要阅读文档。 - Nick Mitchell
你正在全局保存chromedrive并将其添加到包依赖项中。这将同时在全局和node_modules中保存chromedrive。npm解析将首先查找node_modules,因此不需要进行全局安装。这是重复操作且令人困惑的。你应该选择(1) 全局保存 -g 并添加到 peerDependencies;或者 (2) 保存到依赖项 -s--save - Nick Mitchell

4

只需将驱动程序.exe文件下载到与当前项目文件相同的文件夹中即可。 这对我有用,也可能对您有用。 平安!


你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

2
对于我的小型测试,我在在线研究和这里之后执行了以下步骤:
  1. npm install selenium-webdriver
  2. npm install chromedriver
  3. npm install geckodriver 并打开文件library.js和npm init并运行node library.js (源代码如下)
  4. 错误: (node:14212) UnhandledPromiseRejectionWarning: NoSuchSessionError: invalid session id一些与chromedriver版本不同相关的长时间错误。所以我手动在浏览器中检查了chrome浏览器版本。它是version 73,我的错误是我下载了chromedriver version 74.0
  5. 所以去https://chromedriver.storage.googleapis.com/index.html?path=73.0.3683.68/根据您的操作系统下载并将其下载到~/Downloads中。
  6. 然后在~/Downloads文件夹中打开终端
  7. 然后USER@DESKTOP:~/Downloads$ unzip ~/Downloads/chromedriver_linux64.zip -d ~/Downloads你将在~/Downloads文件夹中获得原始的chromedriver文件。
  8. 现在我将ChromeDriver 73.0.3683.68文件移动到两个位置-我的系统中的usr/local/binusr/bin
  9. usr/local/bin中已经有一个chromedriver文件。
  10. 要移动文件-USER@DESKTOP:~/Downloads$ sudo mv -f ~/Downloads/chromedriver /usr/local/bin/chromedriverUSER@DESKTOP:~/Downloads$ sudo mv -f ~/Downloads/chromedriver /usr/bin/chromedriver您要将文件chromedriver从第一个位置移动到其他位置,这意味着用相同名称替换那些位置中已经存在的任何文件。

  11. 最后我所做的是。关闭VSCode并重新启动它。然后运行我的代码node library.js。对我来说在chrome浏览器中工作了。

源代码:library.js

var webdriver = require('selenium-webdriver');

var By = webdriver.By;

var until = webdriver.until;

var driver = new webdriver.Builder().forBrowser('chrome').build();

driver.get('https://www.google.com');

0

对我来说,最简单的方法是使用本地安装的chromedriver。当我在脚本中忘记要求chromedriver时,就会出现错误。

  1. 运行npm install
  2. 在你的node脚本中,在调用webdriver之前加入require('chromedriver');这一行代码(我使用的是selenium-webdriver

不确定为什么它无法检测到你的全局路径。如果我没有require('chromedriver')这一行代码,我可以将本地的chromedriver文件添加到路径中,然后它就可以工作了。


0

只需输入此内容 -

require("chromedriver");

在此之前 -

let driver = new webdriver.Builder().forBrowser('chrome').build();

0

由于Jenkins Windows从机的原因,我陷入了很多困惑

以下是您可以解决它的方法

按照此链接并根据您的Chrome版本下载兼容驱动程序-

https://www.selenium.dev/documentation/webdriver/getting_started/install_drivers/

下载驱动程序后,请将其放置在C:\驱动器的某个位置,例如c:\ chromedriver

将该路径添加到您的系统环境变量中-参考链接在此处https://www.browserstack.com/guide/run-selenium-tests-using-selenium-chromedriver

完成后,请注意确保重新启动Windows机器,否则Jenkins将无法找到它

另一个调试提示-我最初使用npm全局安装它,并将C:\ Users \ some_windows_user \ AppData \ Roaming \ npm \ node_modules添加到系统环境变量并重新启动了我的机器。这在CI中从未起作用。

因此,像我上面说的那样,将其移动到c:\ chromedriver并添加到系统环境变量中,并100%重新启动您的机器


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接