我正在尝试使用xpath从子节点遍历到祖先节点,但是它不起作用。
amplify push
节点是:
WebElement menuItemText = driver.findElement(By.xpath("//span[contains( text(), '" + itemTitle + "')]"));
menuItemText = menuItemText.findElement(By.xpath(".//parent::*[@attribute='onclick']"));
menuItemText.click();
但是,函数名称非常复杂,每个节点都有奇怪的唯一ID。并不是太重要,但是我想将DOM从子节点遍历到包含<div onclick="something()">
<div onclick="myFunction()">
<div>
<div>
<span>Text!</span>
</div>
</div>
</div>
</div>
属性的父/祖先节点。我想在遍历DOM时获得第一个 onclick 。因此,onclick
是我想要的。
有可能吗?我试图做一个while()循环,但它只能工作一次,但现在已经不行了。
答案 0 :(得分:0)
您可以使用ancestor关键字从子节点直接访问ancestor元素,如下所示:
//span[contains(text(),\"Text\")]/ancestor::div[@onclick]
答案 1 :(得分:0)
我希望以下任何一项都能解决此问题。即),它将选择包含点击属性的第一个祖先div。
1: //span[contains(text(),\"Text\")]/ancestor::div[@onclick][1]
2: (//span[contains(text(),\"Text\")]/ancestor::div[@onclick])[1]
答案 2 :(得分:0)
要搜索文本为 Text!
的元素,并引用该元素以找到具有<div>
属性的onclick
标签为 myFunction()< / em>,您必须为elementToBeClickable
引入 WebDriverWait ,并且可以使用以下基于xpath的Locator Strategy:
xpath :
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//span[contains(., '" + itemTitle + "')]//preceding::div[starts-with(@onclick, 'myFunction')]"))).click();