首页 > 解决方案 > 赛普拉斯 - 根据两个单元格的值单击行上的超链接

问题描述

试图让赛普拉斯脚本基于两个值单击超链接 - 第一列中的超链接文本和第二列中单元格的值:

<tbody>
  <tr>
    <td><a href="/id/343408">Anything</a></td>
    <td>Casualty</td>
  </tr>
  <tr>
    <td><a href="/id/338494">Declined Prospect</a></td>
    <td>Casualty</td>
  </tr>
  <tr>
    <td><a href="/id/343408">Declined Prospect</a></td>
    <td>Package</td>
  </tr>
  <tr>
    <td><a href="/id/338494">Declined Prospect</a></td>
    <td>Casualty</td>
  </tr>
  <tr>
    <td><a href="/id/338432">Irrelevant</a></td>
    <td>Package</td>
  </tr>
</tbody>

cy.get('a').contains('拒绝的前景').click()

失败是因为有多个具有该值的超链接。id 没有用,因为它是动态的。

在上面的示例中,我想在第二列是Casualty时单击Declined Prospect(但行的顺序可能会有所不同,并且第一列和第二列中的值会重复 - 但对于组合只有一次)。

有什么想法吗?

标签: cypresse2e-testing

解决方案


诀窍是定位<td>Casualty</td>然后单击前面的<td><a>.

有很多方法可以获取兄弟元素,在这种情况下最简单的是prev()

cy.contains('td', 'Casualty')  // target the 'marker' element
  .prev()                      // move to the previous sibling
  .click()

从行接近并向内移动

要在某些单元格中定位具有特定文本组合的行,只需连接文本并使用contains().

cy.contains('tr', 'Declined Prospect Casualty')  // target unique text within children

这甚至适用于其他单元格的文本与搜索无关的情况,例如

<tr>
  <td><a href="/id/338494">Declined Prospect</a></td>
  <td>Casualty</td>
  <td>Irrelevent text here</td>
</tr>

然后你可以沿着 HTML 树向下走,

cy.contains('tr', 'Declined Prospect Casualty') // target unique text within children
  .find('td a')                                 // descendant of previous subject
  .click()

推荐阅读