在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 Candidate
。Selenium
内部的情况变化很快。这不再仅仅是选择定位器的问题了。我们需要使用定位器,该定位器将:
- 唯一标识元素。
- 必须优化定位器的性能。
牢记这两个因素,最佳策略是模拟DOM。W3C Recommendation Candidate
确实提到了定位器列表,如下所示:
因此判决清晰明了。
相关文章