【问题标题】:Protractor Chained vs Unchained Selectors量角器链式与非链式选择器
【发布时间】:2019-04-17 03:18:36
【问题描述】:

我想我在 Protractor 中理解这一点,

$(selector1).$(selector2)

一般相当于:

$(selector1 selector2)

是否有理由偏爱其中一种,也许是效率?我的倾向是组合的第二个版本只进行一次搜索,而原始版本进行多次搜索,这听起来效率较低。然而,当我读到 CSS 的实际执行方式时,扫描整个 dom 以查找表达式中的每个附加项(并从“键选择器”开始从右到左进行),我想知道 Protractor 下的代码是否使其更高效首先执行一个简单的选择器来减少搜索空间,具体取决于添加到前一个时的点“.$()”如何工作。

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

$$(multiCss).$(singleCss)

$(multiCss singleCss)

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

【问题讨论】:

    标签: selenium-webdriver css-selectors protractor


    【解决方案1】:

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

    对于我的测试,我导航到一个页面,然后在 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 CSS) 无头时代:
    1) 15.288
    2) 15.136
    3) 15.11
    4) 15.152
    5) 14.805
    平均:15.098


    和你一样,我预计 $().$() 会更快,虽然在我的测试中这对于非无头是正确的,但在任何方面都没有。无论您如何进行选择器,无头时间的运行速度基本相同。从这些数据中唯一有用的结论是,取决于选择器的性能潜在差异足够小,不会产生明显的差异,并且需要在更大范围内进行测试才能开始看到显着不同的时间。当然,当我有足够的空闲时间来设置一个适当的大型测试用例时,我想研究更多。

    【讨论】:

    • 它可能会放大您的测试以将链接扩展到 1 个元素之外;即,$(css1).$(css2).$(css3).$(css4).$(css5).$(css6)$(css1 css2 css3 css4 css5 css6)。结果也可能因网页的大小和复杂性而异。目前尚不清楚您的实验是针对成熟的 SPA 网络应用还是简单的“Hello World”网页。
    • @KevinWelker 好主意。我使用的是完整的 SPA,因此它具有合理的复杂性。同时,应用程序的额外复杂性可能会在加载时间方面带来更多未知数,所以我只是使用登录页面。当我有时间时,我会 100% 扩展测试。我工作的测试套件有数千个元素调用,所以即使性能提升很小,这对我来说总体上可能是一个不错的性能提升
    • 支持努力和信息(谢谢),但尚未选择,b/c 正如你所说,这不是规范的。所以基于这个小证据,效率可能没有差异,但是当两个 CSS 表达式都是静态的并且可以很容易地组合成一个表达式时,还有其他一些理由比另一个更喜欢一个吗?
    猜你喜欢
    • 1970-01-01
    • 2012-10-07
    • 1970-01-01
    • 1970-01-01
    • 2012-07-19
    • 2016-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多