Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Selenium中的许多findElement/By函数中,您什么时候会使用其中一个?_Python_Python 3.x_Selenium_Selenium Webdriver_Css Selectors - Fatal编程技术网

Python 在Selenium中的许多findElement/By函数中,您什么时候会使用其中一个?

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几乎可以完成它们所能做的所有事情,还有一些,但它们似乎在与什么交互方面受到限制。例如,某些按钮可能无法通

Selenium包含findElement函数,如下所示

.查找元素_

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中的事情变化非常快。这不仅仅是选择定位器的问题。我们需要使用一个定位器,它将:

  • 唯一地标识一个元素
  • 必须优化定位器的性能
记住这两个因素,最好的策略是模仿DOM。DOE提到定位器列表,如下所示:


因此,判决是明确和简洁的。

这个问题已经在许多论坛上以不同的形式被提出和回答。考虑到所有这些因素,如果我们对定位器进行优先排序,列表如下:

  • id:选择具有指定的
    id
    属性的元素
  • name:选择具有指定
    name
    属性的第一个元素
  • link\u text:选择包含与指定的
    LinkText
    匹配的文本的链接(锚定标记)元素
  • partiallink\u text:选择包含与指定
    PartialLinkText
    匹配的文本的链接(锚定标记)元素
  • 标记名称:使用
    标记名称
    定位元素
  • 类名:使用
    类名
    定位元素
  • css\u选择器:使用
    css选择器
    选择元素
  • xpath:使用
    xpath
    表达式查找元素
所以现在的问题是什么是新的

答案是硒最近进化了很多
WebDriver
现在是一个应用程序。Selenium中的事情变化非常快。这不仅仅是选择定位器的问题。我们需要使用一个定位器,它将:

  • 唯一地标识一个元素
  • 必须优化定位器的性能
记住这两个因素,最好的策略是模仿DOM。DOE提到定位器列表,如下所示:


因此,结论是明确和简洁的。

以我的经验来看,CSS是一个更可取的选择,因为它可以简洁,有很好的文档记录,而且web开发人员可能有更多的经验和接触

idnametag_nameclass_name都可以通过简单的CSS轻松复制,因此我避免显式使用它们

e、 g

id#我的身份证

名称;[name=“我的名字”]

标签名称;我的标签

类名。我的班级

XPath的使用经常遭到恶意攻击;标记为缓慢和不稳定的。然而,我不同意这个观点

当我采访人们时,当他们说他们避免使用Xpath是因为它既慢又脆弱时,我会感到畏缩。速度不再是一个问题,xpath只会像编写它的人一样脆弱。然而,我更喜欢CSS选择器的语法,因此对于大多数用例,我会选择XPath

有3种情况下XPath是更好的选择

  • 可以用一个XPath查询替换多个CSS选择器(例如,可以在一个XPath中执行查找元素然后遍历子元素)

  • XPath可以基于文本进行选择,而CSS选择器不能这样做

  • XPath允许您遍历DOM树,如果您只能通过其子控件标识控件,那么这将非常有用

如果可能的话,我总是避免按文本选择,但是如果必须的话,我更喜欢使用XPath而不是内置的链接文本部分链接文本方法,因为XPath查询允许我
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"]