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

在Cypress中使用async await获取元素值失败该如何解决

Cypress取值不生效的原因与解决方法

Cypress的所有命令都是异步排队执行的,不会按普通JS的同步顺序立即执行。你代码里外层的cy.log(timeValue)会先加入执行队列,这时候.then()里给timeValue赋值的逻辑还没运行,所以拿到的永远是初始值0。另外Cypress命令本身不支持直接用async/await处理,错误使用async/await也不会生效。

解决方法1:把后续依赖取值的逻辑全部放在.then()回调中

所有需要用到timeValue的测试步骤都要挪到取值完成的回调里,保证执行顺序正确:

it.only('should access Time Worked section and insert same Staff Complement value, but negative as Flexitime',  function () {
    cy.get('[data-tag="staff-complement-input"] > div > span').invoke('text').then(text => +text).then(timeValue => {
        // 所有依赖timeValue的逻辑都写在这里
        cy.log(timeValue) // 这里拿到的就是正确的420
        // 后续操作比如给Flexitime赋值的逻辑都放在这部分
        cy.get('[data-tag="flexitime-input"]').type(-timeValue) // 示例后续操作
    })
})

解决方法2:用Cypress别名存储取值,后续用cy.get('@别名')读取

如果不想嵌套太多回调,可以用别名机制存储异步获取的值:

it.only('should access Time Worked section and insert same Staff Complement value, but negative as Flexitime',  function () {
    // 取值后用as()存为别名
    cy.get('[data-tag="staff-complement-input"] > div > span').invoke('text').then(text => +text).as('timeValue')
    
    // 后续需要用到的地方用cy.get('@别名')读取
    cy.get('@timeValue').then(timeValue => {
        cy.log(timeValue) // 420
        // 执行后续操作
        cy.get('[data-tag="flexitime-input"]').type(-timeValue)
    })
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 07:57:03