使用Nightwatch-Cucumber对接Selenium Grid时遇连接拒绝错误求助
我来帮你一步步排查这个连接问题,咱们从最基础的环节开始:
1. 确认Selenium Hub确实已经启动
首先,你得确保Selenium Hub是正常运行的。用你依赖里的selenium-server-standalone-3.9.1.jar,执行启动命令:
java -jar ./node_modules/selenium-server-standalone-jar/jar/selenium-server-standalone-3.9.1.jar -role hub
启动成功后,打开浏览器访问 http://localhost:4444/grid/console —— 如果能看到Grid控制台页面,说明Hub运行正常;如果打不开,那Hub肯定没启动起来,检查命令里的jar路径是否正确,或者有没有Java环境问题。
2. 修正Nightwatch配置,指向Selenium Hub
你的nightwatch.conf.js目前只配置了globals_path,还需要补充Grid相关的核心设置。在配置的test_settings部分,确保以下几项正确:
const config = { globals_path: "globals.js", // 其他基础配置... test_settings: { default: { // 指向Selenium Hub的地址和端口 selenium_host: 'localhost', // 如果Hub在远程机器,替换成对应的IP/域名 selenium_port: 4444, // Hub默认端口,如果你改了Hub端口要同步修改 // 关键:禁止Nightwatch自动启动本地Selenium服务 selenium: { start_process: false }, desiredCapabilities: { browserName: 'chrome', // 或者你要测试的浏览器 // 可选:如果需要指定节点的平台、版本等,比如 platform: 'WINDOWS' } } } }; module.exports = config;
这里最容易踩坑的是start_process: false —— 默认Nightwatch会自己启动本地Selenium服务,而用Grid的话必须关掉这个选项,让它去连接已经运行的Hub。
3. 确保Selenium节点已成功注册到Hub
Hub启动后,还要启动至少一个节点并注册到Hub。比如启动Chrome节点的命令:
# Windows系统 java -Dwebdriver.chrome.driver=./node_modules/chromedriver/lib/chromedriver/chromedriver.exe -jar ./node_modules/selenium-server-standalone-jar/jar/selenium-server-standalone-3.9.1.jar -role node -hub http://localhost:4444/grid/register # Mac/Linux系统 java -Dwebdriver.chrome.driver=./node_modules/chromedriver/bin/chromedriver -jar ./node_modules/selenium-server-standalone-jar/jar/selenium-server-standalone-3.9.1.jar -role node -hub http://localhost:4444/grid/register
启动Firefox节点的话,把chromedriver路径换成geckodriver的路径:
# Windows -Dwebdriver.gecko.driver=./node_modules/geckodriver/geckodriver.exe # Mac/Linux -Dwebdriver.gecko.driver=./node_modules/geckodriver/geckodriver
节点启动成功后,回到Hub的控制台页面,应该能看到注册成功的节点信息。如果节点没显示,检查命令里的Hub地址是否正确,或者驱动路径有没有写错。
4. 排查端口占用或防火墙问题
如果Hub和节点都启动了,但还是报连接拒绝,检查4444端口是否被其他程序占用:
- Windows:执行
netstat -ano | findstr :4444,如果有结果,找到对应的PID结束进程,或者换个Hub端口(启动时加-port 4445,同时修改Nightwatch配置里的selenium_port) - Mac/Linux:执行
lsof -i :4444,同样处理占用的进程或换端口
另外,如果你是远程连接Hub,还要确保Hub所在机器的防火墙没有拦截4444端口。
5. 验证依赖版本兼容性
你的依赖版本整体还算匹配,但要注意:
chromedriver@2.37对应Chrome浏览器版本64-66geckodriver@1.11对应Firefox版本57-61
如果你的浏览器版本太新或太旧,可能导致节点启动失败,间接影响Grid连接。可以升级对应驱动版本试试(比如chromedriver升到对应你Chrome版本的版本)。
完成以上步骤后,再运行你的Nightwatch-Cucumber测试,应该就能正常连接到Selenium Grid了。
内容的提问来源于stack exchange,提问作者GRme

