cypress - 赛普拉斯 - 根据两个单元格的值单击行上的超链接
问题描述
试图让赛普拉斯脚本基于两个值单击超链接 - 第一列中的超链接文本和第二列中单元格的值:
<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(但行的顺序可能会有所不同,并且第一列和第二列中的值会重复 - 但对于组合只有一次)。
有什么想法吗?
解决方案
诀窍是定位<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()
推荐阅读
- python - 如何使用条件删除列中每个值的行?
- c# - 使用 LINQ 从列表中获取所有相同的元素
- php - 从 php CURL 读取 SOAP XML
- javascript - 即使对象已在 JavaScript 中被替换,如何监听事件
- vue.js - 防止 nuxt auth 将授权标头发送到外部 url
- apache-kafka - 如果我的业务逻辑需要很长时间来处理第一个偏移量的数据,Kafka 不轮询偏移量属于同一个分区
- python - tkinter - LabelFrame 不显示标签
- c# - 在大量 nvarchar(max) 上提高 SqlBulkCopy 性能
- beautifulsoup - 使用 BeautifulSoup 从 WSJ 获取新闻
- c# - 提示选项无效,因为进程不是交互式的