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

如何为cy.origin添加Basic Authentication?切换baseUrl时如何保留该认证?

为Cypress的cy.origin命令添加Basic Authentication

方法1:URL中嵌入认证信息

这是最可靠的实现方式,直接将用户名和密码嵌入到cy.origin的目标URL中,浏览器会自动完成Basic Auth验证:

cy.origin('https://your-username:your-password@auth-protected-site.com', () => {
  cy.visit('/') // 直接访问受保护页面,无需额外处理
})

注意:如果凭证包含特殊字符(如@、&),需要先做URL编码。

方法2:通过请求头传递认证信息

若不想在URL中暴露凭证,可以在cy.origin内部的cy.visit请求中添加Authorization头:

cy.origin('https://auth-protected-site.com', () => {
  const encodedCreds = btoa('your-username:your-password') // Base64编码用户名密码
  cy.visit('/', {
    headers: {
      'Authorization': `Basic ${encodedCreds}`
    }
  })
})

⚠️ 部分浏览器可能会拦截这种方式的Basic Auth,优先推荐URL嵌入法。


切换不同baseUrl时保持Basic Auth访问

Basic Auth是基于域名生效的,不同域名需单独处理;同主域名下的子域名会自动共享认证状态,以下是通用解决方案:

1. 同主域名场景

如果切换的baseUrl属于同一个主域名(比如https://app1.example.com和https://app2.example.com),只需在第一个域名完成认证后,浏览器会自动在同主域名下发送认证信息,直接切换baseUrl访问即可:

// 先在第一个域名完成认证
cy.origin('https://your-username:your-password@app1.example.com', () => {
  cy.visit('/')
})

// 切换baseUrl后直接访问
Cypress.config('baseUrl', 'https://app2.example.com')
cy.visit('/') // 自动带上Basic Auth凭证

2. 不同域名场景:用Cypress Session复用认证状态

用Cypress的cy.session封装认证逻辑,切换baseUrl时调用该命令快速恢复认证状态,避免重复输入凭证:

// 封装自定义命令
Cypress.Commands.add('setupBasicAuth', (credentials, domain) => {
  cy.session([credentials, domain], () => {
    cy.origin(domain, { args: credentials }, ({ username, password }) => {
      const authHeader = `Basic ${btoa(`${username}:${password}`)}`
      cy.visit('/', { headers: { 'Authorization': authHeader } })
      // 验证认证成功(比如检查是否返回401)
      cy.get('body').should('not.contain', '401 Unauthorized')
    })
  })
})

// 使用示例
const authCreds = { username: 'user', password: 'pass' }

// 第一个baseUrl
Cypress.config('baseUrl', 'https://site-a.com')
cy.setupBasicAuth(authCreds, 'https://site-a.com')
cy.visit('/dashboard')

// 切换到第二个baseUrl
Cypress.config('baseUrl', 'https://site-b.com')
cy.setupBasicAuth(authCreds, 'https://site-b.com')
cy.visit('/profile')

该方式会缓存认证后的会话状态,重复调用时直接复用,提升测试效率。


内容的提问来源于stack exchange,提问作者Michael S.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 00:25:22