testing - 在赛普拉斯的某个元素中查找多个元素
问题描述
代码:
<div class="title">
<button data-testid="tg-menu" class="hitbox-border">
<img src="asldij">
</button>
<div class="menu" data-testid="menu-list">
<button class="text-left" data-testid="option-1">
<span>Menu Option 1</span>
</button>
<button class="text-left" data-testid="option-2">
<span>Menu Option 2</span>
</button>
<div class="row">
<div class="flex-grow">
<hr class="lightgrey-border">
</div>
<div class="flex-grow">
<hr class="lightgrey-border">
</div>
</div>
<button class="text-left" data-testid="option-3">
<span>Menu Option 3</span>
</button>
</div>
</div>
工具:赛普拉斯
我有与上面类似的代码,并且希望在选择元素时不使用 -- 类名轻松地做几件事。
我可以像 cy.get('[data-testid="menu-list"]').children('button') 那样做,但想得到它类似于 xpath - contains...如上例很简单,但有些dom中的事情比较困难。
问题:
在菜单列表下找到所有按钮名称。
是否有一行 cy.get() 我可以使用类似于 By.xpath(
//div[@data-testid='menu-list']//button[contains(@data-testid,'option-')]
) ?有没有简单的方法可以将 selenium xpath 转换为 cypress...
注意:我知道赛普拉斯的 xpath 有扩展,不确定性能是否好。
解决方案
AFAIK不可能
contains
在css选择器中使用类似的东西(这是cy.get
正在使用的)。但是,您可以获取所有按钮并调用each
它们以获取data-testid
例如的值:cy.get('[data-testid="menu-list"]').children('button').each(btn => cy.log(btn.getAttribute("data-testid")))
如果您的按钮的data-testid
属性不是以它们开头option-
并且您想将它们过滤掉,我建议您使用 2 个不同的数据属性:一个用于过滤,它不必是唯一的(例如data-testid='option'
),另一个用于过滤一个拥有有趣价值的人(例如data-value='1'
)
- cypress-xpath 扩展是我所知道的将 xpath 与 Cypress 一起使用的唯一方法。关于性能,我没有任何数据。我相信
cy.get
使用 css 选择器会更慢,就像在 Selenium 中一样。但我也相信在大多数情况下它是毫无意义的。与任何性能问题一样,最好的答案是在与您相关的上下文中执行您自己的测量。
推荐阅读
- java - 如何编写 Java 代码以将 Excel 中的表格逐个复制十次
- java - Solr 6.6:IOException“与服务器交谈时”
- java - 声明抽象或缺少正文
- python - 如何在 Python 中使用 ADASYN 对时间序列进行过采样以进行时间序列分类?
- java - 在 azure rest API 调用中在同一 VM 的不同 API 中获取不同的数据磁盘 ID?
- javascript - 如何比较两个word文件的内容?我的任务是将使用 Protractor 工具自动化下载的 word 文件与现有文件进行比较?
- java - spring boot+多个war文件+tomcat加载网页失败
- css - Flow:Column Flexbox 在 display:grid Container 内部中断
- php - 当下一次经常性付款被扣除时,我怎样才能得到贝宝的回复?
- ios - 如何在 iOS 中使用 arkit 制作平面图应用程序?