cssSelector与XPath for selenium

Shu*_*ain 2 selenium xpath webdriver css-selectors selenium-webdriver

根据我的理解,CSS选择器遍历DOM.因为CSS文件没有关于元素位置的任何信息,那么为什么cssSelectorXPath(理论上)快.

理论上cssSelector比XPath花费更少的时间,因为XPath需要遍历HTML DOM. XPath我们可以在DOM层次结构中向后或向前搜索元素,而CSS只能在向前方向上工作.

但是如果cssSelector也遍历HTML DOM,那么它如何使cssSelector更快.

换句话说,cssSelector实际上是如何在内部工作的,并说明为什么它总是优先/建议每个人使用xpath

另请分享使用cssSelector而不是XPath的其他好处.

反之亦然,XPathcssSelector更好

Jef*_*ffC 7

我读了很多文章,我已经看到了一些像这样这个是有显示,CSS选择器速度更快,我已经做了一些测试,并得出了同样的结论数据.我在2016年12月与elementalselenium.com的作者Dave Haeffner进行了交谈,并向他询问了他网站上的人数(在我上面链接的帖子中),因为他们已经很老了.他给我发了一个演示文稿(参见第18-23页),在那里他更新了测试,CSS选择器仍然更快,但XPath正在赶上一些配置.

所以我们可以看到证据证明这是真的,但我从来没有见过有人谈论为什么会有技术细节.如果我猜测,那将是因为很多工作已经进入不同的浏览器以优化页面渲染的速度.让CSS选择器快速工作使得页面渲染速度更快,并且由于浏览器驱动程序利用浏览器定位元素的能力,这意味着CSS选择器通常会获胜.我已经读过一些浏览器已经提高了他们的XPath定位器速度,但我认为它可能总是落后于CSS选择器,因为它比CSS选择器少得多.

CSS选择器和XPath都必须遍历DOM,因此除了执行遍历的引擎速度之外,没有其他真正的区别.由于CSS选择器的广泛使用,CSS选择器引擎在这一点上可能是一个微调机器与XPath引擎.

我的一般定位策略是ID优先,CSS选择器用于其他一切.没有其他工作我使用XPath.它会因站点而异,但根据我的经验,ID可能是我定位器的10%左右.CSS选择器可能约为80%,最后10%是XPath.当我需要通过包含的文本定位元素时,我通常使用XPath,并且很少使用DOM遍历.我的XPath使用示例可能是我需要在TABLE中找到一个相对于行标签的元素,例如表格行中的奶酪价格,其中第一个单元格包含"cheese",第三个单元格包含价格.

我认为XPath在SO和许多博客等网站上都有很多,因为它易于访问.我所要做的就是右键单击devtools中的元素并复制XPath.这个问题很多次会产生一个糟糕的,脆弱的XPath.手工制作的XPath更好,但手工制作一个好的XPath或CSS选择器需要时间和经验.许多人不愿意投入的时间.精心设计的CSS选择器或XPath也会让事情变得更慢.很多时候,元素可以通过多种方式定位,有些方式比其他方式更有效......它取决于定位器的效率以及如何使用它.一个格式错误的CSS选择器不会自动比一个格式良好的XPath更快.