javascript Cypress:out IF语句时变量值未保存

fae0ux8s  于 2023-05-05  发布在  Java
关注(0)|答案(3)|浏览(176)

我有一张table,如下图所示。我尝试检查复选框有'ST - '文本,然后删除它们。

下面是我的代码:

cy.get('td').invoke('text').then(text => {
        //1st IF
        if (text !== 'No data available') {
            let hasAuto = false;
            let tableReport = cy.get('#tableA')
            let rpBN = [];

            tableReport.find('tbody tr').each(($row) => {
                const thirdColumnText = $row.find('td:nth-child(3)').text().trim();
                rpBN.push(thirdColumnText)

                //2nd IF
                if (rpBN.some(item => thirdColumnText.includes('ST - '))) {
                    hasAuto = true;
                    const checkbox = $row.find('input[type="checkbox"]');
                    checkbox.trigger('click');
                }
              
            })
            cy.log('hasAuto = ' + hasAuto)

            //3rd IF
            if (hasAuto) {  
                //Click Delete
                cy.get('#deleteBtn').click()

                //Confirmation popup open -> click [Yes] button
                cy.get('#confimeP').contains('Yes').click()  
            }

        }
    })

但是在输出第二个IF hasAuto 后变成false,第三个IF没有运行。

ifsvaxew

ifsvaxew1#

一个好的测试不需要使用任何if()
您将表设置为所示的状态,那么测试将类似于

function isStudentRow($row) {
  return $row.find('td:nth-child(3)').text().trim().startsWith('ST - ')
}

cy.get('#tableA tbody tr').should('have.length', 3)

cy.get('#tableA tbody tr')
  .filter((index, row) => isStudentRow(Cypress.$(row)))
  .each($studentRow => {
    $studentRow.find('input[type="checkbox"]').trigger('click')
  })

cy.get('#deleteBtn').click()
cy.get('#confimeP').contains('Yes').click()

cy.get('#tableA tbody tr').should('have.length', 1)
jdzmm42g

jdzmm42g2#

因为我们正在处理sync和async cypress方法,所以我建议将最后一个if Package 成一个then

cy.get('td').invoke('text').then(text => {
    //1st IF
    if (text !== 'No data available') {
        let hasAuto = false;
        const tableReport = cy.get('#tableA')
        const rpBN = [];

        tableReport.find('tbody tr').each(($row) => {
            const thirdColumnText = $row.find('td:nth-child(3)').text().trim();
            rpBN.push(thirdColumnText)

            //2nd IF
            if (rpBN.some(item => thirdColumnText.includes('ST - '))) {
                hasAuto = true;
                const checkbox = $row.find('input[type="checkbox"]');
                checkbox.trigger('click');
            }

        }).then(()=>{
           cy.log('hasAuto = ' + hasAuto)
           //3rd IF
           if (hasAuto) {
               //Click Delete
               cy.get('#deleteBtn').click()

               //Confirmation popup open -> click [Yes] button
               cy.get('#confimeP').contains('Yes').click()
           }
        })
    }
})
hsgswve4

hsgswve43#

我认为'includes'关键字需要与您指定的关键字相同的单词,因此您可以尝试使用'indexOf'

相关问题