我有一个完全基于HTML的报告。我正在尝试自动化并使用selenium网络驱动程序来查找元素。在其中一部分中,下面是HTML格式的
<tbody>
<tr>
<td style="border: 1px solid #D1D1D1; background-color:#F4F4F4; color: #707070;padding :2px;">
<table style="width: 100%;
border-collapse: collapse; font-size: 15px;font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif;" role="presentation">
<tbody><tr>
<!--Action Date -->
<td></td>
<td width="100%" valign="top" align="right">
<span style="font-size: 12px;">12/7/20 10:21 AM</span>
</td>
</tr>
<tr>
<!-- Name and status column -->
<td style="" width="25" valign="top" align="center">
<img src="images/qual_checkmark_24.png" alt="">
</td>
<td width="535">
<span>First line of <strong>TEXT</strong></span>
</td>
</tr>
</tbody></table>
</td>
</tr>
<tr>
<td style="border: 1px solid #D1D1D1; background-color:#F4F4F4; color: #707070;padding :2px;">
<table style="width: 100%;
border-collapse: collapse; font-size: 15px;font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif;" role="presentation">
<tbody><tr>
<!--Action Date -->
<td></td>
<td width="100%" valign="top" align="right">
<span style="font-size: 12px;">12/7/20 10:18 AM</span>
</td>
</tr>
<tr>
<!-- Name and status column -->
<td style="" width="25" valign="top" align="center">
<img src="images/qual_arrowupcircleblue_24.png" alt="">
</td>
<td width="535">
<span>Second line of<strong>TEXT</strong></span>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
我想在span标签中找到我没有任何其他属性的文本(例如:第一行文本,第二行文本(。我尝试了通过xpath、cssSelector找到它的各种其他方法,但都不起作用。有人能帮忙吗?
尝试使用此XPath来选择不带属性的span
节点:
//span[not(@*)]
//tbody/tr[2]/td/span
您可以使用父级作为引用,在您提供的html中,span位于tr下,tr是tbody的第二个元素。
//tbody/tr[2]
,将查找作为tbody的第二个子元素的所有元素,然后直接查找子元素td/span
两个答案的组合可能是最好的:
//tbody/tr/td/span[not(@*)]
它仍然很灵活,同时也不太容易出错。
有两组<span>
标记。一个保存日期时间,例如12/7/20上午10:18,另一个保存文本,例如文本。
要打印<span>
标签文本的列表,您需要为visibilityOfAllElementsLocatedBy()
引入WebDriverWait。您可以使用Java8stream()
和map()
,还可以使用以下定位器策略之一:
-
xpath
:List<String> myTexts = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath("//tbody//tr/td/table/tbody//tr//td/span[./strong]"))).stream().map(element->element.getText()).collect(Collectors.toList()); System.out.println(myTexts);