Selenium webdriver 如果我不知道子元素和父元素之间存在的元素数,如何查找父元素
FindElementBy.XPathparent::tr有什么问题;如果不知道子元素和父元素之间存在的元素数量,如何查找父元素使用轴获取元素的父元素。 所以在这个例子中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
<?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;
}