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

如何在Cypress中保存变量数据并在其他代码块复用?

在Cypress中复用动态数据的实现方法

当然可以实现动态数据的复用,下面提供几种实用方案,适配你提到的“获取设备名称后验证新窗口标题”的场景:

1. 使用Cypress别名(.as())

这是单测试用例内复用数据最常用的方式,通过别名存储动态值,后续用cy.get('@别名')调用:

// 获取设备名称并设置别名
cy.get('.device-name').invoke('text').as('deviceName')

// 点击目标设备
cy.get('.device-item').click()

// 拦截新窗口打开操作并验证标题
cy.window().then((win) => {
  cy.stub(win, 'open').callsFake((url) => {
    cy.visit(url)
    // 取出别名存储的设备名称,验证标题包含该值
    cy.get('@deviceName').then((deviceName) => {
      cy.title().should('include', deviceName)
    })
  })
})

2. 使用Cypress环境变量

如果需要跨测试用例复用数据,可以将值存入环境变量:

// 保存设备名称到环境变量
cy.get('.device-name').invoke('text').then((name) => {
  Cypress.env('deviceName', name)
})

// 后续步骤中直接调用环境变量
cy.window().then((win) => {
  cy.stub(win, 'open').callsFake((url) => {
    cy.visit(url)
    cy.title().should('include', Cypress.env('deviceName'))
  })
})

注意:环境变量会在测试会话期间保持,适合跨用例共享数据。

3. 使用闭包变量

在测试函数内定义变量,通过.then()回调赋值(需注意Cypress的异步执行特性):

let deviceName;

// 异步获取并赋值设备名称
cy.get('.device-name').invoke('text').then((name) => {
  deviceName = name
})

// 点击设备后验证新窗口标题
cy.get('.device-item').click()

cy.window().then((win) => {
  cy.stub(win, 'open').callsFake((url) => {
    cy.visit(url)
    cy.title().should('include', deviceName)
  })
})

⚠️ 注意:不能在同步代码中直接访问deviceName,必须确保赋值完成后再使用,利用Cypress的命令队列顺序执行特性即可避免问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 20:24:31