【问题标题】:Cypress | Click on a button in a column inside a row on specific condition柏树 |在特定条件下单击行内列中的按钮
【发布时间】:2021-12-05 17:18:45
【问题描述】:

我有一个包含多行和多列的表格。

我想触发以下场景:

  • 获取其任何列与特定关键字匹配的行。
  • 单击该行内的按钮。

这是我的表结构:

这是我的代码 sn-p

clickOnDeleteIcon(email: string)  {
        cy.get('tbody.MuiTableBody-root tr td', { timeout: 20000})
            .filter(`:contains(${email})`)
            .parentsUntil('tbody.MuiTableBody-root tr')
            .find('button[title = "Delete"]')
            .click()
    }

我也试过

clickOnDeleteIcon(email: string)  {
        cy.contains('tbody.MuiTableBody-root tr td', email).parent('tr')
            .find('button[title = "Delete"]')
            .click()
    }

但是,我的过滤器超时了

Timed out retrying after 10000ms: Expected to find element: :contains(Julie_Williamson88@gmail.com), but never found it. Queried from element: [ <td.MuiTableCell-root.MuiTableCell-body.MuiTableCell-paddingNone>, 1535 more... ]

【问题讨论】:

  • 您需要删除所有电子邮件或特定电子邮件?
  • @AlapanDas 特定的电子邮件,我传递给函数的那个​​。

标签: jquery html-table cypress


【解决方案1】:

filter() 命令使用 css,但 :contains 似乎不是 here 所述的有效 css。

您应该使用 cypress 的 contains() 命令通过文本内容查询元素。

我会这样使用它:

cy.get('tbody.MuitableBody-root')
    .contains('tr', email)
    .find('button[title="Delete"]')
    .click();

【讨论】:

  • 它也会导致超时。
【解决方案2】:

你可以这样做:

cy.get('tbody.MuiTableBody-root tr', {
  timeout: 15000,
})
  .should('be.visible')
  .each(($ele, index) => {
    if ($ele.text().toLowerCase().trim().includes('ursula_white@gmail.com')) {
      cy.wrap($ele).within(() => {
        cy.get('[title="Delete"]').click()
      })
    }
  })

【讨论】:

  • @Alan 当我使用cy.get('tbody.MuiTableBody-root tr') 时,没有检索到匹配的结果。我刚试过这个,cy.log 也没有执行。 ``` clickOnDeleteIcon(email: string) { cy.get('tbody.MuiTableBody-root tr').each(($ele) => { cy.wrap($ele).within(() => { if ( $ele.text().includes(email)) { cy.log('eh da ba2a') cy.get('button[title="Delete"]').click() } }) }) } `` `
  • 我想在if语句中访问$ele的父级?
  • 添加了一个断言。基本上现在不是td,而是循环遍历tr 并获取行的整个内部文本。现在,如果该行有电子邮件,我们使用within 将搜索范围限定到该行,然后单击删除按钮。更新了答案。你能试一下吗。还改变了 if 语句的位置。
  • 同样的,这个条件里面的代码不会被执行$ele.text().includes(email)
  • 请贴出错误截图。将其上传到 imgur 并添加到 cmets 中。另外,请暂时对电子邮件进行硬编码,并尝试不要使用参数。
猜你喜欢
  • 2022-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-30
  • 2023-01-02
  • 2014-10-13
  • 1970-01-01
相关资源
最近更新 更多