为什么在Selenium中xpath不如id或名称定位器受欢迎?

为什么在Selenium中xpath不如id或名称定位器受欢迎?,selenium,selenium-webdriver,xpath,Selenium,Selenium Webdriver,Xpath,具有唯一id/名称的web元素也可以使用xpath进行标识。那么使用By.id/By.name比使用By.xpath有什么优势呢。考虑下面的例子。下面是一个web元素 <input id="abc" name="abc" xpath="abc"> 此web元素可以标识为: By.id(“abc”) By.name(“abc”) By.xpath(“./*[@id='abc']);或By.xpath(“./*[@name='abc']) 我想知道使用1的好处是什么。或2。超过3个

具有唯一id/名称的web元素也可以使用xpath进行标识。那么使用By.id/By.name比使用By.xpath有什么优势呢。考虑下面的例子。下面是一个web元素

<input id="abc" name="abc" xpath="abc">

此web元素可以标识为:

  • By.id(“abc”)
  • By.name(“abc”)
  • By.xpath(“./*[@id='abc']);或By.xpath(“./*[@name='abc'])

  • 我想知道使用1的好处是什么。或2。超过3个。?

    正如Gilles Quenot所提到的,你不能假设ID属性是唯一的,但它过去是唯一的,将来也是唯一的,除非我们谈论的是移动应用程序。在web应用程序中,ID是理想的搜索方法,因为它应该是唯一的

    name属性通常也是唯一的,但它不一定是唯一的,而且通常不是唯一的

    使用xpath的一个缺点是,可以在文档中移动元素或添加其他项,并且可能会破坏xpath,具体取决于xpath的构建方式。至少在理论上,使用ID的定位器对这种破坏“更”免疫,但正如所暗示的,没有什么是可以保证的


    一般来说,如果唯一ID不可用,我将使用xpath,并且我尝试编写xpath,使其具有足够的通用性,以抵抗“破坏”。

    正如Gilles Quenot所提到的,您不能假设ID属性是唯一的,但它过去是唯一的,将来也是唯一的,除非我们讨论的是移动应用程序。在web应用程序中,ID是理想的搜索方法,因为它应该是唯一的

    name属性通常也是唯一的,但它不一定是唯一的,而且通常不是唯一的

    使用xpath的一个缺点是,可以在文档中移动元素或添加其他项,并且可能会破坏xpath,具体取决于xpath的构建方式。至少在理论上,使用ID的定位器对这种破坏“更”免疫,但正如所暗示的,没有什么是可以保证的


    通常,如果唯一ID不可用,我将使用xpath,并且我尝试编写它,使其具有足够的通用性以抵抗“破坏”。

    我不认为xpath不如ID和名称更受欢迎

  • ID可能并不总是唯一的,在当前的网站DOM中,ID大多是随时间变化的。你不能只使用一个ID,然后再次运行脚本,如果你需要尝试,你也可以在Amazon网站上查看
  • 名称可能是唯一的,也可能不是唯一的。在某些页面中,您可能会发现元素可能具有唯一的名称,但让我们举一个例子,如果您有一个名和姓的页面,那么开发团队只需将这些名行复制并粘贴到姓。现在,您将在单个页面中找到相同的name属性。所以你也不能依赖名字
  • Xpath是唯一的,因为您是设计Xpath的人,并且您总是希望元素具有唯一标识。所以现在在名称示例中,您可以分别获得名字和姓氏

  • 我认为Xpath比Name和ID属性更好。

    我不认为Xpath不如ID和Name更受欢迎

  • ID可能并不总是唯一的,在当前的网站DOM中,ID大多是随时间变化的。你不能只使用一个ID,然后再次运行脚本,如果你需要尝试,你也可以在Amazon网站上查看
  • 名称可能是唯一的,也可能不是唯一的。在某些页面中,您可能会发现元素可能具有唯一的名称,但让我们举一个例子,如果您有一个名和姓的页面,那么开发团队只需将这些名行复制并粘贴到姓。现在,您将在单个页面中找到相同的name属性。所以你也不能依赖名字
  • Xpath是唯一的,因为您是设计Xpath的人,并且您总是希望元素具有唯一标识。所以现在在名称示例中,您可以分别获得名字和姓氏

  • 我认为Xpath比Name和ID属性更好。

    您的问题非常有效,您提到的每一个可能的选项都会起作用,但为什么我们更喜欢ID和名称定位器而不是Xpath

    与其给出直接的答案,不如让我解释一些其他的概念来帮助你们理解它

    • selenium通过HTMLDOM和HTMLDOM与web控件交互的方式是W3C标准,每个浏览器和它的Java脚本引擎都遵循该标准,如用于chrome的V8、用于Edge的Chakra等

    • 根据W3C标准,所有浏览器都支持GetElementById()和GetElementsByName()的HTML DOM公开方法。所以,当您使用诸如Id、Name等定位器时,这些定位器已经实现,并且将始终适用于您

    提及

    • XPath实际上用于在XML文档中的元素和属性之间导航。由于is HTMLDOM也是XML的形式,所以Xpath也可以工作,但Xpath不是为HTMLDOM设计的。它还有其他目的

    • 结论是,当您已经有了HTML DOM支持的方法时,应该优先考虑那些优于XPath的方法,XPath是一种通用的导航方式,并且在Internet Explorer browser中存在一些XPath实例,但其性能并没有达到预期


    您的问题非常有效,您提到的每一个可能的选项都会起作用,但为什么我们更喜欢ID和名称定位器而不是XPath

    与其给出直接的答案,不如让我解释一些其他的概念来帮助你们理解它

    • selenium通过HTMLDOM和HTMLDOM与web控件交互的方式是W3C标准,每个浏览器和它的Java脚本引擎都遵循该标准,如用于chrome的V8、用于Edge的Chakra等

    • 根据W3C标准,所有浏览器都支持GetElementById()和GetElementsByName()的HTML DOM公开方法。所以,当您使用诸如Id、名称等定位器时,它们是alr