Nightwatch运行测试报Connection Refused 已启动Selenium Server仍连接失败
Nightwatch运行用例报「Connection Refused! Is Selenium Server Started?」排查方案(已确认Selenium启动场景)
以下步骤按问题出现概率从高到低排序,逐一排查即可:
- 第一步:核对端口、Host配置一致性
先查看Selenium启动终端的日志,找到类似Selenium Server is up and running on port xxxx的记录,记好实际监听端口。打开nightwatch.json找到selenium配置块,确认两个参数:port值必须和刚才查到的Selenium实际监听端口完全一致,Selenium默认端口是4444,但如果启动时4444被其他服务占用,Selenium会自动切换端口,配置没同步就会报连接拒绝- 本地启动Selenium的场景下,
host值必须填127.0.0.1,不要填公网IP、错误的局域网地址,也不要留空
快速验证方式:Selenium启动后直接在浏览器访问http://127.0.0.1:你的Selenium端口/wd/hub/static/resource/hub.html,能正常打开Selenium控制台就说明服务本身运行正常,问题出在配置或兼容层面。
- 第二步:排查协议、运行模式错配
如果你用的是Selenium 4及以上版本,默认启用HTTP/2,搭配v1.x版本的Nightwatch(很多使用Node14的用户默认安装的是旧版Nightwatch)时,因为旧版Nightwatch只支持HTTP/1.1请求,会直接被拒绝连接。两种解决方式二选一:- 启动Selenium时加参数禁用HTTP/2:
java -jar selenium-server-standalone-对应版本号.jar --http2-enabled false - 把Nightwatch升级到兼容Selenium4的版本
另外注意不要混配运行模式:如果是直连浏览器驱动(ChromeDriver/GeckoDriver)不走Selenium的模式,要把selenium.start_process设为false,同时正确配置webdriver块下对应浏览器的驱动路径、端口,不要同时开启Selenium配置和直连配置。
- 启动Selenium时加参数禁用HTTP/2:
- 第三步:排查端口占用、防火墙拦截
执行命令确认端口监听的进程是Selenium本身:- Windows系统执行:
netstat -ano | findstr "你配置的Selenium端口" - Mac/Linux系统执行:
lsof -i:你配置的Selenium端口
如果返回的进程不是Selenium对应的java进程,说明端口被其他服务占用,要么停掉占用端口的服务,要么给Selenium更换启动端口,同步修改Nightwatch配置即可。
另外可以临时关闭本地防火墙、安全防护软件测试一次,如果关闭后能正常连接,给node进程、Selenium端口添加本地放行规则就行。
- Windows系统执行:
- 第四步:核对版本兼容性(当前使用Node v14.16.0需重点关注)
- Nightwatch v3及以上版本要求Node >=16,在Node14环境下安装会出现底层请求异常,直接报连接拒绝,Node14环境最高安装v2.6.x版本的Nightwatch即可
- 不建议用Selenium 4.6+版本搭配v2.x版本的Nightwatch,协议兼容问题较多,优先选Selenium 3.141.59稳定版搭配Node14+Nightwatch2.x的组合,踩坑概率最低。
内容的提问来源于stack exchange,提问作者Watson Liou
相关产品推荐
相关产品推荐

