从 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
错误
错误信息 HTTP 格式无效,解析失败。您是否正在尝试打开与非 SSL Puma 的 SSL 连接?表明正在使用的 HTTP 和 HTTPS 协议之间存在不匹配。如果在需要 HTTP 时尝试使用 HTTPS 连接到 Puma 服务器,则经常会发生这种情况,反之亦然。
如果您通过 HTTP 访问 Puma 服务器,请确保不会无意中配置 SSL/TLS。验证您在测试设置中使用的协议是否正确。
仔细检查您如何设置应用程序服务器以及您在测试中使用的 URL。确保您始终使用 HTTP 或 HTTPS。
使用网络监控工具检查测试期间发出的请求。浏览器开发工具可以帮助您查看加载测试环境时正在触发哪些请求。
增加 Puma 服务器和 Chrome 选项中的日志记录详细程度:
在 Puma 方面,调整 Puma 配置中的日志记录级别 文件或启动命令。
对于 Chrome 日志记录,您已经设置了高详细程度,但是 确保您查看指定目录中生成的日志。
如果您正在针对非 SSL 端点进行测试,但具有 SSL 配置,则可能需要在请求中禁用 SSL 验证:
options.add_argument('--ignore-certificate-errors')
options.add_argument('--allow-insecure-localhost')
由于切换到 Webrick 目前可以消除该错误,因此在使用 Puma 进一步调查时可以考虑暂时使用它。这不是一个长期的解决方案,但它可以帮助隔离问题。
确保您的所有 Ruby gem 均已更新,尤其是与 Capybara、Selenium 和 Puma 相关的那些。有时不兼容可能会导致问题。
如果第一次测试失败并显示“无法访问此站点”,请确保在运行测试之前正确启动应用程序服务器。增加依赖于服务器响应的测试的等待时间也可能是值得的。
如果问题是在 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 的输出日志。这将有助于进一步找出根本原因。