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
相关产品推荐
相关产品推荐

