赛普拉斯遍历 table 断言两列

Cypress iterating through table assert two columns

我有一个简单的 table 例如:

<table>
<tr>
<td>name 1</td>
<td>name 2</td>
<tr>
<tr>
<td>name 3</td>
<td>name 4</td>
<tr>
</table>

对于赛普拉斯,我想验证 name 1name 2 不存在于 table 中(但是仅当它们彼此相邻时)。如果name 1单独出现在任何td中,那么就可以了,所以只有当name 1name 2 在 table 行中。

我尝试通过以下方式遍历 table:

verifyTable(child, parent) {
    cy.get("table tr").each(($el, index, $list) => {

          cy.get("tr").eq(index).find("td:nth(0)").should('not.contain',child);
          cy.get("tr").eq(index).find("td:nth(1)").should('not.contain',parent);
    
        })
}

这工作正常,但如果它在第一列中找到 child,它就会失败并且不会检查下一列。如果该元素不存在于第一列而仅存在于第二列,则相同,它会失败。

只有当 child 和 parent 彼此相邻时才会失败。我不确定如何连接这两个条件。

即使我使用 AND 进行 chaning,如果它找到第一个元素,它也会失败:

cy.get("tr").eq(index).should('not.contain',child).and('not.contain',parent);

检查单元格时可以用jQuery表达式代替,没找到不会失败。

然后测试组合 - 我认为我的逻辑是正确的,但如果我理解有误,你可能需要调整。

verifyTable(child, parent) {
  cy.get("table tr").each(($tr, index, $list) => {

    const childExists = $tr.find(`td:nth(0):contains(${child})`).length;
    const parentExists = $tr.find(`td:nth(1):contains(${parent})`).length;

    expect(!childExists || !parentExists).to.eq(true)

    // or this is the same, but may be closer to your specified requirement
    expect(!(childExists && parentExists)).to.eq(true)

  })
}