启用experimentalSessionAndOrigin后,如何取消it语句后的about:blank跳转?
解决Cypress注册自动化的会话跳转问题
方案1:用单个it配合步骤日志替代多it拆分
因为experimentalSessionAndOrigin会在每个it结束时自动跳转到about:blank,把整个注册+邮箱确认流程放在单个it里就能彻底避免这个问题。同时用cy.log标记关键步骤,保证命令行和mochawesome报告里的步骤依然清晰。
示例代码:
it('完成注册及邮箱确认全流程', () => { cy.log('**步骤1:打开注册页面**') cy.visit('/register') cy.log('**步骤2:填写注册表单**') cy.get('#username').type('test_user') cy.get('#email').type(Cypress.env('temp_email')) // 补充其他表单字段填写逻辑 cy.log('**步骤3:提交注册请求**') cy.get('button[type="submit"]').click() cy.log('**步骤4:调用临时邮箱API获取确认链接**') cy.request('GET', `${Cypress.env('temp_email_api')}/messages`) .then(response => { const confirmLink = response.body.messages[0].content.match(/https:\/\/.*confirm/)[0] cy.log('**步骤5:访问邮箱确认链接**') cy.visit(confirmLink, { failOnStatusCode: false }) }) cy.log('**步骤6:验证注册成功状态**') cy.get('.success-message').should('contain', '注册成功') })
这种方式没有it间的会话清理,也就不会触发about:blank跳转,同时每个步骤都有明确的日志标记,完全满足你对步骤可视化的需求。
方案2:手动管理会话减少自动跳转(有限适配)
如果一定要保留多it结构,可以尝试通过cy.session手动控制会话生命周期,减少自动清理行为:
首先在cypress.config.js里保持启用配置:
module.exports = defineConfig({ e2e: { experimentalSessionAndOrigin: true, session: { clearSessionOnRunCompletion: false // 全局禁用会话自动清理 } } })
然后在测试中用cy.session包裹会话逻辑,跨it复用:
beforeEach(() => { cy.session('register_session', () => { // 初始化会话,比如打开注册页、确保必要Cookie存在 cy.visit('/register') }, { cacheAcrossSpecs: true, validate: () => { cy.getCookie('session_id').should('exist') // 自定义会话有效性验证 } }) }) it('步骤1:填写注册表单', () => { cy.get('#username').type('test_user') cy.get('#email').type(Cypress.env('temp_email')) }) it('步骤2:提交注册并获取确认链接', () => { cy.get('button[type="submit"]').click() cy.request('GET', `${Cypress.env('temp_email_api')}/messages`) .then(response => { const confirmLink = response.body.messages[0].content.match(/https:\/\/.*confirm/)[0] cy.wrap(confirmLink).as('confirmLink') }) }) it('步骤3:完成邮箱确认', () => { cy.get('@confirmLink').then(link => { cy.visit(link) }) cy.get('.success-message').should('contain', '注册成功') })
注意:这种方式不一定能完全消除about:blank跳转,因为Cypress的会话隔离机制还是会在it间做基础清理,所以方案1的可靠性更高。
额外提示
- 要是想让步骤更规整,可以自定义一个
cy.step命令,把cy.log和步骤逻辑封装起来,代码会更简洁。 - 别再尝试用
cy.config修改experimentalSessionAndOrigin了,这个配置是只读的,只能在cypress.config.js里全局设置。
内容的提问来源于stack exchange,提问作者skkrrea
相关产品推荐
相关产品推荐

