赛普拉斯:cy.get(“ a”)。find(“ b”)与cy.get(“ a b”)之间的任何区别

eli*_*rel 4 javascript cypress

似乎它们是相同的。是否有过在输出之间有什么区别cy.get("a").find("b")cy.get("a b")

(其中ab是一些选择器,例如divspan,或.someClass.someOtherClass。)

rez*_*esh 19

正如您在问题中所述,cy.get("a").find("b")和之间没有区别cy.get("a b")。但是赛普拉斯中findget命令之间最重要的区别在于它cy.get()是链接的cy,它总是document按照赛普拉斯文档中的说明在整个范围内寻找选择器。但正如赛普拉斯文档中再次指出的那样,发现工作如下:

获取特定选择器的后代 DOM 元素。

因此,该命令cy.get("a").find("b")返回b元素的所有后继a元素,但会cy.get("a").get("b")查找所有ab元素,而不管它们是父元素还是子元素。

  • 所以我给自己做了一次绩效检查。我进行了一次测试,使用了大约 20 个不同的选择器,所有选择器都带有嵌套,并进行了一些 UI 和 IT 检查。事实证明,平均而言,对每个变体运行几次测试,变体 A (`cy.get("a b")`) 比变体 B (`cy.get("a") 快 20-25% 左右).find("b")`). 这就是为什么我们选择坚持使用变体 A。我仍然发现变体 B 更具可读性,因此您可以决定什么更适合您。 (2认同)

Jos*_*ica 8

结果没有差异,但是实现上却有所不同。

.find()命令文档中:

该命令的查询行为与.find()jQuery中的工作方式完全匹配。

换一种说法,

cy.get("a").find("b");
Run Code Online (Sandbox Code Playgroud)

等效于以下JQuery:

$("a").find("b");
Run Code Online (Sandbox Code Playgroud)

$("a").find("b");将产生与相同的结果$("a b"),但将使用不同的方法到达那里。


我在相当复杂的页面上做了一些测试以确认这一点:

测试结果

请注意,cy.get("td").find("tr")和的数字结果如何相同cy.get("td tr")