Selenium XPath:祖先不包含

时间:2019-04-24 21:17:07

标签: java selenium-webdriver xpath

使用“ bar”类查找div,其祖先在顶级“ foo”的范围内没有“ foo”类。例如,

<div class="foo">
    <div class="foo">
         <div><div>
         <div class="bar"> </div>
         </div></div>
    </div>

    <div class="bar"> </div>
</div>

找到不在嵌套“ foo”内部的栏。

我尝试过的XPath是:

WebElement root = driver.findElement(By.xpath("//div[@class='foo']"));
root.findElements(By.xpath(".//div[not(contains(@class, 'foo'))]//div[contains(@class, 'bar')]"));

但是XPath返回两个元素。还尝试了CSS选择器:

root.findElements(By.cssSelector(":not(.foo) .bar"));

也不起作用。

3 个答案:

答案 0 :(得分:1)

尝试以下XPath-1.0表达式:

//div[contains(@class, 'bar') and not(ancestor::*[@class='foo'])]

它仅返回一项:所需的<div class="bar"> </div>

答案 1 :(得分:0)

此栏仅返回第二栏(至少在运行时...)

//*[@class='bar'][(parent::div[@class='foo'])]

答案 2 :(得分:0)

如果您尝试使用bar类访问直接子div,则这里是xpath。

//div[@class='bar' and parent::div[@class='foo']]