Cypress:在包装中动态添加测试 [英] Cypress: Adding tests dynamically within a wrap

查看:13
本文介绍了Cypress:在包装中动态添加测试的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

尝试一种动态添加Cypress测试的方法,对表中的行进行迭代。示例表:

注意,这是上一个问题的扩展,但更改作为注释太长,并且有一些进展:Cypress: Dynamic Tests: Validate rows in table

我将代码分解为两个测试:一个用于收集筛选的行,另一个用于迭代行以确定状态单元格是否"成功"。这很好,但每行不是单独的测试。

    let rowsUUID;

    it('TEST LOGS table rows UUID', () => {
      cy.fixture('esign').then($esignStore => {
        cy.wait(2000);
        cy.get('table[data-qa="act_ops_log_table"]').within(() => {
          cy.get('tbody[data-qa="act_ops_log_table_body"]').then(() => {
            cy.get('tbody[data-qa="act_ops_log_table_body"]')
              .children('tr')
              .then($rows => {
                rowsUUID = $rows.filter(index => $rows.eq(index).is(`:contains(${$esignStore.requestUUID})`));
                cy.log('rowsUUID count', rowsUUID.length);
                expect(rowsUUID).not.undefined;
                expect(rowsUUID).length.gt(0);
              });
          });
        });
      });
    });

    it('TEST LOGS table rows UUID iterate', () => {
      // Problem 'rowsUUID' is NOT undefined here
      Cypress._.range(0, rowsUUID.length).forEach(($rowIndex: number) => {
        const rowUUID = rowsUUID[$rowIndex];
        Cypress._.range(0, rowUUID.cells.length).forEach(($cellIndex: number) => {
          cy.log(`${$cellIndex}`);
          expect(rowUUID.cells[2].textContent.replace(/s/g, '')).to.be.a('string').equals('succeeded');
        });
      });
    });

为了每行动态添加一个测试,我遵循了Cypress Examples中提供的方法。

因此,我将前面提到的第二个测试替换为每行一个测试的Cypress._.range。但是,未定义全局rowsUUID

    let rowsUUID;

    it('TEST LOGS table rows UUID', () => {
      cy.fixture('esign').then($esignStore => {
        cy.wait(2000);
        cy.get('table[data-qa="act_ops_log_table"]').within(() => {
          cy.get('tbody[data-qa="act_ops_log_table_body"]').then(() => {
            cy.get('tbody[data-qa="act_ops_log_table_body"]')
              .children('tr')
              .then($rows => {
                rowsUUID = $rows.filter(index => $rows.eq(index).is(`:contains(${$esignStore.requestUUID})`));
                cy.log('rowsUUID count', rowsUUID.length);
                expect(rowsUUID).not.undefined;
                expect(rowsUUID).length.gt(0);
              });
          });
        });
      });
    });

    // Problem 'rowsUUID' is undefined here
    Cypress._.range(0, rowsUUID.length).forEach(($rowIndex: number) => {
      it(`row # ${$rowIndex}`, () => {
        const rowUUID = rowsUUID[$rowIndex];
        Cypress._.range(0, rowUUID.cells.length).forEach(($cellIndex: number) => {
          cy.log(`${$cellIndex}`);
          expect(rowUUID.cells[2].textContent.replace(/s/g, '')).to.be.a('string').equals('succeeded');
        });
      });
    });

如何定义全局rowsUUID以便按行动态添加测试?

推荐答案

这也不起作用-在建立测试数量之前,不会运行任何CEPRESS命令。

我试着这样做了好几天。要做到这一点,唯一的方法是在另一个测试运行中运行第一个测试(计算行数的测试),然后将结果保存到装备中,并在第二个运行中读取该装备。

您可以使用模块API协调这两次运行,但这需要大量的工作。

对于以下任何人-Dynamic Tests: Validate rows in table

这篇关于Cypress:在包装中动态添加测试的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆