那里有几个选择。示例代码是Java,但是其他语言的端口应该很简单。
WebElement myElement = driver.findElement(By.id("myDiv"));
WebElement parent = (WebElement) ((JavascriptExecutor) driver).executeScript(
"return arguments[0].parentNode;", myElement);
WebElement myElement = driver.findElement(By.id("myDiv"));
WebElement parent = myElement.findElement(By.xpath("./.."));
WebElement
注意:正如您所看到的,对于JavaScript版本,您需要driver
。如果您无法直接访问它,可以使用以下命令从WebElement
中检索它:
WebDriver driver = ((WrapsDriver) myElement).getWrappedDriver();
关于XPath axes
的更多信息
让我们说我们有低于HTML
结构:
<div class="third_level_ancestor">
<nav class="second_level_ancestor">
<div class="parent">
<span>Child</span>
</div>
</nav>
</div>
//span/parent::*
- 返回任何直接父元素。在这种情况下,输出是<div class="parent">
//span/parent::div[@class="parent"]
- 仅返回精确节点类型的父元素,并且仅当指定的谓词为True时才返回。输出:<div class="parent">
//span/ancestor::*
- 返回所有祖先(包括父母)。输出:<div class="parent">
,<nav class="second_level_ancestor">
,<div class="third_level_ancestor">
......
//span/ancestor-or-self::*
- 返回所有祖先和当前元素本身。输出:<span>Child</span>
,<div class="parent">
,<nav class="second_level_ancestor">
,<div class="third_level_ancestor">
......
//span/ancestor::div[2]
- 返回div
类型的第二个祖先(从父节点开始)。输出:<div class="third_level_ancestor">
看看可能的XPath axes,你可能正在寻找parent
。根据您查找第一个元素的方式,您可以调整xpath。
或者,您可以尝试double-dot syntax,..
,它选择当前节点的父节点。
我们将您的DOM视为
<a>
<!-- some other icons and texts -->
<span>Close</span>
</a>
现在您需要根据<span>
文本选择父标记'a',然后使用
driver.findElement(By.xpath("//a[.//span[text()='Close']]"));
说明:根据节点的子节点值选择节点
这可能对其他人有用:使用此示例html
<div class="ParentDiv">
<label for="label">labelName</label>
<input type="button" value="elementToSelect">
</div>
<div class="DontSelect">
<label for="animal">pig</label>
<input type="button" value="elementToSelect">
</div>
例如,如果我想在同一部分(例如div)中选择一个元素作为标签,则可以使用它
//label[contains(., 'labelName')]/parent::*//input[@value='elementToSelect']
这只是意味着,寻找一个名为a
的标签(它可能像h2
,labelName
)。导航到该标签的父级(即div class="ParentDiv"
)。在该父级的后代内搜索,以查找值为elementToSelect
的任何子元素。有了它,它将不会选择elementToSelect
div为父母的第二个DontSelect
。
诀窍在于,您可以首先导航到父级,然后在该父级的后代中搜索所需的元素,从而减少元素的搜索区域。在某些情况下,也可以使用其他语法,如following-sibling::h2
。这意味着兄弟姐妹跟随元素h2
。这适用于同一级别的元素,具有相同的父级。
您可以通过在xpath中使用/ parent :: node()来完成此操作。只需将/ parent :: node()附加到子元素xpath即可。
例如:让子元素的xpath是childElementXpath。
然后它的直接祖先的xpath将是childElementXpath / parent :: node()。
它的下一个祖先的Xpath将是childElementXpath / parent :: node()/ parent :: node()
等等..
此外,您可以使用'childElementXpath/ancestor::*[@attr="attr_value"]'
导航到元素的祖先。当您有一个已知的子元素是唯一但具有无法唯一标识的父元素时,这将非常有用。
我们可以在Selenium的帮助下选择父标签,如下所示:
driver.findElement(By.xpath("//table[@id='abc']//div/nobr[.='abc']/../.."));
这将帮助您找到已知元素的祖父母。只需删除一个(/ ..)即可找到直接的父元素。
喜欢:
driver.findElement(By.xpath("//table[@id='abc']//div/nobr[.='abc']/..));
还有其他一些方法可以实现这一点,但它对我来说很好。