如何在Selenium WebDriver中获取单个文本节点

时间:2014-06-30 14:57:40

标签: html selenium xpath selenium-webdriver webdriver

我想从标签中获取文本但没有嵌套标签中的文本。即在下面的示例中,我只想从183591标记中获取字符串<small>,并从Service Request ID:标记中排除文本<span>。这不是一件容易的事,因为<span>标记嵌套在<small>标记中。这可以用于WebDriver和XPath吗?

标签中的文字每次都会改变。

<div id="claimInfoBox" style="background-color: transparent;">
<div class="col-md-3 rhtCol">
<div class="cib h530 cntborder">
<h4 class="no-margin-bottom">
<p>
<small style="background-color: transparent;">
<span class="text-primary" style="background-color: transparent;">Service Request ID:</span>
183591
</small>
</p>
<div class="border-bottom" style="background-color: transparent;"></div>
<div id="CIB_PersonalInfo_DisplayMode" class="cib_block">
<div id="CIB_PersonalInfo_EditMode" class="cib_block" style="display: none">
</div>
</div>
<script type="text/javascript">
</div>
</div>

3 个答案:

答案 0 :(得分:4)

您将不得不使用字符串操作。类似的东西:

// you will need to adjust these XPaths to suit your needs
String outside = driver.findElement(By.xpath("//small")).getText();
String inside = driver.findElement(By.xpath("//span")).getText();

String edge = outside.replace(inside, "");

答案 1 :(得分:0)

我找到的最简单方法是获取父small节点和子span节点,并从父节点文本中删除子节点中的字符数:

public String getTextNode() {
  WebElement parent = driver.findElement(By.xpath("//small")); //or By.tagName("small")
  WebElement child = parent.findElement(By.xpath(".//span")); //or By.tagName("span")
  return parent.getText().substring(child.getText().length()).trim();
}

答案 2 :(得分:0)

实际上最简单的方法是使用javascript执行程序,如下所示:

JavascriptExecutor js = ((JavascriptExecutor)driver);
js.executeScript("return $(\"small\").clone().children().remove().end().text();");

这将仅返回与父元素“small”关联的文本。使用trim()省略前导和尾随空格。有关此处发生的事情的完整说明,请参阅以下链接。

参考: http://exploreselenium.com/selenium/exclude-text-content-of-child-elements-of-the-parent-element-in-selenium-webdriver/