赛普拉斯|如何统计一个表中非空行的个数?

问题描述 投票:0回答:2

请帮我想办法只计算非空表行。我尝试使用它:

cy.get("#TableId")
    .find("tr")
    .then((rows) => {
        rows.toArray().forEach((element) => {
        if (element.innerHTML.should('be.not.empty')) {
        //rows.index(element) will give you the row index
           cy.log(rows.index(element));
        }
       });
     });

但是它抛出一个错误

count cypress row emptydatatext
2个回答
1
投票

这取决于你的目标。

这里有一个使用各种表达方式的实验,你可以选择一个适合你要求的。

不要忘记将

tbody
添加到表格选择器,因为您要排除标题行。

测试 HTML

<table>
  <tbody>
    <tr>
      <td></td>
      <td></td>
    </tr>
    <tr>
      <td><span></span></td>
      <td></td>
    </tr>
    <tr>
      <td>some-text</td>
      <td></td>
    </tr>
    <tr>
      <td>some-text</td>
      <td>another-text</td>
    </tr>
  </tbody>
</table>

测试代码

cy.get('table tbody tr')
  .each((tr, index) => {

    console.group('row', index, tr.html().replaceAll('\n', ''))

    const expressions = [
      "tr.html()", 
      "tr[0].innerHTML", 
      "tr.find('td').toArray().map(td => td.innerHTML).join('')",
      "tr.text()",
      "tr.text().trim().replaceAll('\\n', '')",
    ]
    const results = expressions.reduce((acc,e) => {
      acc[e] = eval(e)
      return acc
    }, {})
    console.table(results)
    console.groupEnd()
  })

输出


0
投票

.should()
.includes()
是赛普拉斯验证函数,不应用于确定分支。相反,您可以直接检查 innerText 的
.length
以确定您的代码路径。 (Chai 的
.empty
断言,当在 String 上运行时,检查变量的长度是否为 0)

cy.get("#TableId")
    .find("tr")
    .then((rows) => {
        rows.toArray().forEach((element) => {
        if (element.innerHTML.length !== 0) { // may need to use `element.text()` instead of `element.innerHTML`
           cy.log(rows.index(element));
        }
       });
     });
© www.soinside.com 2019 - 2024. All rights reserved.