首页 > 解决方案 > 按索引显示的 JavaScript 数组不起作用

问题描述

我有一个数组,我想逐项显示它以检查金额。我将 console.log 提供给数组的那一刻,它向我展示了元素,当我尝试将它显示为索引时,它给了我未定义的信息。

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)

    })

    if(localFinishPrice[0] + localFinishPrice[1] == localFinishPrice[2])
        cy.log("Finish price is ok")
    else
        cy.log("Finish price isn't ok")

来自阵列的控制台日志

按索引来自数组的控制台日志

标签: javascriptarrayscypress

解决方案


问题是所有cy.get()命令都排队,并且if在队列开始运行之前语句运行得太快。

您必须使用.then()正确排序操作

let localFinishPrice = []

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

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

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

    if(localFinishPrice[0] + localFinishPrice[1] == localFinishPrice[2])
      cy.log("Finish price is ok")
    else
      cy.log("Finish price isn't ok")

  })

推荐阅读