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

Cypress运行访问不同域名的测试用例时第三次测试报错如何解决?

问题原因

这个报错是Cypress的跨域安全限制导致的:
Cypress的运行逻辑依赖浏览器同源策略,默认将测试执行上下文绑定到首次访问的域名。当你在测试中切换不同顶级域名时,会触发上下文权限丢失问题,尤其在9.x及更早版本的Cypress中,第三次切回原有域名时会因为上下文会话失效触发报错,和你复现的场景完全匹配。

解决方案

你可以根据自己使用的Cypress版本选对应的方案:

  • 方案1:升级到Cypress 10.0+版本,开启多域名支持配置
    在cypress.config.js的e2e配置项中添加如下配置即可:
    const { defineConfig } = require('cypress')
    
    module.exports = defineConfig({
      e2e: {
        experimentalSessionAndOrigin: true,
      },
    })
    
    该配置会自动在切换域名时隔离、恢复会话上下文,无需额外修改测试代码即可解决跨域名切换报错的问题。
  • 方案2:旧版本Cypress用cy.session()封装域名访问逻辑
    每个域名的访问操作都包裹在session中,切换时自动恢复对应上下文:
    // 封装访问example.cypress.io的逻辑
    const visitExample = () => {
      cy.session('exampleDomain', () => {
        cy.visit('https://example.cypress.io')
      })
    }
    
    // 封装访问walla.co.il的逻辑
    const visitWalla = () => {
      cy.session('wallaDomain', () => {
        cy.visit('https://www.walla.co.il/')
      })
    }
    
    // 测试用例调用
    it('test 1', () => {
      visitExample()
      // 测试逻辑
    })
    it('test 2', () => {
      visitWalla()
      // 测试逻辑
    })
    it('test 3', () => {
      visitExample()
      // 不会再报错
    })
    
  • 方案3:拆分测试文件
    如果不同域名的测试没有上下文依赖,你可以把不同域名的测试拆分到独立的spec文件中,每个spec文件只测试单个域名,从根源规避跨域切换问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 18:24:03