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

Cypress单测试用例内跳转两页面失败问题求助

解决Cypress测试用例间登录状态丢失的问题

你的问题核心是Cypress每个it()测试用例会独立重置浏览器上下文,包括清除Cookie、LocalStorage等登录凭证,所以第二个测试用例访问/devices时,因为没有登录状态,就被跳回登录页了。下面给你两种实用的解决方法:

方法1:合并步骤到同一个测试用例

如果你的需求就是在单个测试流程里完成登录+访问设备页操作,直接把两个it()的内容合并到同一个it()里即可,这样整个流程共享同一个浏览器上下文,登录状态会保留:

describe('Sitop Manager Login Page', () => {
  it('登录后访问设备页并操作', () => {
    // 登录流程
    cy.visit('/login')
    cy.get('input[name="username"]').type('admin')
    cy.get('input[name="password"]').type('admin')
    cy.contains('Login').click()
    
    // 用断言代替硬等待,确认登录完成
    cy.url().should('not.include', '/login')
    
    // 访问设备页并操作
    cy.visit('/devices')
    // 等待目标元素可见后再点击,比cy.wait(500)更可靠
    cy.get('ix-menu ix-menu-item[tab-icon=cogwheel]').should('be.visible').click()
  })
})

方法2:使用cy.session()共享登录会话

如果后续有多个测试用例需要用到登录状态,推荐用Cypress的cy.session()缓存登录会话,只需要登录一次,所有测试用例都能复用登录状态,效率更高:

describe('Sitop Manager 测试', () => {
  // 所有测试用例前执行一次登录并缓存会话
  beforeEach(() => {
    cy.session('admin-login', () => {
      cy.visit('/login')
      cy.get('input[name="username"]').type('admin')
      cy.get('input[name="password"]').type('admin')
      cy.contains('Login').click()
      // 断言登录成功,确保缓存的是有效会话
      cy.url().should('not.include', '/login')
    })
    // 每次测试前回到应用初始页
    cy.visit('/')
  })

  it('访问设备页并操作', () => {
    cy.visit('/devices')
    cy.get('ix-menu ix-menu-item[tab-icon=cogwheel]').should('be.visible').click()
  })

  // 其他需要登录状态的测试用例...
})

补充说明

  • 你的cypress.config.js中baseUrl设置是正确的,无需修改;
  • 尽量避免使用cy.wait(500)这类硬等待,改用元素可见性断言,能让测试更稳定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 18:01:19