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

基于WebdriverIO+Mocha+Node.js框架添加自定义Header自动化测试方案咨询

解决WebDriver中添加自定义Header进行自动化测试的问题

我之前做自动化测试时也碰到过类似的困境——WebDriver原生不支持自定义Header,依赖ModHeader扩展又没效果。给你两个可行的方案,亲测有效:

方案一:修复ModHeader扩展的使用方式

你目前的代码只是完成了扩展的加载,但没有给ModHeader配置要添加的目标Header。可以通过Chrome偏好设置注入扩展的初始配置,步骤如下:

  1. 先获取你的ModHeader扩展ID(在Chrome扩展管理页面能看到,格式类似idgpnmonknjnojddfkpgkljpfnnfcklj)
  2. 修改WebDriver的ChromeOptions,添加扩展同时预设Header配置:
const { Builder } = require('selenium-webdriver');
const chrome = require('selenium-webdriver/chrome');
const path = require('path');
const fs = require('fs');

function getModHeaderExtension() {
  const filename = path.join(__dirname, "Modify.crx");
  console.log(filename);
  const stream = fs.readFileSync(filename);
  return new Buffer(stream).toString('base64');
}

async function setupDriver() {
  const modHeaderBase64 = getModHeaderExtension();
  const extId = "你的ModHeader扩展ID"; // 替换成你实际的扩展ID

  const options = new chrome.Options()
    .addExtension(modHeaderBase64)
    .setUserPreferences({
      [`extensions.${extId}.settings`]: JSON.stringify({
        headers: [
          {
            enabled: true,
            name: "headerKey",
            value: "headervalue",
            comment: ""
          }
        ]
      })
    });

  const driver = await new Builder()
    .forBrowser('chrome')
    .setChromeOptions(options)
    .build();

  return driver;
}

如果上述偏好配置不生效,可能是ModHeader版本差异导致存储路径变化,可以尝试启动后导航到扩展页面,通过JS写入localStorage配置,但预设偏好的方式更稳定。

方案二:使用Chrome DevTools Protocol(CDP)设置Header(更推荐)

不需要依赖任何第三方扩展,直接通过WebDriver的CDP接口和Chrome内核交互,这是最可靠的自动化方案:

const { Builder } = require('selenium-webdriver');
const chrome = require('selenium-webdriver/chrome');

async function setupDriverWithCustomHeader() {
  const options = new chrome.Options();
  const driver = await new Builder()
    .forBrowser('chrome')
    .setChromeOptions(options)
    .build();

  // 通过CDP设置自定义请求Header
  await driver.sendDevToolsCommand('Network.setExtraHTTPHeaders', {
    headers: {
      'headerKey': 'headervalue'
    }
  });

  // 必须开启网络监听,Header设置才会生效
  await driver.sendDevToolsCommand('Network.enable', {});

  return driver;
}

这个方案避开了扩展兼容性问题,配置逻辑更直接。你可以导航到httpbin.org/get这类能返回请求Header的页面,验证自定义Header是否成功添加。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:56:52