我正在尝试获取以下2个div
元素中的项目的文本内容。它使用绝对路径:
element = driver.findElement(By.xpath(".//*[@id='page-wrapper']/section/section/div/div[2]/section/div/div/div/div[45]"));
data = element.getText();
System.out.println(data);
我想要的文字是:
45 Se Selenium
我试图使用相对XPath获取文本,但它总是失败 我正在尝试使用这种组合:
element = driver.findElement(By.xpath("//div[contains(@class,'elemBox noclaim noclaim-tt') and contains(text(),'45')]"));
或
element = driver.findElement(By.xpath("//div[contains(@class,'elemBox noclaim noclaim-tt')]/div[contains(text(),'45')]"));
但仍然失败。
我有这样的HTML代码:
<div class="elemBox noclaim noclaim-tt text-right m-t-lg animated-add pulse-add animated pulse animated-add-active pulse-add-active" >
<div class="" ng-show="(filterTool(elementName.name)) || (name === '')">
<div class="text-right ng-binding">45</div>
<div class="text-left ng-binding">
<span class="elemSym ng-binding">Se</span>
<br/>
Selenium
</div>
</div>
我该怎么办?
答案 0 :(得分:2)
通过使用contains(text(),'45')
,将仅评估第一个直接子文本节点。这就是您尝试XPath无法找到div
的原因;因为文本“45”嵌套在外部div
:
//div[contains(@class,'elemBox noclaim noclaim-tt') and contains(div/div/text(),'45')]
或者您可能希望尝试使用.
而不是文本来评估外部div
内的整个文本,而不是仅评估第一个直接子文本节点:
//div[contains(@class,'elemBox noclaim noclaim-tt') and contains(.,'45')]
答案 1 :(得分:0)
我认为,您不需要在xpath中使用contains
字。
textRightElement = driver.findElement(By.xpath("//div[@class='elemBox noclaim noclaim-tt']/div[@class='text-right']"));
或如果班级text-right
是唯一的,请使用
textRightElement = driver.findElement(By.xpath("//div[@class='text-right']"));
....如果你真的需要找到带有它的元素值
textRightElement = driver.findElement(By.xpath("//div[text()='45']"));