【问题标题】:Getting index of an array with cypress returns a "-1" instead使用 cypress 获取数组的索引会返回“-1”
【发布时间】:2021-01-20 11:51:57
【问题描述】:

我正在尝试获取表的标题并在 cypress 中放入一个数组,我已经成功完成了但由于某种原因当我尝试登录例如 cy.log(tableHeaders.indexOf("Tracking No.")) 它返回“-1”但是当我登录时整个数组cy.log(tableHeaders) 它返回正确的数组,并且还尝试在没有 cypress 的情况下在单独的“.js”文件中获取数组和索引,它运行良好。我做对了吗?谢谢。

let tableHeaders = []
    cy.get('.rt-table > .rt-thead > .rt-tr').each((headRow) => {
        cy.wrap(headRow).within(() => {
            cy.get('.rt-th').each((cellDataHead) => {
                    cy.log(cellDataHead.text())
                    tableHeaders.push(cellDataHead.text().trim())
            })
        })
    })
    
cy.log(tableHeaders) // Returns the whole array
cy.log(tableHeaders.indexOf("Tracking No.")) // returns -1
cy.log(tableHeaders.indexOf("Merchant Name")) // returns -1

【问题讨论】:

  • 可能有点牵强,但您能尝试获取每个属性的“长度”吗?如果字符串包含“空字符”,它仍会显示相同的内容,但显示不同的长度(因此显示不同的字符串)。例如:("test" + '').length == 4,但 ("test" + '\0').length == 5,虽然两者都将是明显的“测试”。并且trim() 不会删除空字符。例如("test" + '\0').trim().length == 5 就像没有 trim() 时一样。

标签: javascript node.js cypress cypress-cucumber-preprocessor


【解决方案1】:

由于 JavaScript 是异步运行的,因此在您的数组中保存任何内容之前执行以下行。

cy.log(tableHeaders.indexOf("Tracking No.")) 
cy.log(tableHeaders.indexOf("Merchant Name")) 

为了确保一旦您的数据保存在数组中,然后只执行您的cy.log 语句,您可以使用then()

let tableHeaders = []
cy.get('.rt-table > .rt-thead > .rt-tr').each((headRow) => {
    cy.wrap(headRow).within(() => {
        cy.get('.rt-th').each((cellDataHead) => {
            cy.log(cellDataHead.text())
            tableHeaders.push(cellDataHead.text().trim())
        })
    })
}).then(() => {
    cy.log(tableHeaders)
    cy.log(tableHeaders.indexOf("Tracking No."))
    cy.log(tableHeaders.indexOf("Merchant Name"))
})

【讨论】:

  • 可能也是一个问题,但他已经证明cy.log(tableHeaders) 确实记录了所有内容。
  • 谢谢@Alapan,代码运行完美。是的,我也想知道为什么它在cy.log(tableHeaders) 中记录了数组,谢谢你们俩
猜你喜欢
  • 2018-05-08
  • 1970-01-01
  • 2019-11-21
  • 2021-09-15
  • 2018-09-13
  • 1970-01-01
  • 1970-01-01
  • 2020-08-12
  • 1970-01-01
相关资源
最近更新 更多