使用Selenium WebDriver中的XPath从子节点遍历到祖先节点

时间:2020-02-19 03:40:38

标签: java selenium xpath

我正在尝试使用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()循环,但它只能工作一次,但现在已经不行了。

3 个答案:

答案 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 ,并且可以使用以下基于Locator Strategy

  • xpath

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//span[contains(., '" + itemTitle + "')]//preceding::div[starts-with(@onclick, 'myFunction')]"))).click();