Selenium Grid远程执行测试遇GOAWAY错误求助
Selenium Grid远程运行抛出UnreachableBrowserException(GOAWAY received)问题分析与解决
本地Selenium测试运行正常,但通过Selenium Grid远程驱动执行时,抛出
org.openqa.selenium.remote.UnreachableBrowserException,提示与远程浏览器通信失败,底层错误为java.io.IOException: /192.168.130.157:45902: GOAWAY received。升级Selenium到4.8.0后问题依旧,触发场景为执行滚动元素的JavaScript脚本。
核心原因解析
GOAWAY是HTTP/2协议中服务器主动关闭连接的信号,通常意味着连接因超时、资源限制、协议不兼容等原因被终止,Selenium提示的"浏览器可能已崩溃"是推测性描述,并非直接原因。
具体解决方案
1. 调整HTTP/2连接策略
Selenium 4默认使用HTTP/2通信,部分代理或Grid环境对HTTP/2支持不佳:
- 强制使用HTTP/1.1:初始化RemoteWebDriver时配置HTTP客户端禁用HTTP/2:
import org.openqa.selenium.remote.http.HttpClient; import org.openqa.selenium.remote.http.HttpClientConfig; HttpClient.Factory httpClientFactory = HttpClient.Factory.create( HttpClientConfig.defaultConfig().useHttp11() ); WebDriver driver = new RemoteWebDriver( new URL("http://your-grid-hub:4444"), chromeOptions, httpClientFactory ); - 延长会话超时:启动Grid Hub/Node时增加会话超时参数:
# Hub启动命令 java -jar selenium-server-4.8.0.jar hub --session-timeout 3600 # Node启动命令 java -jar selenium-server-4.8.0.jar node --session-timeout 3600 --max-sessions 2
2. 排查网络代理/防火墙干扰
错误日志显示配置了代理Proxy(manual, http=http://s...),需确认:
- 代理服务器是否支持HTTP/2,若不支持,强制使用HTTP/1.1(同上)
- 临时关闭代理测试,验证是否为代理导致连接中断
- 检查防火墙规则,确保Grid Hub(4444)、Node随机端口(如45902)和测试机器之间的通信未被阻断
3. 确保ChromeDriver与Chrome版本完全匹配
日志中Chrome版本为106.0.5249.119,ChromeDriver版本为106.0.5249.61,小版本差异可能导致通信不稳定:
- 下载与Chrome完全匹配的ChromeDriver版本(106.0.5249.119)替换现有驱动
4. 优化远程节点资源配置
远程节点资源不足可能导致浏览器进程异常,间接触发连接关闭:
- 查看节点系统日志,检查是否有内存溢出(OOM)或CPU过载记录
- 减少节点并发会话数:启动Node时添加
--max-sessions 2限制同时运行的浏览器实例 - 启用Chrome无头模式减少资源占用:
ChromeOptions chromeOptions = new ChromeOptions(); chromeOptions.addArguments("--headless=new");
5. 升级到最新Selenium版本
Selenium 4.9.0及后续版本修复了多个HTTP/2连接相关的bug,建议升级到最新稳定版测试。
内容的提问来源于stack exchange,提问作者Ali
相关产品推荐
相关产品推荐

