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

pcw*_*ite 6 selenium xpath automation css-selectors

请帮助我理解为什么使用CSS选择器甚至是自动测试的选项.我一直在我的工作场所使用Ghost Inspector工具为我们的东西创建了大量的自动化测试.此工具为您提供了使用XPath的CSS选择器intead的选项.为什么?

XPath比CSS更耐用.任何给定UI上的CSS几乎每周都会在某些项目/功能上发生变化.这使得测试极其脆弱并且容易经常破裂.

是因为大多数新的测试编写者不想学习任何XPath并希望坚持基础知识吗?CSS选择器看起来比XPath语法更漂亮?请说服我.谢谢.

Bol*_*ock 8

JeffC的答案在这里总结了每个定位策略的优缺点.但我会具体说明你的观点.

首先,没有必要让任何人相信选择器更好,因为从纯粹的功能角度来看,它们根本就不是(我说这是一个拥有黄金标签徽章和近1000个答案的人对那个标签的问题,所以你知道我没有偏见.如果你对XPath更熟悉,使用它 - 在功能和你可以做的事情方面,XPath是非常优越的,那里真的没有竞争.而且,正如您所说,性能不再是问题(如果有的话).

选择器用于快速简单的用例以及来自HTML和CSS代码库的用户,例如Web开发人员,他们希望开始使用自动化测试而无需学习另一个DSL.如果您负责自己网站的CSS,您还可以轻松地将样式表中的选择器复制到测试中,具体取决于您正在测试的内容.

另一方面,如果你来自XML/XSLT/XPath背景,很棒,你可以继续使用你知道并喜欢的XPath 1!

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

内容包含功能不会使XPath更"耐用" - 它使它更加通用.如果您仅仅依赖于元素的内容并且内容可能会发生变化或移动,那么您的XPath将变得比仅仅依赖于元素属性或其在DOM树中的位置的选择器更脆弱.

你可以做很多事情来使你的XPath或选择器或多或少脆弱,但这是DSL的多样性的指标,而不是它本身的脆弱程度.


1 取决于您习惯使用的XPath版本.


Deb*_*anB 5

Selenium社区中,最常见的话题之一是在CssXPath两者之间,哪种定位器策略更好。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
Run Code Online (Sandbox Code Playgroud)

通过遍历查找元素:

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
Run Code Online (Sandbox Code Playgroud)

以下是要点:

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

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

    • Adam Goucher表示将采用一种更加混合的方法-首先关注ID,然后关注CSS,并仅在需要时使用XPath(例如,走在DOM上),并且XPath对于高级定位器将始终更加强大。

结论

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

琐事