具有sss类的span的div的Xpath获取其同级锚链接

时间:2019-05-24 11:30:47

标签: selenium xpath

我希望所有div的锚链接的跨度为css class ='block-diff-neutral'

<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个子标签,即spana 如果span仅包含css的{​​{1}}类,则获取'block-diff-neutral'标记的a属性=>带有此条件的xpath是必需的

预期输出为=> someText或file1

2 个答案:

答案 0 :(得分:1)

尝试以下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')

答案 1 :(得分:1)

您的标记看起来无效(它缺少一些结束标记),并且在某些地方看起来很混乱(多层<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

这将找到一个类为file-info的div,该类具有一个具有类<span>的后代block-diff-neutral元素,然后在该div元素内找到锚点。 / p>

要从该XPath中找到WebElement中的title属性,您将需要使用.getAttribute("title")