我是量角器的新手,在查阅官方文档时,在样式指南部分中找到了这个。
从不使用xpath 为什么?
-这是所有方法中最慢,最脆弱的定位器策略 -标记很容易更改,因此xpath定位器需要大量维护 -xpath表达式不可读并且很难调试
完全有道理。但是,我正在考虑一种情况,在这种情况下,我正在访问一个元素,该元素是重复的元素(例如,动态更改的表的一行)。因为它是动态创建的,所以我没有访问该行的列的特定ID或名称。但是,我们可以使用xpath表达式访问相同的内容。 我可以想到的一种方法是使用'element.all(locator).get(index)'帮助函数,但是由于我首先访问的是整个元素列表,所以对我来说这似乎是一个较慢的过程(例如可能几百行)。 问题是,由于出于量角器状态的官方文档的所有原因,由于我想消除XPATH的使用,因此在上述给定情况下,我还有其他选择吗?
答案 0 :(得分:1)
文档状态如下:
从不使用xpath
为什么?
- 这是最慢,最脆弱的定位器策略
- 标记很容易更改,因此xpath定位器需要大量维护
- xpath表达式不可读并且很难调试
正如迈克尔·凯(Michael Kay)在评论中说的那样,这些言论是高度自以为是的。我认为大多数都容易证明是错误的。
这是最慢的
自从该声明可能被编写以来,发生了很多变化。如果您现在在顶级浏览器中测试XPath vs ID vs CSS选择器,那么即使性能有所不同,您也不会发现太多。前几天,我只是在Chrome浏览器中做到了这一点,而在进行1000次查找后,这三者几乎无法区分。
最脆
任何写得不好的定位器都可能很脆弱。 XPaths CAN 编写起来不那么脆弱,而CSS选择器 CAN 编写起来也不那么脆弱。我认为XPath可能会更脆弱,因为新的自动化程序会在他们喜欢的浏览器中使用复制XPath功能,这通常会导致错误/脆弱的定位器。学习时很好,但是您确实需要学习如何编写自己的语言。您可能已经注意到,某些浏览器现在具有复制CSS选择器选项...很多时候这也使定位器非常脆弱。
如果要避免使用脆弱的定位器,则需要学习手工制作定位器。做到这一点需要大量的阅读和练习。
/html
开头,那么它很脆弱。不要这样做。//div/span/table/tr/td
具有5个级别),则它可能比所需的更易碎。您指定的越多,它就越僵硬,这意味着它更容易断裂。//div[@class='alert']
),它会比较脆弱。 CSS选择器在这里可以更好地用于在元素上指定某些类,但不能指定其他类。//table/tr[3]/td[2]
。如果您的数据在表中移动怎么办?您仍在查看第3行第2单元,而数据现在在第4行第2单元。您的测试将失败。需要大量维护
Kinda与上面的评论相同,编写错误的CSS选择器也需要大量维护。无论您选择哪种类型,都要编写一个好的定位器,这样可以最大程度地减少维护工作。过于脆弱的定位器经常制动并且需要维护,因此请不要编写脆弱的定位器。 :)
xpath表达式不可读并且很难调试
如果您对XPaths怀有强烈的恨意,告诉每个人都避免使用它们,并且永远不要自己使用它们,您可能会认为它们不可读并且很难调试。 :)它们具有必须阅读和调试它们的语法,就像CSS选择器或您使用的任何编程语言一样。话虽这么说,但XPath比CSS选择器更为冗长和复杂,但是额外的复杂性带来了更多的功能。
这是我根据我在Selenium的年限使用的,按优先顺序排列:
我仅在元素没有ID且不能使用CSS选择器时才使用XPath。基本上有两种情况发生:1.当我需要根据所包含的文本查找元素时,或者2.我需要进行DOM遍历时(例如,一些容易找到的元素的父级)。
我遵循上述规则,除非页面发生重大变化,否则我很少需要更新定位器。