【问题标题】:How to get text only from the parent node in an array如何仅从数组中的父节点获取文本
【发布时间】:2019-03-10 22:59:34
【问题描述】:

我想获取与 xpath "//p[@class='list-group-item']" 关联的文本。

下面是 HTML sn-p:

<div _ngcontent-c3="" class="list-group bg-trans mar-no">
  <p _ngcontent-c3="" class="list-group-item" style="border-bottom: 1px dotted #ddd;">
    <span _ngcontent-c3="" class="badge badge-pink" id="stat_2" style="background-color: rgb(225, 124, 167);">0</span>
    In Action
  </p>
  <p _ngcontent-c3="" class="list-group-item" style="border-bottom: 1px dotted #ddd;">
    <span _ngcontent-c3="" class="badge badge-purple" id="stat_3" style="background-color: rgb(152, 98, 145);">5</span>
    Completed
  </p>
  <p _ngcontent-c3="" class="list-group-item" style="border-bottom: 1px dotted #ddd;">
    <span _ngcontent-c3="" class="badge badge-dark" id="stat_4" style="background-color: rgb(59, 65, 70);">0</span>
    Closed
  </p>
  <p _ngcontent-c3="" class="list-group-item" style="border-bottom: 1px dotted #ddd;">
    <span _ngcontent-c3="" class="badge badge-defadivt" id="stat_8" style="background-color: rgb(227, 232, 238);">0</span>
    Long Term Solution
  </p>
  <p _ngcontent-c3="" class="list-group-item" style="border-bottom: 1px dotted #ddd;font-weight:bold">
    <span _ngcontent-c3="" class="badge badge-defadivt" id="stat_8">5</span>
    Total
  </p>
</div>

结果我想要“正在执行”、“已完成”、“已结束”、“总计”。

下面是我目前写的代码。

List<WebElement> lst= driver.findElements(By.xpath("//p[@class='list-group-item']"));
List<String> strgs = new ArrayList<String>();

for(WebElement e1 : lst){
    strgs.add(e1.getText());
}
System.out.println(strgs);

我得到的输出:

[
  0 In Action, 
  5 Completed,
  0 Closed, 
  0 Long Term Solution, 
  5 Total
]

【问题讨论】:

  • 您能否描述一下您从代码中得到的实际结果。结果不正确还是您不确定想法是否正确?
  • 输出:[0 在行动,5 完成,0 关闭,0 长期解决方案,5 总计]
  • String count = driver.findElement(By.xpath("//div[@class='list-group bg-trans mar-no']/p).getText(); 试试这个xpath 可能是你的 xpath 错误
  • 您是否只想获取元素文本 (

    ),不包括任何子元素文本 ()?试试这个帖子:stackoverflow.com/questions/39741076/…

  • @Dan 是的,它有帮助。谢谢!

标签: java selenium xpath css-selectors webdriver


【解决方案1】:

如果你想在文本节点上填充值,那么 Selenium 不支持它。 例如您的定位器将是 //p[@class='list-group-item']/text()[2] 以仅查找 &lt;p&gt; 标记文本排除 &lt;span&gt;

另一种方法是您可以使用下面的JavascriptExecutor 代码来执行任务:

List<WebElement> lst= driver.findElements(By.xpath("//p[@class='list-group-item']"));
List<String> strgs = new ArrayList<String>();

for (WebElement element : lst) {

    JavascriptExecutor js = (JavascriptExecutor) driver;
    String sourceName = (String) js.executeScript("return arguments[0].childNodes[2].textContent", element);
    strgs.add(sourceName.trim());
}

System.out.println(strgs);

这里的return arguments[0].childNodes[2].textContent 是javascript 代码,它返回&lt;p&gt; 的第二个文本节点,这是您需要的预期文本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-22
    • 1970-01-01
    相关资源
    最近更新 更多