我希望所有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个子标签,即span
和a
如果span
仅包含css
的{{1}}类,则获取'block-diff-neutral'
标记的a
属性=>带有此条件的xpath是必需的
预期输出为=> someText或file1
答案 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")