Cypress启用experimentalSessionAndOrigin后所有spec文件消失如何解决
问题原因
开启experimentalSessionAndOrigin开关会触发Cypress 10+版本的E2E模块配置重置逻辑:该特性关联Cypress重构后的跨域控制、会话管理模块,开启后框架会覆盖E2E测试的默认配置项,包括spec文件扫描路径、support入口文件路径,同时自动生成空白的cypress/support/e2e.js作为新的默认support入口,最终导致原有spec文件不在扫描路径内、原有support全局逻辑未被加载,表现为识别为全新项目、历史用例不显示。
解决步骤
- 修正spec文件匹配规则
打开项目根目录的cypress.config.js,在e2e配置块中添加specPattern字段,值为你原有spec测试用例的存放路径匹配规则,默认路径规则可参考如下配置,如果你之前自定义过用例存放目录,替换为实际路径即可:const { defineConfig } = require("cypress"); module.exports = defineConfig({ e2e: { experimentalSessionAndOrigin: true, // 匹配原有spec文件路径 specPattern: "cypress/e2e/**/*.cy.{js,jsx,ts,tsx}", // 原有setupNodeEvents逻辑保留在此处 setupNodeEvents(on, config) {}, }, }); - 修复support文件加载逻辑
自动生成的cypress/support/e2e.js为空白文件,你需要将原有support入口文件(旧版本默认路径为cypress/support/index.js)中的所有自定义命令、全局钩子、通用配置代码全部迁移到e2e.js中。如果你不想使用自动生成的e2e.js,也可以在e2e配置块中添加supportFile字段,直接指向你原来的support入口文件路径即可。 - 排查配置冲突
如果你是从Cypress 9及更低版本升级到10+版本,检查项目根目录是否残留旧版本的cypress.json配置文件,若存在该文件,将其中所有配置迁移到cypress.config.js后删除旧文件,避免双配置文件加载冲突。 - 重启Cypress验证
所有配置修改完成后完全关闭Cypress进程重新启动,即可看到原有所有spec测试用例。此时cy.session()能力已正常可用,将登录逻辑包裹在cy.session()中实现跨用例Cookie持久化即可,参考用法:// support/e2e.js中定义登录命令 Cypress.Commands.add('persistLogin', (user, pwd) => { cy.session([user, pwd], () => { cy.visit('/login') cy.get('[name=username]').type(user) cy.get('[name=password]').type(pwd) cy.get('[type=submit]').click() }) }) // 用例文件中调用 describe('业务测试套件', () => { beforeEach(() => { cy.persistLogin('test_account', 'test_password') }) it('测试用例1', () => { // 测试逻辑,登录态Cookie自动保留 }) it('测试用例2', () => { // 无需重复登录,Cookie自动复用 }) })
注意:如果开启该特性后出现跨域访问报错,可额外在e2e配置块中添加
chromeWebSecurity: false配置关闭浏览器同源安全限制,适配跨域测试场景。
内容的提问来源于stack exchange,提问作者testaway
相关产品推荐
相关产品推荐

