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

启用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 14:30:47