Selenium XPath: предок не содержит - PullRequest
1 голос
/ 25 апреля 2019

Найдите div с классом "bar", у предка которого нет класса "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 ]

1 голос
/ 25 апреля 2019

Попробуйте это выражение XPath-1.0:

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

Возвращает только один элемент: требуемый <div class="bar"> </div>.

0 голосов
/ 25 апреля 2019

Если вы пытаетесь получить доступ к прямому дочернему div с помощью класса bar, то вот xpath.

//div[@class='bar' and parent::div[@class='foo']]
0 голосов
/ 25 апреля 2019

Этот возвращает только 2-й бар (по крайней мере, когда я его запускаю ...)

//*[@class='bar'][(parent::div[@class='foo'])]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...