Cypress test: is .contains() equivalent to should('contain')?
是这个:
等效于此:
如果是这样,哪个是首选? 首先是更多的隐式断言,但在我看来更短,更清晰。
后续问题:环顾四周以了解如何最好地选择用于e2e测试的元素后,我发现Cypress文档建议使用
如果带有
它们之间的区别在于,在第一种形式中,使用contains(),您实际上是在尝试选择一个元素,而cy.get(...)。contains()的结果将产生此预期的DOM元素,从而允许用于方法的进一步链接,例如:
1 | cy.get('[name=planSelect]').contains(dummyPlan).click(); |
在第二种形式中,您将使用Chai链接器
这是一个细微的差异,结果是相同的,但是我建议您仅在要在contains之后链接其他方法的情况下才使用
关于第二个问题,
此外,在某些情况下,您可能决定从代码中剥离所有
回答
-
.contains(selector, content) 是最佳选择器;重试
元素选择并允许文本匹配(不只是
.class #id [attributes] ) -
.should() 只是一个断言,仅重试该断言
(不是元素选择)
除非您指定自己的名称,否则暗示
切线
浏览器支持XPath 1.0,这是一种基于DOM树遍历进行复杂查询的非常酷但模糊的方法。有一个包含谓词功能:
1 2 | //*[ contains(normalize-space(.), 'The quick brown fox jumped over the lazy dog.') ] [not(.//*[contains(normalize-space(.), 'The quick brown fox jumped over the lazy dog.') ])] |
这将从文档的根目录中搜索任何包含文本且不包含包含文本的后代节点的节点。
您可以在控制台中对其进行测试:
1 | $x("//*[contains(normalize-space(.), 'The quick brown fox jumped over the lazy dog.')][not(.//*[contains(normalize-space(.), 'The quick brown fox jumped over the lazy dog.') ])]") |