如何查找父元素如果我不知道子元素和Parent元素之间存在的元素数量

时间:2018-06-19 13:57:58

标签: selenium-webdriver xpath

FindElement(By.XPath("parent::tr"));怎么了?如何查找父元素如果我不知道子元素和父元素之间存在的元素数量

3 个答案:

答案 0 :(得分:0)

使用ancestor::轴获取元素的父代。
所以在这个例子中

<?xml version='1.0' encoding='utf-8'?>
<root>
    <tr class="this">that
        <a>
            <tr class="these">those
                <b>
                    <c />
                </b>
            </tr>
        </a>
    </tr>
</root>

选择元素tr的第一个c父对象,使用

FindElement(By.XPath("//c/ancestor::tr[1]"));

这将导致text()

  

那些

答案 1 :(得分:0)

假设您有以下HTML:

<?xml version="1.0" encoding="UTF-8"?>

<bookstore>

<book>
  <title lang="en">Harry Potter</title>
  <price>29.99
     <a>
        <b></b> 
     </a>
  </price>
</book>

<book>
  <title lang="en">Learning XML</title>
  <price>39.95</price>
</book>

</bookstore>  

您在节点b上。

现在 // b ,这将选择当前节点。

//b/parent::a  (will select the parent of b which is a)  

请注意,b节点有多个祖先,其价格在书本之前,而这个书本在书店之前。

因此,//b/ancestor::price将选择价格节点,它是节点 b 的祖先。

//b/ancestor::book,将选择 book节点,它是节点 b 的祖先。

//b/ancestor::bookstore,将选择 bookstore节点,它是节点 b 的祖先。

更新:

如果您希望直接父级带有该标签,则可以使用//b/..

请注意,/ ..将为您提供直接的父节点。 希望这会有所帮助。

答案 2 :(得分:0)

这对我有用

 public IWebElement ReturnParentElement(string stringLabel)
    {
        IWebElement actionLabel = DriverManager.IDriver.FindElements(By.TagName("h3")).Single(t => t.Text.Trim().Contains(stringLabel));
        IWebElement parentElement = actionLabel.FindElement(By.XPath(".."));
        do
        {
            parentElement = parentElement.FindElement(By.XPath(".."));
        } while (parentElement.TagName != "tr");

        return parentElement;
    }