我想获取与xpath关联的文本“ // p [@ class ='list-group-item']”。
下面是HTML代码段:
<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 :(得分:0)
如果要填充文本节点上的值,则Selenium不支持它。
例如您的定位器将是//p[@class='list-group-item']/text()[2]
,以查找仅<p>
个标记文本,排除<span>
另一种方法是您可以使用下面的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代码,它返回<p>
的第二个textnode,这是您需要的文本。