如何使用Selenium获取深度div标签内的文本

时间:2016-06-17 06:05:10

标签: java selenium xpath selenium-webdriver

我正在尝试获取以下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>

我该怎么办?

2 个答案:

答案 0 :(得分:2)

通过使用contains(text(),'45'),将仅评估第一个直接子文本节点。这就是您尝试XPath无法找到div的原因;因为文本“45”嵌套在外部div

的2个级别
//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']"));