如何在SeleniumWebDriver中找到没有任何其他属性的span元素?

如何在SeleniumWebDriver中找到没有任何其他属性的span元素?,selenium,selenium-webdriver,xpath,webdriver,webdriverwait,Selenium,Selenium Webdriver,Xpath,Webdriver,Webdriverwait,我有一份完全基于HTML的报告。我正在尝试自动化并使用SeleniumWebDriver查找元素。在其中一部分中,下面是HTML格式 <tbody> <tr> <td style="border: 1px solid #D1D1D1; background-color:#F4F4F4; color: #707070;padding :2px;"> <table style="width: 100%;

我有一份完全基于HTML的报告。我正在尝试自动化并使用SeleniumWebDriver查找元素。在其中一部分中,下面是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>

12/7/20上午10:21
文本的第一行
12/7/20上午10:18
文本的第二行
我想在span标记中找到没有任何其他属性的文本(例如:文本的第一行,文本的第二行)。我尝试了通过xpath、cssSelector找到它的各种其他方法,但没有任何效果。有人能帮忙吗?

尝试使用此XPath选择没有属性的
span
节点:

您可以使用父级作为引用,在您提供的html中,span位于tr下,tr是tbody的第二个元素


//tbody/tr[2]
将查找作为tbody的第二个子元素的所有元素,然后直接子元素td/span

两种答案的组合可能是最好的:

//tbody/tr/td/span[not(@*)]

它仍然很灵活,同时也不容易出错。

有两组
标记。一个保存日期时间,例如12/7/20 10:18 AM,另一个保存文本,例如文本

要打印
标记文本的列表,您需要诱导WebDriverWait,以实现AllelementsLocatedBy()的
可见性,您可以使用Java8和,并且可以使用以下任一选项:

  • 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);
    
    List mytext=new WebDriverWait(driver,20).until(ExpectedConditions.allelements的可视性通过.xpath(“//tbody//tr/td/table/tbody//tr//td/span[/strong]”)进行分类)。stream().map(element->element.getText()).collect(collector.toList());
    System.out.println(mytext);
    

我尝试了各种其他方法。。。。。至少显示其中的一部分这是正确的xpath。@这只选择第二个td,因为只有它具有作为子项的span,而且它也是直接子项。因此,只选择该选项,而不是第一个td
//tbody/tr/td/span[not(@*)]
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);