Node.js抱怨即使Chromedriver在路径上"The ChromeDriver could not be found on the current PATH"



我在Linux上使用节点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不在我的路径上,但我只是从这里下载了合适的版本——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

所以我很困惑为什么会出现这个错误。感谢您的帮助,-DDave

添加到Niels的答案中,对于那些不使用Babel 的人

  1. 首先使用npm安装chromedrive包。如果全局安装,请确保路径中有节点包
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());

我遇到了同样的问题。我已经通过采用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

可能会有点晚,但如果有人遇到这个问题,我会采取以下措施:

第一个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

只需将driver.exe文件下载到当前项目文件所在的文件夹中。它对我有效。可能对你也有效。和平

对于我的小型selenium-webdriver测试,我在网上研究后做了以下步骤:

  1. npm install selenium-webdriver
  2. npm install chromedriver
  3. npm install geckodriver并打开文件library.js和npm init并运行node library.js(下面的源代码)
  4. Error: (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. 然后在打开CCD_ 16文件夹中的CCD_
  7. 然后USER@DESKTOP:~/Downloads$ unzip ~/Downloads/chromedriver_linux64.zip -d ~/Downloads您将在~/Downloads文件夹中获得原始chromedriver文件
  8. 现在,我将ChromeDriver 73.0.3683.68文件移到了系统中的两个位置——usr/local/binusr/bin
  9. 在CCD_ 24中已经存在一个CCD_
  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');

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

  1. 运行npm install
  2. 在您的节点脚本中,在调用网络驱动程序之前有一行require('chromedriver');(我将它与selenium-webdriver一起使用)

不知道为什么它没有检测到你的全球路径。如果我没有require('chromedriver')行,我可以将本地chromedriver文件添加到路径中,它就可以工作了。

由于Jenkins windows slave的这一点而陷入了很多混乱

以下是如何修复

遵循此链接并根据您的chrome版本下载兼容的驱动程序-

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

下载驱动程序后,将其放置在c:\drive-like中的某个位置c: \彩色打印机

将该路径添加到系统环境变量中-此处为参考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%重新启动机器

只需输入这个-

require("chromedriver");

在此之前-

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

相关内容

  • 没有找到相关文章

最新更新