Selenium嵌套查询以查找顶级父级,然后查找其下的子级

时间:2015-08-21 19:35:45

标签: dom selenium xpath css-selectors parent

我在硒中遇到了如下情况:

查找<span>包含文本span-text,并使用类parent-class找到它的父节点(不是直接父节点,而是遍历DOM树的所有级别后的父节点)并在该父节点下找到具有类<img>

img-class节点

样品:

<div>             -(1)  
   <div>          -(2)
      <div>       -(3)
         <span>   -(4)  
            <div> -(5)
   <img>          -(6)

我正在看它的方法是 - 先找到(4)然后找到它的第一个祖先(1),然后找到(6)实际上属于(2)。我希望嵌套查询,即使看起来很复杂。

任何帮助?

1 个答案:

答案 0 :(得分:0)

这应该做你想要的。我现在假设span-textinnerText而不是某些属性。如果它是一个属性,这可能会变得更简单。

基本上,我们使用DIV类抓取所有parent-class并循环查找具有SPAN内部文本的子span-text。一旦我们找到它,我们就知道我们有正确的父级,所以我们找到了带有“img-class”类的子IMG。我添加了一行来写出找到的标签,以便您可以快速验证它是否正确。

List<WebElement> parents = driver.findElements(By.cssSelector("div.parent-class"));
for (WebElement parent : parents)
{
    List<WebElement> spans = parent.findElements(By.tagName("span"));
    for (WebElement span : spans)
    {
        if (span.getText().contains("span-text"))
        {
            WebElement found = parent.findElement(By.cssSelector("img.img-class"));
            System.out.println(found.getAttribute("outerHTML")); // write out the element to the console to verify
        }
    }
}