【问题标题】:How to locate child nodes having attribute xpath="1" and xpath="2"如何定位具有属性 xpath="1" 和 xpath="2" 的子节点
【发布时间】:2019-08-22 21:30:24
【问题描述】:

我正在尝试定位具有两个子节点的 Web 元素:

<div _ngcontent-c2="" class=" " title="Twelve (Start date is 31| 0 user)" xpath="1"></div>
<div _ngcontent-c2="" class=" " title="Twelve (Start date is 31| 0 user)" xpath="2"></div>

我尝试//div[contains(@title,'Twelve (Start date is 31| 0 user)')][1] 获取第一个元素,但对我不起作用。

【问题讨论】:

  • @title 属性都不像 XPath 那样以 'Form ' 开头。
  • 你想选择这两个元素还是他们的父亲?
  • Find element by attribute的可能重复

标签: selenium selenium-webdriver xpath xpath-2.0 xpath-1.0


【解决方案1】:

你可以试试CSS

div[xpath='1']

div[xpath='2']

【讨论】:

    【解决方案2】:

    xpath="1"

    xpath="1"属性是xpath v1.0的引用

    xpath="2"

    xpath="2"属性是xpath v2.0的引用

    郑重声明 Selenium 仅支持 XPath v1.0

    包含父标签的更多outerHTML会帮助我们构建一个更规范的答案。此外,您正在使用的语言绑定的信息也丢失了。但是,要定位第一个元素,您需要为所需的 visibilityOfElementLocated() 诱导 WebDriverWait 并且您可以使用以下可以使用以下 xpath:

    • Java

      WebElement element = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[contains(@title,'Start date is 31') and @xpath='1']")));
      
    • Python

      element = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//div[contains(@title,'Start date is 31') and @xpath='1']")))
      

    在这里你可以找到关于What are the differences between versions of XPath (1.0, 2.0, 3.1)的详细讨论

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-30
      • 1970-01-01
      • 1970-01-01
      • 2013-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-24
      相关资源
      最近更新 更多