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

Cypress场景下JavaScript数组打印正常但按索引访问返回undefined

问题原因

你遇到的是Cypress异步命令执行顺序的典型问题:

  • 所有cy.开头的命令都是异步任务,会被加入Cypress的命令队列等待执行,不会立刻运行
  • 你写在最后的if判断是同步代码,会在所有cy.get命令的回调执行前就运行,此时localFinishPrice还是空数组,自然拿不到索引对应的值
  • 控制台打印整个数组时显示有值,是因为控制台打印的是数组的引用,等你点开查看时异步回调已经执行完成、数组已经被填充,所以能看到完整内容;但按索引访问是同步执行时立刻取值,此时数组为空就返回undefined

解决方案

把校验逻辑放到Cypress的异步队列中,确保所有元素取值、数组填充完成后再执行判断,修正后代码如下:

let localFinishPrice = []

cy.get(':nth-child(1) > :nth-child(2) > .bold').invoke("text").then((text)=>{
    let localPrice = parseFloat(text.substring(1))
    localFinishPrice.push(localPrice)
})

cy.get('#totals_table > tbody > :nth-child(2) > :nth-child(2)').invoke("text").then((text)=>{
    let localPrice = parseFloat(text.substring(1))
    localFinishPrice.push(localPrice)
})

cy.get(':nth-child(3) > :nth-child(2) > .bold').invoke("text").then((text) => {
    let localPrice = parseFloat(text.substring(1))
    localFinishPrice.push(localPrice)
})

// 用cy.then将判断逻辑加入异步队列,等待前面所有cy命令执行完成后再运行
cy.then(() => {
    // 浮点数比较不要直接用==,避免精度误差问题
    if(Math.abs(localFinishPrice[0] + localFinishPrice[1] - localFinishPrice[2]) < 0.001) {
        cy.log("Finish price is ok")
    } else {
        cy.log("Finish price isn't ok")
    }
})

额外注意点

如果要做更严谨的断言,建议直接使用Cypress内置的断言方法,避免手动维护全局变量存储取值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 05:57:03