当前位置: 首页 > 面试题库 >

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

叶举
2023-03-14
问题内容

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

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

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


问题答案:

JeffC在这里的答案足以总结每种定位器策略的利弊。但是,我将具体说明您的观点。

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

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

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

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

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

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

1 根据您习惯的XPath版本。



 类似资料:
  • 问题内容: 从log.go(执行日志包): 只是一个函数包装器,为什么我应该用它代替or ? 有实际原因吗? 问题答案: 两件事不同: 通过包日志进行打印对于并发goroutine是安全的(而普通的则不是) 日志可以自动添加计时信息。 因此,这是两件完全不同的事情。log用于记录和格式化。(好吧,log使用相同的动词和标志,但这很方便)。

  • 问题内容: Python 2.6引入了一个功能。 为什么有这个必要?可以总是输入而不是。 后者更多吗? 问题答案: PEP 3114描述了此更改。动机摘录: 该PEP建议将该方法重命名为,与Python中所有其他协议一致,在该协议中隐式调用方法作为语言级协议的一部分,并引入一个名为的内置函数来调用方法,与显式调用其他协议的方式。 请务必阅读此PEP,以获取更多有趣的细节。 至于为什么 你 要使用内

  • 问题内容: 流式XML解析器(例如SAX和StAX)比构建像DOM解析器之类的树结构的解析器更快,内存效率更高。SAX是推送分析器,这意味着它是观察者模式(也称为侦听器模式)的实例。SAX首先出现,然后是StAX- 拉式解析器,这意味着它基本上像迭代器一样工作。 您可以找到在任何地方都偏爱StAX而不是SAX的原因,但是通常可以归结为:“更易于使用”。 在JAXP上的Java教程中,StAX被模糊

  • 我知道这已经被问了很多次了(实际上,很多!),但是我仍然不能完全理解这两者之间的主要区别是什么。 我知道一个服务返回所提供函数的一个单例实例,工厂将简单地调用该函数并返回其值。 但是... 在我看来,你可以用一个或另一个来实现相同的效果,那么我应该如何选择使用哪一个呢?为什么我应该选择服务而不是工厂,或者相反? 是否存在这样一种情况:一方可以做另一方不能做的事情?

  • 问题内容: 我现在已经实现了一些Java应用程序,到目前为止仅实现了桌面应用程序。我更喜欢使用不可变对象在应用程序中传递数据,而不是使用带有变量(setter 和getter )的对象,也称为JavaBeans。 但是在Java世界中,使用JavaBeans似乎更为常见,而且我不明白为什么应该使用JavaBeans。就个人而言,如果代码仅处理不可变的对象而不是始终改变状态,则代码看起来会更好。 在

  • 问题内容: 我已经看过几次CSS代码中使用的“大于”(),但是我无法弄清楚它的作用。它有什么作用? 问题答案: 选择直系子女 例如,如果您有这样的嵌套div: 然后在样式表中声明css规则,如下所示: 您的规则仅适用于具有“中级”类的div,因为这些div是元素为“外部”类的元素的直接后代(直接子代)(当然,除非您声明其他更具体的规则来覆盖这些规则) 。见小提琴。 边注 如果您>>`。 注意:IE