我想从标签中获取文本但没有嵌套标签中的文本。即在下面的示例中,我只想从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>
答案 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()省略前导和尾随空格。有关此处发生的事情的完整说明,请参阅以下链接。