使用cypress获取数组的索引返回“-1”

问题描述

我正在尝试获取表的标题并将其放入 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

enter image description here

enter image description here

解决方法

由于 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"))
})

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...