Selenium webdriver 量角器链式与非链式选择器

Selenium webdriver 量角器链式与非链式选择器,selenium-webdriver,css-selectors,protractor,Selenium Webdriver,Css Selectors,Protractor,我想我明白在量角器中 $(selector1).$(selector2) 通常相当于: $(selector1 selector2) 是否有理由选择其中一个而不是另一个,也许是效率?我的倾向是,合并后的第二个版本只执行一次搜索,而原始版本执行多个搜索,这听起来效率较低。然而,当我读到CSS实际上是如何执行的,扫描整个dom以查找表达式中的每一个附加项(并从“键选择器”开始从右向左执行),我想知道量角器下面的代码是否会使首先执行一个简单的选择器以减少搜索空间更有效,这取决于虚线“$()”的方式

我想我明白在量角器中

$(selector1).$(selector2)
通常相当于:

$(selector1 selector2)
是否有理由选择其中一个而不是另一个,也许是效率?我的倾向是,合并后的第二个版本只执行一次搜索,而原始版本执行多个搜索,这听起来效率较低。然而,当我读到CSS实际上是如何执行的,扫描整个dom以查找表达式中的每一个附加项(并从“键选择器”开始从右向左执行),我想知道量角器下面的代码是否会使首先执行一个简单的选择器以减少搜索空间更有效,这取决于虚线“$()”的方式当附加到上一个时有效

如果比较一下,这个问题的答案会改变吗

$$(multiCss).$(singleCss)
vs


如果不涉及效率或正确性问题,是否认为一种形式比另一种更具可读性?这可能是倾向于基于观点的答案,但我问的是,其中一个是否被视为规范风格。如果这只是个人观点,而不是规范风格的问题,那就忘掉这部分问题。

我觉得这非常有趣。请注意,这不是一个规范的答案 这只是我针对这个主题运行的一些测试的数据集合。当我有几个小时的时间来正确设置一个干净的测试环境时,我可能会运行进一步的测试,但这就是我现在所要做的

在我的测试中,我导航到一个页面,然后在10个单独的元素上运行expect(),以验证它们的文本。这是本地托管的,所以互联网速度不是一个因素。我使用选择的元素运行了5次测试,如
$().$()
,然后又运行了5次类似
$('CSS CSS')
。然后我在无头模式下重复测试,看看是否会得到不同的结果


$().$()无头时间:
1) 16.062
2) 16.297
3) 15.029
4) 15.773
5) 16.699
平均值:15.972


$().$()无头时代:
1) 14.705
2) 15.081
3) 15.806
4) 14.944
5) 14.997
平均:15.107


$('CSS CSS')无头时间:
1) 16.172
2) 15.556
3) 16.604
4) 16.706
5) 15.733
平均:16.154


$(CSS)无头时代:
1) 15.288
2) 15.136
3) 15.11
4) 15.152
5) 14.805
平均值:15.098



和您一样,我希望
$().$()
更快,虽然在我的测试中,这对于非headless是正确的,但并不是以任何显著的方式。无头时间运行的速度基本相同,无论你如何选择。从这些数据中得到的唯一有用信息是,取决于选择器的性能潜在差异很小,不会产生明显的差异,需要在更大的范围内进行测试,才能看到明显不同的时间。当然,当我有足够的空闲时间设置一个适当大的测试用例时,我想进一步研究一些东西。

它可能会放大您的测试,将链接扩展到1个元素以上;i、 例如,
$(css1)。$(css2)。$(css3)。$(css4)。$(css5)。$(css6)
vs
$(css1 css2 css3 css4 css5 css6)
。结果也可能因网页的大小和复杂性而异。不清楚你的实验是针对一个成熟的SPA网络应用程序还是一个简单的“Hello World”网页。@KevinWelker好主意。我使用的是一个完整的水疗中心,所以它有一个合理的复杂性。同时,应用程序的额外复杂性可能会带来更多未知的加载时间,所以我只使用登录页。当我有时间时,我会100%扩展测试。我使用的测试套件有数千个元素调用,因此即使性能改进很小,这对meupvoting来说总体上也是一个不错的性能改进,因为我的努力和信息(谢谢),但还没有选择b/c,正如您所说,这不是规范的。因此,基于这一小部分证据,效率可能没有差异,但是当两个CSS表达式都是静态的并且可以轻松组合成一个表达式时,是否还有其他一些原因选择一个而不是另一个呢?
$(multiCss singleCss)