在Selenium中的众多findElement/by函数中,您什么时候会优先使用其中一个呢?

问题描述

Selenium包含findElement函数,如下所示.

.find_element_by_

id
link_text
partial_link_text
name
class_name
tag_name
css_selector
xpath
显然,由于HTML页面的创建方式,一些标记(如id、link_text、name、tag_name)受到设计的限制,因为并不是所有的标记都可能包含id、link_text等……然而,css_selector和XPath可以做几乎所有它们能做的事情,还有一些,但似乎受限于它们可以交互的内容。例如,某些按钮可能无法使用XPath单击,但可以由css_selector单击。

所以我想知道,什么时候想要使用其中一个而不是另一个(特别是XPath或css_selector)?

其他函数(id、link_text等)几乎没有用吗,因为(至少)我发现XPath/css_selector也可以做到这一点?

比方说,使用link_text比使用XPath/css_selector有什么好处吗?


解决方案

此问题已在多个不同格式的论坛上被问及并回答。考虑到所有这些因素,如果我们对定位器进行优先级排序,则列表将如下所示:

  • id:选择具有指定id属性的元素。
  • 名称:选择具有指定name属性的第一个元素。
  • link_text:选择包含与指定LinkText匹配的文本的链接(锚标签)元素。
  • PARTIAL_LINK_TEXT:选择包含与指定PartialLinkText匹配的文本的链接(锚标签)元素。
  • TAG_NAME:使用Tag Name定位元素。
  • CLASS_NAME:使用ClassName定位元素。
  • css_selector:使用CssSelectors选择元素。
  • XPath:使用XPath表达式定位元素。

所以现在的问题是有什么新功能?

答案是硒最近进化了很多。WebDriver现在是W3C Recommendation CandidateSelenium内部的情况变化很快。这不再仅仅是选择定位器的问题了。我们需要使用定位器,该定位器将:

  • 唯一标识元素。
  • 必须优化定位器的性能。

牢记这两个因素,最佳策略是模拟DOM。W3C Recommendation Candidate确实提到了定位器列表,如下所示:

因此判决清晰明了。

相关文章