selenium-webdriver - Protractor 链式与非链式选择器

标签 selenium-webdriver css-selectors protractor

我想我明白在 Protractor 中,

$(selector1).$(selector2)

通常等同于:

$(selector1 selector2)

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

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

$$(multiCss).$(singleCss)

对比

$(multiCss singleCss)

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

最佳答案

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

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


$().$() 没有 headless 时代:
1) 16.062
2) 16.297
3) 15.029
4) 15.773
5) 16.699
平均:15.972


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


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


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


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

关于selenium-webdriver - Protractor 链式与非链式选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55342003/

相关文章:

google-chrome - Chrome在docker网络内部无法访问

html - 子元素悬停,影响父元素

javascript - 无法在 Protractor 下拉列表中选择隐藏元素

angular - 删除 Protractor e2es 上的 Angular 和 Webdriver INFO 控制台日志

python - 如何控制属于 Firefox 的非浏览器窗口?

css - 选择按钮时选择单选按钮列表的容器

javascript - CSS/jQuery 性能 - 提供更高分辨率的选择器是否更好

java - 无法使用 Class.forName() 查找包中的类

javascript - Selenium:输入样式为 ="display: none;"的文本字段

java - IE WebDriver 异常无法更改只读元素的值