You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Capybara请求及测试添加HTTP请求头?

当然有办法啦!针对你当前使用的Chrome/Selenium和capybara-webkit两种驱动,分别有对应的添加HTTP请求头的方案,结合你的gem版本给你详细说明:

针对Chrome/Selenium驱动(你当前配置的默认JS驱动)

在你的capybara (2.4.4) + chromedriver-helper (1.0.0) 环境下,可以通过修改Chrome启动参数或者注入JavaScript两种方式添加请求头:

方法1:通过Chrome启动参数设置全局请求头

修改你现有的Chrome驱动注册代码,添加--header启动参数来指定自定义请求头:

Capybara.register_driver :chrome do |app|
  options = Selenium::WebDriver::Chrome::Options.new
  # 格式为 "Header-Name: Value",可以添加多个
  options.add_argument('--header=X-Custom-Header: MyTestValue')
  options.add_argument('--header=Another-Test-Header: HelloWorld')
  Capybara::Selenium::Driver.new(app, browser: :chrome, options: options)
end
Capybara.javascript_driver = :chrome
Capybara::Screenshot.register_driver(:chrome) do |driver, path|
  driver.browser.save_screenshot(path)
end

注意:部分较新版本的Chrome可能移除了--header这个启动参数,如果遇到参数无效的情况,可以试试下面的JavaScript注入方法。

方法2:注入JavaScript覆盖XMLHttpRequest(适配AJAX请求)

如果启动参数方法不生效,可以在测试前注入一段JS,让页面内所有AJAX请求自动带上自定义头:

# 在你的测试用例中(比如before钩子)添加
before(:each) do
  page.execute_script <<-JS
    (function() {
      const originalOpen = XMLHttpRequest.prototype.open;
      XMLHttpRequest.prototype.open = function(method, url) {
        this.setRequestHeader('X-Custom-Header', 'MyTestValue');
        this.setRequestHeader('Another-Test-Header', 'HelloWorld');
        return originalOpen.apply(this, arguments);
      };
    })();
  JS
end

注意:这个方法仅对页面加载后的AJAX请求生效,初始页面加载的请求可能不会带上自定义头,如果需要覆盖初始请求,推荐尝试方法1或者切换到capybara-webkit驱动。

针对capybara-webkit驱动

你使用的capybara-webkit (1.5.2) 原生支持设置HTTP请求头,方式更简洁可靠,还能覆盖初始页面加载的请求:

方法1:全局配置驱动时设置

注册webkit驱动时直接添加请求头:

Capybara.register_driver :webkit do |app|
  driver = Capybara::Webkit::Driver.new(app)
  # 设置单个或多个请求头
  driver.header('X-Custom-Header', 'MyTestValue')
  driver.header('Another-Test-Header', 'HelloWorld')
  driver
end
# 若需要将webkit设为默认JS驱动,取消下面注释
# Capybara.javascript_driver = :webkit

方法2:单个测试用例中临时设置

在特定测试的钩子中添加请求头,仅对当前测试生效:

before(:each) do
  page.driver.header('X-Custom-Header', 'MyTestValue')
end

内容的提问来源于stack exchange,提问作者kapso

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:58:25