为什么我应该使用CSS选择器而不是XPath进行自动化测试?

时间:2018-08-20 17:59:25

标签: selenium xpath automation css-selectors

请帮助我理解为什么使用CSS选择器甚至可以进行自动化测试。我在工作场所中一直使用Ghost Inspector工具为我们的东西创建许多自动化测试。该工具使您可以选择使用XPath的CSS选择器。为什么?

XPath比CSS更耐用。在某些项目/功能上,任何给定UI上的CSS几乎每周都会更改。这会使测试非常脆弱,并且容易被定期破坏。

是因为大多数新的测试作者都不希望学习XPath的任何知识,而是希望坚持使用基础知识吗? CSS选择器看起来比XPath语法漂亮吗?请说服我。谢谢。

2 个答案:

答案 0 :(得分:7)

JeffC's answer here可以很好地总结每种定位器策略的利弊。但是,我将具体说明您的观点。

首先,不需要任何人说服选择器更好,因为从纯粹的功能角度来看,选择器根本不是(而且我说的是带有金色标签的人)徽章和带有该标签的问题的近1000个答案,因此您知道我没有偏见)。如果您对XPath更满意,请使用它-就功能和您可以做的事情而言,XPath非常优越,那里确实没有竞争。而且,正如您正确指出的那样,性能不再是问题(如果有的话)。

选择器用于快速简单的用例,以及来自HTML和CSS代码库的用户(例如Web开发人员),他们希望开始自动测试而不必学习其他DSL。如果您负责自己网站的CSS,则还可以根据要测试的内容轻松地将选择器从样式表复制到测试中。

如果另一方面,您来自XML / XSLT / XPath背景,那太好了,您可以继续使用自己熟悉并喜欢的XPath 1

  

是的,Xpath比CSS更耐用,因为它可以调用包含功能的特定内容。

拥有内容包含功能并不能使XPath更“耐用”,而是使它更具通用性。如果您仅依赖元素的内容,并且该内容可能会发生更改或移动,那么XPath的脆化程度将不亚于仅依赖元素的属性或其在DOM树中位置的选择器。

您可以做很多事情来使您的XPath或选择器或多或少地变脆,但这表明DSL的用途广泛,而不是它固有的脆性。 >


1 取决于您习惯的XPath版本。

答案 1 :(得分:4)

Selenium社区中,最常见的对话之一是Locator Strategy在两者之间比较好- Css XPath 关于性能。 CSS 的支持者说它更具可读性和更快性,而支持 XPath 的人则说它具有穿越 HTML DOM 的能力(而CSS不能)。基于不同观点的这种划分,很难为您和初学者确定性能最佳的方法。这是来自行业专家的一些专家:

ElementalSelenium_DataTables

具有按ID和类别查找元素的结果:

Browser                 | CSS           | XPath
----------------------------------------------------
Internet Explorer 8     | 23 seconds    | 22 seconds
Chrome 31               | 17 seconds    | 16 seconds
Firefox 26              | 22 seconds    | 22 seconds
Opera 12                | 17 seconds    | 20 seconds
Safari 5                | 18 seconds    | 18 seconds

通过遍历查找元素:

Browser                 | CSS           | XPath
----------------------------------------------------
Internet Explorer 8     | not supported | 29 seconds
Chrome 31               | 24 seconds    | 26 seconds
Firefox 26              | 27 seconds    | 27 seconds
Opera 12                | 25 seconds    | 25 seconds
Safari 5                | 23 seconds    | 22 seconds

以下是要点:

  • 对于初学者来说,XPath和CSS之间的性能没有显着差异。
  • 在IE8之类的旧版浏览器中遍历DOM不适用于CSS,但可以与XPath一起使用。 XPath可以遍历DOM(例如从子级到父级),而CSS只能遍历DOM(例如从父级到子级)。但是,无法在较旧的浏览器中使用CSS遍历DOM并不一定是一件坏事,因为它更多地表明您的页面设计不良,并且可能会受益于一些有用的标记。
  • 赞成CSS的一个论点是,它们是主观的,它们更具可读性,简洁性和简洁性。

    • Ben Burton提到您应该使用CSS,因为这是构建应用程序的方式。这使测试更易于编写,讨论和让其他人维护。

    • Adam Goucher表示采用一种更加混合的方法-首先关注ID,然后关注CSS,仅在需要时才使用XPath(例如,沿DOM走),并且XPath永远会更多对于高级定位器而言功能强大。

结论

因此,拨打电话似乎很难。尤其是现在,我们已经知道,选择不再像以前那样依赖性能。选择并不像选择编程语言那样永久,并且如果您使用有用的抽象(例如页面对象),那么利用混合方法就很容易实现。

琐事