element.getText()方法在java selenium中不起作用

时间:2016-01-04 12:12:14

标签: java selenium xpath selenium-webdriver

<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>关闭标记导致问题。有没有其他方法来获取文本?

4 个答案:

答案 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元素,除了属性
  • 之外没有任何内容
  • 包含&#34; Project Updated&#34;
  • 的文本节点

因此,当您选择内部div并使用.getText()时,您最终会在结果中找到 2 文本节点,这一点都不足为奇。获取元素文本内容的另一种方法是在XPath表达式中使用text()

//*[@id='project-update-success-information']/text()

将返回(由--------分隔的各个元素):

[whitespace-only text node]
-----------------------
Project Updated

解决方案是

  1. 使用getText()检索所有文本节点,然后排除仅包含空格或
  2. 的节点
  3. 使用直接定位文本节点的XPath表达式,并排除仅包含空格的表达式。执行此操作的标准方法是[normalize-space()]

    //*[@id='project-update-success-information']/text()[normalize-space()]

  4. 请注意,通常,无法保证元素的文本内容将位于单个文本节点中。很可能您有时会遇到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();