Python 在Selenium中的许多findElement/By函数中,您什么时候会使用其中一个?
Selenium包含findElement函数,如下所示 .查找元素_Python 在Selenium中的许多findElement/By函数中,您什么时候会使用其中一个?,python,python-3.x,selenium,selenium-webdriver,css-selectors,Python,Python 3.x,Selenium,Selenium Webdriver,Css Selectors,Selenium包含findElement函数,如下所示 .查找元素_ id link_text partial_link_text name class_name tag_name css_selector xpath 很明显,由于HTML页面的创建方式,一些标签受到设计的限制,例如id、链接文本、名称、标记名称,因为并非所有标记都包含id、链接文本等。。。然而,css_选择器和xpath几乎可以完成它们所能做的所有事情,还有一些,但它们似乎在与什么交互方面受到限制。例如,某些按钮可能无法通
id
link_text
partial_link_text
name
class_name
tag_name
css_selector
xpath
很明显,由于HTML页面的创建方式,一些标签受到设计的限制,例如id、链接文本、名称、标记名称,因为并非所有标记都包含id、链接文本等。。。然而,css_选择器和xpath几乎可以完成它们所能做的所有事情,还有一些,但它们似乎在与什么交互方面受到限制。例如,某些按钮可能无法通过xpath单击,但可以通过css_选择器单击
所以我想知道,什么时候一个人想要使用一个而不是另一个(特别是xpath或css_选择器)
其他函数(id、link_text等)是否非常有用,因为(至少)我发现xpath/css_选择器也可以这样做
在xpath/css选择器上使用链接文本有什么好处吗 这个问题已经在许多论坛上以不同的形式被提出和回答。考虑到所有这些因素,如果我们对定位器进行优先排序,列表如下:
- id:选择具有指定的
属性的元素id
- name:选择具有指定
属性的第一个元素name
- link\u text:选择包含与指定的
匹配的文本的链接(锚定标记)元素LinkText
- partiallink\u text:选择包含与指定
匹配的文本的链接(锚定标记)元素PartialLinkText
- 标记名称:使用
定位元素标记名称
- 类名:使用
定位元素类名
- css\u选择器:使用
选择元素css选择器
- xpath:使用
表达式查找元素xpath
WebDriver
现在是一个应用程序。Selenium中的事情变化非常快。这不仅仅是选择定位器的问题。我们需要使用一个定位器,它将:
- 唯一地标识一个元素
- 必须优化定位器的性能
因此,判决是明确和简洁的。这个问题已经在许多论坛上以不同的形式被提出和回答。考虑到所有这些因素,如果我们对定位器进行优先排序,列表如下:
- id:选择具有指定的
属性的元素id
- name:选择具有指定
属性的第一个元素name
- link\u text:选择包含与指定的
匹配的文本的链接(锚定标记)元素LinkText
- partiallink\u text:选择包含与指定
匹配的文本的链接(锚定标记)元素PartialLinkText
- 标记名称:使用
定位元素标记名称
- 类名:使用
定位元素类名
- css\u选择器:使用
选择元素css选择器
- xpath:使用
表达式查找元素xpath
WebDriver
现在是一个应用程序。Selenium中的事情变化非常快。这不仅仅是选择定位器的问题。我们需要使用一个定位器,它将:
- 唯一地标识一个元素
- 必须优化定位器的性能
因此,结论是明确和简洁的。以我的经验来看,CSS是一个更可取的选择,因为它可以简洁,有很好的文档记录,而且web开发人员可能有更多的经验和接触 id、name、tag_name和class_name都可以通过简单的CSS轻松复制,因此我避免显式使用它们 e、 g id#我的身份证 名称;[name=“我的名字”] 标签名称;我的标签 类名。我的班级 XPath的使用经常遭到恶意攻击;标记为缓慢和不稳定的。然而,我不同意这个观点 当我采访人们时,当他们说他们避免使用Xpath是因为它既慢又脆弱时,我会感到畏缩。速度不再是一个问题,xpath只会像编写它的人一样脆弱。然而,我更喜欢CSS选择器的语法,因此对于大多数用例,我会选择XPath 有3种情况下XPath是更好的选择
- 可以用一个XPath查询替换多个CSS选择器(例如,可以在一个XPath中执行查找元素然后遍历子元素)
- XPath可以基于文本进行选择,而CSS选择器不能这样做
- XPath允许您遍历DOM树,如果您只能通过其子控件标识控件,那么这将非常有用
HTML: <div class="ab cd">
CSS matches: div.ab
CSS matches: div.cd
CSS matches: div.cd.ab
CSS matches: div.ab.cd
XPath matches: //div[@class="ab cd"]
XPath matches: //div[contains(@class, "ab")]
XPath matches: //div[contains(@class, "cd")]
XPath matches: //div[contains(@class, "ab") and contains(@class, "cd")]
XPath DOES NOT match: //div[@class="cd"]
XPath DOES NOT match: //div[@class="ab"]
XPath DOES NOT match: //div[@class="cd ab"]