【问题标题】:Cypress: Dynamic Tests: Validate rows in table赛普拉斯:动态测试:验证表中的行
【发布时间】:2021-09-08 06:38:52
【问题描述】:

目标是遍历一个表并为每一行动态创建一个测试来验证其状态。表格示例:

知道Cypress Examples: Dynamic tests,但是,提供的示例地址迭代基本类型的静态列表(stringnumber)而不是收集JQuery<HTMLElement> 的子级。

行按带有 GUID 标签的第一列分组。下面的代码收集行标签包含特定的 GUID。添加的测试it() 的伪注入不起作用,我也不希望它会起作用,但这是我试图用特定的 GUID 测试每一行的状态:

it('TEST Iterate rows matching GUID', () => {
  cy.fixture('esign').then($esignStore => {
   
   expect($esignStore).to.have.property('requestUUID').to.be.a('string').not.empty;
    cy.get('table[data-qa="act_ops_log_table"]').within(() => {
      cy.log('Ops Logs table found');
      cy.get('tbody[data-qa="act_ops_log_table_body"]').then(() => {
        cy.get('tr');
        cy.get('td');
        cy.get('td:nth-child(1)').each(($tableCell, $index, $list) => {
          const textEnvelope = $tableCell.text();
          if (textEnvelope.includes($esignStore.requestUUID)) {

            // pseudo-example of dynamically added test: start
            // it(`TEST ${$index}`, () => {
              cy.get('td:nth-child(3)')
                .eq($index)
                .then($field => {
                  const textStatus = $field.text();
                  expect(textStatus, 'succeeded');
                });
            // });
            // pseudo-example of dynamically added test: end

          }
        });
      });
    });
  });
});

方法赞赏。谢谢

【问题讨论】:

    标签: cypress


    【解决方案1】:

    您不能动态创建测试。

    赛普拉斯在赛普拉斯命令开始运行之前解析规范文件以找出存在哪些测试。

    您能做的最好的事情就是添加额外的日志记录来标记每个测试的行。

    cy.get('tbody tr', {log:false}).each(($tr, index) => {
    
      // Log beginning of row test
      cy.then(() => Cypress.log({
        displayName: 'Row test',
        message: `TEST ${index}`,
      }))
    
      cy.wrap($tr, {log:false}).find('td:nth-child(1)', {log:false}).then($firstCol => {
        const textEnvelope = $firstCol.text();
        if (textEnvelope.includes(esignStore.requestUUID)) {
          cy.wrap($firstCol, {log:false}).siblings({log:false}).eq(1, {log:false})
            .should('have.text', 'succeed')
        } else {
          cy.log(`Row ${index} - not required requestUUID`)
        }
      })
    })
    


    或预过滤所需的行,以便仅测试匹配 requestUUID 的行

    cy.get('tbody tr', {log:false}).each(($tr, index) => {
      .filter(`:has(td:nth-child(1):contains(${esignStore.requestUUID}))`, {log:false})
      .each(($tr, index) => {
    
        // Log beginning of row test
        cy.then(() => Cypress.log({
          displayName: 'Row test',
          message: `TEST ${index}`,
        }))
    
        cy.wrap($tr, {log:false})
          .find('td:nth-child(3)', {log:false})
          .should('have.text', 'succeed')
      })
    

    【讨论】:

    • 感谢您的回复。
    • 我对这个问题所做的更改太长,无法在评论中发表。创建了一个新问题。谢谢:stackoverflow.com/questions/69095677/…
    • 没问题,但另一种方法也不起作用 - 在确定测试数量之前不会运行 Cypress 命令。
    猜你喜欢
    • 2021-10-20
    • 2023-02-24
    • 1970-01-01
    • 1970-01-01
    • 2023-02-14
    • 1970-01-01
    • 2019-12-27
    • 2020-05-16
    • 1970-01-01
    相关资源
    最近更新 更多