在赛普拉斯(Cypress)中,.contains
命令会产生所有匹配的元素,因此对于单击带有文本的下拉项,.contains
效果很好。但是我遇到了一个问题,我需要单击一个文本为“导航标签”的下拉菜单项:问题出在同一下拉菜单中有另一个选项称为“新导航标签”,而正在按它首先出现。
有没有一种方法可以单击与所需文本完全匹配的元素?
Given('I click on the {string} drop down option', option => {
cy.get(`[data-test="dropdown"]`)
.find('.item')
.contains(option)
.click();
});
我使用来部分解决了问题.last()
,但是我发现该解决方案含糊不清,因为我尝试使自己的步骤尽可能地可重用,并且这只是一个补丁,可以使它解决该特定问题。
请注意,无法对下拉列表中的每个特定项目进行数据测试,因为这些项目是直接从语义UI呈现的。
正则表达式在这里可以很好地工作。
.contains()
允许使用正则表达式,因此您可以做一个仅与整个字符串匹配的正则表达式(使用^
和$
)。这样,任何带有多余字符的内容都将不匹配(例如“新导航标签”)。因此,例如,您可以执行以下操作:
cy.get(`[data-test="dropdown"]`)
.find('.item')
.contains(/^Navigation Label$/)
.click();
当您使用变量(例如,option
变量)构建表达式时,正则表达式有些棘手。在这种情况下,您将构建一个正则表达式,如下所示:
cy.get(`[data-test="dropdown"]`)
.find('.item')
.contains(new RegExp("^" + option + "$", "g"))
.click();
因此,要完全匹配.contains()
:
cy.contains(new RegExp(yourString, "g"))
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句