【问题标题】:Getting XPath of parent element using using text of child element使用子元素的文本获取父元素的 XPath
【发布时间】:2020-03-24 02:58:00
【问题描述】:

给定这样的 XML 结构:

<ul>
    <li role="treeitem" aria-level="1" aria-expanded="true">
        <span role="presentation"></span>
        <span>
            <span>Seasons</span>
        </span>
    </li>
    <ul>
        <li role="treeitem" aria-level="2" aria-expanded="false">
            <span role="presentation"></span>
            <span>
                <span>Winter months</span>
            </span>
        </li>
        <ul></ul>
        <li role="treeitem" aria-level="2" aria-expanded="true">
            <span role="presentation"></span>
            <span>
                <span>Spring months</span>
            </span>
        </li>
        <ul >
            <li role="treeitem" aria-level="3" >
                <span>
                    <span>March</span>
                </span>
            </li>
            <ul></ul>
            <li role="treeitem" aria-level="3">
                <span>
                    <span>April</span>
                </span>
            </li>
            <ul></ul>
            <li role="treeitem" aria-level="3">
                <span>
                    <span>May</span>
                </span>
            </li>
            <ul></ul>
        </ul>
        <li role="treeitem" aria-level="2" aria-expanded="false">
            <span role="presentation"></span>
            <span>
                <span>Summer months</span>
            </span>
        </li>
        <ul></ul>
        <li role="treeitem" aria-level="2" aria-expanded="false">
            <span role="presentation"></span>
            <span>
                <span>Autumn months</span>
            </span>
        </li>
        <ul></ul>
    </ul>
</ul>

&lt;span role="presentation"&gt;&lt;/span&gt; 是按钮,单击时会打开一个树分支。 aria-expanded = 'true' 表示打开的分支。

  1. 如何获取包含子标签内 'Winter months' 文本的 li 元素的路径(将其保存在 String xpathToLi 中)?
  2. 如何从找到的路径xpathToLi 中获取the aria-expanded 属性的值?
  3. 如果aria-expanded = 'false'xpathToLi路径中,找到xpathToLi带有role = 'presentation'的元素并点击它。

【问题讨论】:

    标签: selenium xpath xpath-1.0


    【解决方案1】:

    假设您使用的是 java。

    1. 如何获取包含子标签内“冬季月份”文本的 li 元素的路径(将其保存在 String xpathToLi 中)?

    WebElement xpathToLi = driver.findElement(By.xpath("//span[text()='Winter months']/ancestor::li"));

    1. 如何从找到的路径 xpathToLi 中获取 aria-expanded 属性的值?

    String ariaExpanded = xpathToLi.getAttribute("aria-expanded");

    1. 如果 aria-expanded = 'false' 在 xpathToLi 路径中,则在 xpathToLi 中找到 role = 'presentation' 的元素并点击它。

    if(ariaExpanded.equalsIgnoreCase("false")) { xpathToLi.findElement(By.xpath("./span[@role='presentation']")).click(); }

    【讨论】:

    • 谢谢!这有帮助!但是“父母”使用了“祖先”。它与孩子的区别在于它可以是任何遥远的地方。 //span[text()='Winter months']/ancestor::li
    • 哦,是的,它应该是祖先。
    【解决方案2】:

    要提取属性 aria-expanded 的值,即 冬季月份,您可以使用以下解决方案:

    • Java 基于xpath的解决方案:

      System.out.println(new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//ul//span[text()='Seasons']//following::ul[1]//span[text()='Winter months']//preceding::li[1]"))).getAttribute("aria-expanded"));
      
    • Python 基于xpath 解决方案:

      print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//ul//span[text()='Seasons']//following::ul[1]//span[text()='Winter months']//preceding::li[1]"))).get_attribute("aria-expanded"))
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-23
      • 2018-07-09
      • 2015-03-09
      • 2022-12-18
      • 1970-01-01
      相关资源
      最近更新 更多