<span class="label label-danger" style="font-size : 13px; font-weight : 400;">Critical</span>
以下是我正在使用的xpath:
.//tr[@data-index='0']/td/span
我在HTML源代码中有一行如上所述。所以,我使用了相应的Xpath并使用getText()
方法来获取文本,即Critical。我成功了。
但是,我在另一个页面中有另一行像这样。
<div class="col-xs-12">
<div id="project-update-success-information" class="panel-confirmation success" style="display: none;">
<span class="fa fa-check"/>
Project Updated
</div>
以下是我使用的xpath: -
.//*[@id='project-update-success-information']/span
我使用了相应的Xpath和getText()
,但遗憾的是它并没有为我检索文本。我怀疑第二行中没有</span>
关闭标记导致问题。有没有其他方法来获取文本?
答案 0 :(得分:5)
这个问题已有很多答案,但没有一个真正解释问题。首先,在继续讨论真正的问题之前,让我们先解开关于自闭元素的初步困惑:不,这不是像
这样的元素的问题<span class="fa fa-check"/>
没有</span>
标记。没有必要指出它的结束位置,因为/>
已经告诉您此元素不包含任何内容并且此时关闭。
然后,让我们只查看您显示的文档片段:
<div class="col-xs-12">
<div id="project-update-success-information" class="panel-confirmation success" style="display: none;">
<span class="fa fa-check"/>
Project Updated
</div>
</div>
XPath表达式(请注意,在表达式的最开始,您很可能不需要.
):
//*[@id='project-update-success-information']
将返回内部div
元素及其包含的所有元素。它包含的内容完全按以下顺序排列:
span
元素,除了属性因此,当您选择内部div
并使用.getText()
时,您最终会在结果中找到 2 文本节点,这一点都不足为奇。获取元素文本内容的另一种方法是在XPath表达式中使用text()
:
//*[@id='project-update-success-information']/text()
将返回(由--------
分隔的各个元素):
[whitespace-only text node]
-----------------------
Project Updated
解决方案是
getText()
检索所有文本节点,然后排除仅包含空格或使用直接定位文本节点的XPath表达式,并排除仅包含空格的表达式。执行此操作的标准方法是[normalize-space()]
:
//*[@id='project-update-success-information']/text()[normalize-space()]
请注意,通常,无法保证元素的文本内容将位于单个文本节点中。很可能您有时会遇到HTML或XML,其中元素有多个文本节点,所有这些节点都包含非空白字符,例如:
<div>
Project
<span/>
Updated
</div>
答案 1 :(得分:0)
尝试下面的text()方法: -
//span[@class='fa fa-check']/text()
希望它会对你有所帮助:)。
答案 2 :(得分:0)
元素为空,因此不包含文本
<span class="fa fa-check"/>
如果另一方面它就像
<span class="fa fa-check">Some content</span>
然后它会像你在第一次尝试中那样包含一些文字。
在不知道更多内容的情况下,我会尝试另一种xpath方法:follow-sibling。
答案 3 :(得分:0)
尝试:
driver.findElement(By.className("panel-confirmation success")).getText();