Ruby升级至3.1.2后Cucumber测试出现Selenium会话ID缺失错误
问题描述
将Ruby从2.5.3版本升级到3.1.2版本及相关gem包后,原本在Chrome浏览器上正常运行的Cucumber测试出现如下错误:
Selenium::WebDriver::Error::WebDriverError: no sessionId in returned payload
环境信息
- SELENIUM BROWSER: chrome
- CHROME PATH:
/opt/google/chrome - CHROME DRIVER:
/home/####/git/se/acceptancetests/chromedriver
排查与解决方案
以下是针对该问题的常见解决方向:
1. 验证Chrome与ChromeDriver版本兼容性
Selenium对Chrome和ChromeDriver的版本匹配要求严格,版本不兼容是触发该错误的核心原因之一:
- 查看Chrome版本:在Chrome地址栏输入
chrome://version/获取完整版本号 - 查看ChromeDriver版本:执行命令
chromedriver --version - 确保ChromeDriver主版本与Chrome完全一致(比如Chrome 118.x对应ChromeDriver 118.x),不匹配则下载对应版本替换现有文件。
2. 调整Selenium Gem版本适配Ruby 3.1.2
Ruby版本升级后,需同步适配Selenium gem版本:
- 查看Gemfile.lock中的
selenium-webdriver版本,建议升级到支持Ruby 3.x的4.x系列稳定版 - 执行
bundle update selenium-webdriver更新gem包
3. 修复ChromeDriver权限与路径配置
- 检查ChromeDriver可执行权限:执行
chmod +x /home/####/git/se/acceptancetests/chromedriver确保文件具备执行权限 - 在Cucumber的Selenium配置中明确指定路径,示例代码:
Capybara.register_driver :chrome do |app| options = Selenium::WebDriver::Chrome::Options.new options.binary = '/opt/google/chrome' Capybara::Selenium::Driver.new( app, browser: :chrome, options: options, driver_path: '/home/####/git/se/acceptancetests/chromedriver' ) end
4. 清理Ruby版本升级后的依赖冲突
Ruby 3.x对部分旧gem兼容性有变化,需排查依赖冲突:
- 更新或移除过时的测试类gem(如旧版本的capybara、cucumber)
- 执行
bundle clean --force清理冗余gem后,重新执行bundle install安装依赖
5. 调整Chrome启动参数
添加基础启动参数排除浏览器启动异常:
options.add_argument('--headless=new') options.add_argument('--no-sandbox') options.add_argument('--disable-dev-shm-usage')
内容的提问来源于stack exchange,提问作者hotspuds
相关产品推荐
相关产品推荐

