每个 capybara/selenium 4 测试的格式错误的请求

问题描述 投票:0回答:1

从 selenium 3 升级到 4 后,每个功能测试都会触发两个无效请求,并且 puma 会记录以下错误:

2024-02-06 09:38:36 -03 HTTP parse error, malformed request: #<Puma::HttpParserError: Invalid HTTP format, parsing fails. Are you trying to open an SSL connection to a non-SSL Puma?>

这就是 chromedriver 的配置方式:

Capybara.register_driver :chrome do |app|
  options = Selenium::WebDriver::Chrome::Options.new(
    args: [
      'headless=new',
      'no-sandbox',
      '--window-size=2560,1440',
      '--disable-web-security',
      '--allow-running-insecure-content',
      "--enable-logging", # Enables logging
      "--log-level=0", # Enables all logging
      "--v=1" # Sets the verbosity level of logging
    ]
  )

  options.add_option('goog:loggingPrefs', { browser: 'ALL' })

  Capybara::Selenium::Driver.new(app, browser: :chrome, options: options)
end

我无法识别这些请求是什么? 关于如何摆脱它们或如何调试这些请求有什么想法吗?

--

2024 年 9 月更新

仍然没有弄清楚这一点,并且在将 chromedriver 从 127 升级到 128 后开始出现相同的错误。

此外,每个第一个功能测试都会失败,并显示一条消息

This site can't be reached

更新

将服务器从 puma 更改为 webrick 将消除警告,但第一个功能测试仍然失败,并出现

This site can't be reached
错误

selenium-webdriver selenium-chromedriver google-chrome-devtools capybara
1个回答
0
投票

了解 HTTP 解析错误


错误信息 HTTP 格式无效,解析失败。您是否正在尝试打开与非 SSL Puma 的 SSL 连接?表明正在使用的 HTTP 和 HTTPS 协议之间存在不匹配。如果在需要 HTTP 时尝试使用 HTTPS 连接到 Puma 服务器,则经常会发生这种情况,反之亦然。

调试步骤

  1. 检查服务器配置:

如果您通过 HTTP 访问 Puma 服务器,请确保不会无意中配置 SSL/TLS。验证您在测试设置中使用的协议是否正确。

  1. 水豚配置:

仔细检查您如何设置应用程序服务器以及您在测试中使用的 URL。确保您始终使用 HTTP 或 HTTPS。

  1. 检查网络流量:

使用网络监控工具检查测试期间发出的请求。浏览器开发工具可以帮助您查看加载测试环境时正在触发哪些请求。

  1. 记录:

增加 Puma 服务器和 Chrome 选项中的日志记录详细程度:

  • 在 Puma 方面,调整 Puma 配置中的日志记录级别 文件或启动命令。

  • 对于 Chrome 日志记录,您已经设置了高详细程度,但是 确保您查看指定目录中生成的日志。

潜在的修复

  1. 禁用 SSL 验证:

如果您正在针对非 SSL 端点进行测试,但具有 SSL 配置,则可能需要在请求中禁用 SSL 验证:

options.add_argument('--ignore-certificate-errors')
options.add_argument('--allow-insecure-localhost')
  1. 使用Webrick:

由于切换到 Webrick 目前可以消除该错误,因此在使用 Puma 进一步调查时可以考虑暂时使用它。这不是一个长期的解决方案,但它可以帮助隔离问题。

  1. 更新 Gem 依赖项:

确保您的所有 Ruby gem 均已更新,尤其是与 Capybara、Selenium 和 Puma 相关的那些。有时不兼容可能会导致问题。

  1. 检查您的测试环境:

如果第一次测试失败并显示“无法访问此站点”,请确保在运行测试之前正确启动应用程序服务器。增加依赖于服务器响应的测试的等待时间也可能是值得的。

  1. 降级 ChromeDriver:

如果问题是在 ChromeDriver 升级后出现的,请考虑在调试问题时暂时将 ChromeDriver 降级回版本 127。

水豚配置示例 以下是重组水豚配置的方法:

Capybara.register_driver :chrome do |app|
  options = Selenium::WebDriver::Chrome::Options.new
  options.add_argument('--headless=new')
  options.add_argument('--no-sandbox')
  options.add_argument('--window-size=2560,1440')
  options.add_argument('--disable-web-security')
  options.add_argument('--allow-running-insecure-content')
  options.add_argument('--ignore-certificate-errors')
  options.add_argument('--allow-insecure-localhost')
  options.add_option('goog:loggingPrefs', { browser: 'ALL' })

  Capybara::Selenium::Driver.new(app, browser: :chrome, options: options)
end

结论

继续执行这些调试步骤和建议的配置。如果这些方法都不能解决问题,请提供更具体的详细信息,例如您的 Puma 服务器配置、如何在测试环境中启动服务器,以及 Puma 和 Chrome 的输出日志。这将有助于进一步找出根本原因。

© www.soinside.com 2019 - 2024. All rights reserved.