ChromeDriver 138等待URL变更时崩溃/出现ECONNRESET错误
问题:Bitbucket Docker环境中Nightwatch测试遇302重定向时ECONNRESET错误
环境与依赖配置
运行环境为Bitbucket Docker容器,使用Chrome 138+无头浏览器、Chromedriver 138,测试框架为Nightwatch。项目依赖配置如下:
"devDependencies": { "@percy/cli": "^1.31.0", "@percy/nightwatch": "^2.2.0", "chromedriver": "^131.0.5", "geckodriver": "^5.0.0", "nightwatch": "^3.12.2" }, "dependencies": { "axios": "^1.10.0", "uuid": "^11.1.0" }
问题现象
测试执行到302重定向导致URL变更环节时崩溃,此前页面加载、字段填充、按钮点击等步骤均正常。开启chromedriver verbose模式后,日志显示连接重置错误:
[1751893650.181][DEBUG]: DevTools WebSocket Event: Page.frameScheduledNavigation (session_id=7F4CAC6350069520ADC60D2DB0881989) 2A5C386698EB267F4B7D0F358B0872B7 { "delay": 0, "frameId": "2A5C386698EB267F4B7D0F358B0872B7", "reason": "formSubmissionPost", "url": "https://xxxMYURLxxx" } [1751893650.181][DEBUG]: DevTools WebSocket Event: Page.frameStartedNavigating (session_id=7F4CAC6350069520ADC60D2DB0881989) 2A5C386698EB267F4B7D0F358B0872B7 { "frameId": "2A5C386698EB267F4B7D0F358B0872B7", "loaderId": "2226A713831D06C96DF1D81B9C6A85FD", "navigationType": "differentDocument", "url": "https://xxxMYURLxxx" } [1751893650.182][DEBUG]: DevTools WebSocket Event: Page.frameStartedLoading (session_id=7F4CAC6350069520ADC60D2DB0881989) 2A5C386698EB267F4B7D0F358B0872B7 { "frameId": "2A5C386698EB267F4B7D0F358B0872B7" } [1751893650.182][DEBUG]: DevTools WebSocket Event: Page.frameClearedScheduledNavigation (session_id=7F4CAC6350069520ADC60D2DB0881989) 2A5C386698EB267F4B7D0F358B0872B7 { "frameId": "2A5C386698EB267F4B7D0F358B0872B7" } [546:577:0707/130733.224732:ERROR:google_apis/gcm/engine/registration_request.cc:291] Registration response error message: DEPRECATED_ENDPOINT Error GET /session/17f469c0594a7fa8bb56155128c3be53/url - ECONNRESET Error: socket hang up at Socket.socketCloseListener (node:_http_client:491:27) at Socket.emit (node:events:530:35) at Socket.emit (node:domain:489:12) at TCP.<anonymous> (node:net:346:12) [546:577:0707/130815.012637:ERROR:google_apis/gcm/engine/registration_request.cc:291] Registration response error message: DEPRECATED_ENDPOINT Error GET /session/17f469c0594a7fa8bb56155128c3be53/url - ECONNRESET Error: socket hang up at Socket.socketCloseListener (node:_http_client:491:27) at Socket.emit (node:events:530:35) at Socket.emit (node:domain:489:12) at TCP.<anonymous> (node:net:346:12) Error GET /session/17f469c0594a7fa8bb56155128c3be53/url - ECONNRESET Error: socket hang up at Socket.socketCloseListener (node:_http_client:491:27) at Socket.emit (node:events:530:35) at Socket.emit (node:domain:489:12) at TCP.<anonymous> (node:net:346:12) Error Error while running .getCurrentUrl() protocol action: ECONNRESET socket hang up Error Error while running .url(): Error: ECONNRESET socket hang up
已尝试的Chrome启动参数
已添加以下启动参数,但问题未解决:
args: [ '--headless=new', '--no-sandbox', '--disable-dev-shm-usage', '--disable-background-networking', '--disable-default-apps', '--disable-sync', '--metrics-recording-only', '--disable-component-update', '--disable-background-timer-throttling', '--disable-client-side-phishing-detection', '--disable-popup-blocking', '--disable-prompt-on-repost', '--disable-renderer-backgrounding', '--disable-notifications', '--disable-extensions', '--disable-component-extensions-with-background-pages' ]
解决方案建议
1. 对齐Chromedriver与Chrome版本
当前依赖中Chromedriver版本为131.0.5,与使用的Chrome 138不匹配,Chrome与Chromedriver版本必须严格对应。执行以下命令升级:
npm install chromedriver@138 --save-dev
2. 调整Chrome启动参数
添加网络稳定性相关参数,修改后的启动参数如下:
args: [ '--headless=new', '--no-sandbox', '--disable-dev-shm-usage', '--enable-features=NetworkService,NetworkServiceInProcess', // 修复网络连接问题 '--remote-debugging-port=9222', // 稳定调试端口 '--disable-features=site-per-process', // 避免进程隔离导致连接断开 '--disable-gcm', // 禁用GCM服务消除日志干扰 '--disable-background-networking', '--disable-default-apps', '--disable-sync', '--metrics-recording-only', '--disable-component-update', '--disable-background-timer-throttling', '--disable-client-side-phishing-detection', '--disable-popup-blocking', '--disable-prompt-on-repost', '--disable-renderer-backgrounding', '--disable-notifications', '--disable-extensions', '--disable-component-extensions-with-background-pages' ]
3. 优化测试等待逻辑
在重定向操作后添加显式等待,避免立即调用getCurrentUrl()导致连接未建立:
// 提交触发重定向的操作后,等待页面URL变更 browser.waitUntil(function() { return browser.getCurrentUrl().then(function(currentUrl) { // 替换为目标重定向URL的特征字符串 return currentUrl.includes('目标页面路径标识'); }); }, 10000, '重定向超时,未检测到目标URL');
4. 优化Docker容器配置
在Bitbucket的Docker运行命令中增加资源配置,提升稳定性:
- 共享内存调整:
--shm-size=2g(比--disable-dev-shm-usage更稳定) - 确保容器分配足够CPU资源
内容的提问来源于stack exchange,提问作者Neil
相关产品推荐
相关产品推荐

