我在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 的人
- 首先使用npm安装chromedrive包。如果全局安装,请确保路径中有节点包
npm install -g chromedriver
如果PATH错误持续存在,只需将其保存到本地项目的依赖项
npm install --save-dev chromedriver
- 对于那些不使用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
测试,我在网上研究后做了以下步骤:
npm install selenium-webdriver
npm install chromedriver
npm install geckodriver
并打开文件library.js和npm init
并运行node library.js
(下面的源代码)Error:
(node:14212) UnhandledPromiseRejectionWarning: NoSuchSessionError: invalid session id
一些长错误与不同的chromedriver版本有关。所以我在浏览器中手动检查了chrome浏览器的版本。是version 73
,我的错误是我下载了chromedriver version 74.0
- 所以根据您的操作系统转到
https://chromedriver.storage.googleapis.com/index.html?path=73.0.3683.68/
下载并在~/Downloads
中下载 - 然后在打开CCD_ 16文件夹中的CCD_
- 然后
USER@DESKTOP:~/Downloads$ unzip ~/Downloads/chromedriver_linux64.zip -d ~/Downloads
您将在~/Downloads
文件夹中获得原始chromedriver
文件 - 现在,我将
ChromeDriver 73.0.3683.68
文件移到了系统中的两个位置——usr/local/bin
和usr/bin
- 在CCD_ 24中已经存在一个CCD_
-
要移动文件-
USER@DESKTOP:~/Downloads$ sudo mv -f ~/Downloads/chromedriver /usr/local/bin/chromedriver
和USER@DESKTOP:~/Downloads$ sudo mv -f ~/Downloads/chromedriver /usr/bin/chromedriver
,您是说要将文件chromedriver从第一个位置移动到其他位置,这意味着用相同的名称替换已经在这些位置的任何文件。 -
我最后所做的就是。关闭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时,我出现了错误。
- 运行
npm install
- 在您的节点脚本中,在调用网络驱动程序之前有一行
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();