WebdriverIO无头及有头模式下Chrome新版本Basic auth认证问题求助
WebdriverIO Chrome 新版本 Basic Auth 认证兼容方案
方案1:CDP 注入请求头(推荐,全模式兼容)
该方案是当前兼容性最高的实现,同时支持Chrome新旧版本、无头/有头模式,无特殊场景限制。
- 实现逻辑:通过WebdriverIO内置的Chrome DevTools Protocol接口,在所有请求发出前自动注入Basic Auth认证头
- 代码示例:
// 可放在全局before钩子或者单个测试套件的前置钩子中 before(async () => { // 构造Basic Auth凭证 const authToken = Buffer.from('你的账号:你的密码').toString('base64') // 调用CDP接口设置全局额外请求头 await browser.cdp('Network', 'setExtraHTTPHeaders', { headers: { 'Authorization': `Basic ${authToken}` } }) // 完成设置后再访问目标站点,URL无需拼接账号密码 await browser.url('https://你的测试站点地址') })
方案2:Chrome 启动参数配置(适用于整站需要Basic Auth的场景)
如果你的测试环境所有资源都需要Basic Auth校验,可以直接在浏览器启动参数中配置白名单,自动传递认证凭证。
- 代码示例(修改
wdio.conf.js的capabilities配置):
exports.config = { // 其他配置省略 capabilities: [{ browserName: 'chrome', 'goog:chromeOptions': { args: [ // 无头模式可保留以下参数,有头模式无需修改也可生效 // '--headless=new', '--auth-server-whitelist="*"', '--auth-negotiate-delegate-whitelist="*"', '--auth-schemes="basic"' ], prefs: { // 禁用浏览器密码保存提示 'profile.password_manager_enabled': false, 'credentials_enable_service': false } } }] }
- 注意:该方案会默认给所有访问的站点传递认证凭证,多站点混合测试的场景不推荐使用。
方案3:原生弹窗操作(仅兼容有头模式)
如果你的测试仅需要在有头模式下执行,可以直接操作原生认证弹窗完成校验。
- 代码示例:
before(async () => { await browser.url('https://你的测试站点地址') // 等待认证弹窗加载完成,超时时间可自行调整 await browser.waitUntil(async () => await browser.isAlertOpen(), 5000) // 输入账号+Tab键+密码,提交认证 await browser.sendAlertText(`你的账号\u{E004}你的密码`) await browser.acceptAlert() })
- 注意:Chrome无头模式不会渲染原生系统弹窗,该方案无法在无头模式下运行。
内容的提问来源于stack exchange,提问作者Tester123
相关产品推荐
相关产品推荐

