Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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
Selenium webdriver 如果我不知道子元素和父元素之间存在的元素数,如何查找父元素_Selenium Webdriver_Xpath - Fatal编程技术网

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

Selenium webdriver 如果我不知道子元素和父元素之间存在的元素数,如何查找父元素,selenium-webdriver,xpath,Selenium Webdriver,Xpath,FindElementBy.XPathparent::tr有什么问题;如果不知道子元素和父元素之间存在的元素数量,如何查找父元素使用轴获取元素的父元素。 所以在这个例子中 <?xml version='1.0' encoding='utf-8'?> <root> <tr class="this">that <a> <tr class="these">those

FindElementBy.XPathparent::tr有什么问题;如果不知道子元素和父元素之间存在的元素数量,如何查找父元素使用轴获取元素的父元素。 所以在这个例子中

<?xml version='1.0' encoding='utf-8'?>
<root>
    <tr class="this">that
        <a>
            <tr class="these">those
                <b>
                    <c />
                </b>
            </tr>
        </a>
    </tr>
</root>
这就是文本的结果

那些


假设您有以下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节点有多个祖先,它们的前面是price,前面是book,后面是bookstore

因此,//b/祖先::price将选择作为节点b祖先的price节点

并且,//b/祖先::book将选择作为节点b的祖先的book节点

并且,//b/祖先::bookstore将选择作为节点b的祖先的bookstore节点

更新:

如果希望直接父项带有该标记,可以使用//b/

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

这对我来说很有用

 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;
    }

它将从dom捕获第一个tr标记。我在找有那个标签的直系父母。不幸的是,我的tr标记都没有唯一定义它的属性。@user3386785:请在更新部分查看我的更新答案,或者您也可以参考上面的注释。
//b/parent::a  (will select the parent of b which is a)  
 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;
    }