You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins环境下Nightwatch启动Selenium服务器后连接被拒问题

解决Jenkins中Nightwatch启动Selenium后连接被拒绝的问题

我之前在CI环境(包括Jenkins)里也碰到过一模一样的问题——看着Selenium进程明明启动了,但就是连不上。大概率是进程启动了但服务没就绪、环境端口受限,或者版本兼容出了问题,给你几个实用的排查和解决方向:

1. 给Selenium留足启动就绪时间

Nightwatch默认会在Selenium进程启动后立刻发起连接,但有时候进程PID存在不代表服务完全初始化完成。可以在nightwatch.conf.js里增加启动等待超时:

selenium: {
  start_process: true,
  server_path: require('selenium-server').path,
  port: 4444,
  cli_args: {
    'webdriver.chrome.driver': require('chromedriver').path
  },
  // 新增15秒的启动等待时间,按需调整
  start_session_timeout: 15000
}

2. 验证Jenkins节点的端口可用性

  • 先在Jenkins节点上手动启动Selenium,然后用curl http://localhost:4444/wd/hub/status或者telnet localhost 4444检查端口是否能正常访问。如果连不上,可能是Jenkins的安全策略限制了本地端口,或者节点上的防火墙/安全组拦截了4444端口。
  • 也可以尝试更换Selenium端口,比如改成4445,避免和其他服务冲突:
selenium: {
  port: 4445
}

3. 检查Selenium与浏览器驱动的版本兼容性

ECONNRESET错误经常出现在Selenium服务器和ChromeDriver(或GeckoDriver)版本不匹配的情况:

  • 确认你使用的selenium-server和浏览器驱动版本兼容(比如ChromeDriver 118对应Selenium 4.15+这类对应关系)。
  • 在Jenkins构建前强制重新安装依赖,避免缓存的旧版本驱动搞事:
npm install --force selenium-server chromedriver

4. 开启Selenium日志排查启动细节

Nightwatch默认不会输出Selenium的详细启动日志,你可以在配置里开启日志,方便定位到底哪里出了问题:

selenium: {
  start_process: true,
  server_path: require('selenium-server').path,
  port: 4444,
  cli_args: {
    'webdriver.chrome.driver': require('chromedriver').path,
    // 把日志输出到selenium.log文件
    'log': 'selenium.log'
  }
}

构建完成后查看selenium.log,里面会有驱动找不到、浏览器版本不支持这类具体错误信息。

5. 强制启用Headless模式运行浏览器

Jenkins环境通常没有图形界面,必须用Headless模式启动浏览器,否则Selenium可能无法正常初始化会话。在测试配置里添加:

test_settings: {
  default: {
    desiredCapabilities: {
      browserName: 'chrome',
      chromeOptions: {
        args: ['--headless', '--disable-gpu', '--no-sandbox']
      }
    }
  }
}

其中--no-sandbox在Jenkins的Docker容器或受限环境里尤为重要,没有它Chrome大概率启动失败。


内容的提问来源于stack exchange,提问作者elcharrua

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:06:22