Xpath для div с span, имеющим класс css, получает его родственную ссылку - PullRequest
0 голосов
/ 24 мая 2019

Я хочу, чтобы все ссылки якоря div имели диапазон css class = 'block-diff-нейтральный'

<div class="file-info" xpath="1">
<span class="diffstat tooltipped tooltipped-e" aria-label="0 "> 
<span class="block-diff-deleted"></span>
<span class="block-diff-deleted"></span>
<span class="block-diff-neutral" style=""></span>
<span class="block-diff-neutral"></span>
<span class="block-diff-neutral"></span>
</span>

<a href="#diff-58bd7a5666eef4b8a9e91ed8c4214216" class="link-gray-dark" title="file1" style="">someText</a>
</div>

<div class="file-info" xpath="1">
<span class="diffstat tooltipped tooltipped-e" aria-label="0 "> 
<span class="block-diff-deleted"></span>
<span class="block-diff-deleted"></span>
</span>
<a href="#diff-58bd7a5666eef4b8a9e91ed8c4214216" class="link-gray-dark" title="file2" style="">someText2</a>
</div>

Здесь div содержит 2 подтэга, то есть span и a, если spanсодержит класс css как 'block-diff-neutral' только тогда получить атрибут title тега a => требуется xpath с этим условием

Ожидаемый вывод => someText или file1

Ответы [ 2 ]

1 голос
/ 24 мая 2019

Ваша разметка выглядит недействительной (в ней отсутствуют некоторые закрывающие теги) и местами выглядит слишком запутанной (многослойные теги <span>).

Однако это должно делать то, что вы хотите, если я понял вашутребования правильно.

//div[@class="file-info"][./descendant-or-self::span[@class="block-diff-neutral"]]/a

, если диапазон с отсутствующим закрывающим тегом на самом деле является родительским для якоря, это было бы лучше:

//div[@class="file-info"][./descendant-or-self::span[@class="block-diff-neutral"]]/descendant-or-self::a

Это позволит найти div с классомfile-info, имеющий потомок <span> с классом block-diff-neutral, а затем найдите привязку внутри этого div элемента.

Чтобы получить атрибут title из WebElement, который вы найдете с этим XPathвам нужно будет использовать .getAttribute("title")

1 голос
/ 24 мая 2019

Попробуйте следующий Xpath.

//span[@class='block-diff-neutral']/parent::span/parent::div/a

Или используйте следующий брат

//span[@class='block-diff-neutral']/parent::span/following-sibling::a

Если вы используете python, используйте следующий код и любой из приведенных выше локаторов xpath.

driver.find_element_by_xpath("//span[@class='block-diff-neutral']/parent::span/parent::div/a").text


driver.find_element_by_xpath("//span[@class='block-diff-neutral']/parent::span/parent::div/a").get_attribute("title")

Если вы используете Java, попробуйте код ниже и любой локатор, упомянутый выше.

driver.findElement(By.xpath("//span[@class='block-diff-neutral']/parent::span/following-sibling::a").getText()
driver.findElement(By.xpath("//span[@class='block-diff-neutral']/parent::span/following-sibling::a").getAttribute('title')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...