【问题标题】:Xpath returning no such element exceptionXpath 不返回此类元素异常
【发布时间】:2021-02-16 17:31:26
【问题描述】:

我正在尝试自动化页面,基本上任务是从不同的行中提取值。所有表的表名都相同,而且表中的左侧值也相同,我需要获取相应的右侧值,所以我正在尝试使用 xpath。下面是几个表格的 html,但我在页面中还有 4 个表格,它们都有相同的表格 ID。

     <table cellspacing="1" cellpadding="1" border="1" width="90%" bgcolor="Silver" align="center">
        <tbody><tr>
         <td colspan="3">
         <b>Amos Status&nbsp;&nbsp;&nbsp;&nbsp;
        <a href=</a>
        </b>
        </td>
         </tr>
               <tr>
               <th>Flow</th>
                <th>Last Processed Message</th>
                <th>Status</th>
              </tr>
                    
            <tr>
            <td>Loopback</td>
            <td>-</td>
            <td>
              
                <b>On</b>
                
            </td>
             </tr>

                <tr>
            <td>SWIFT</td>
            <td>-</td>
            <td>
              
                
            <b>On</b>
                
            </td>
              </tr>

                     <tr>
                    <td>CDSX</td>
                  <td>-</td>
                  <td>
              
                
                  <b>On</b>
                
                </td>
          </tr>

                <tr>
                 <td>LVTS</td>
                 <td>-</td>
                  <td>
              
                
                  <b>On</b>
                
                </td>
                </tr>

                    
                  <tr>
                  <td>RDMS</td>
                  <td>-</td>
                  <td>
                 <b>On</b>
               </td>
                </tr>

                    
                </tbody></table>
                                
                                
        <table cellspacing="1" cellpadding="1" border="1" width="90%" bgcolor="Silver" align="center">
                    <tbody><tr>
        <td colspan="3">
                             <b>Amos Status&nbsp;&nbsp;&nbsp;&nbsp;
                              <a href="test">Show details</a>
                
                </b>
           </td>
                    </tr>
                    <tr>
             <th>Flow</th>
              <th>Last Processed Message</th>
              <th>Status</th>
                    </tr>
                 <tr>
                <td>Loopback</td>
                <td>-</td>
                  <td>
              
                
                  <b>On</b>
                
                </td>
          </tr>

             <tr>
                   <td>SWIFT</td>
                   <td>21-02-14 08:28:04</td>
                    <td>
              
                
                  <b>On</b>
                
                
              
            </td>
          </tr>
                <tr>
                   <td>CDSX</td>
                 <td>-</td>
                   <td>
              
                
                  <b>On</b>
                
        </td>
          </tr>
                <tr>
                 <td>LVTS</td>
                 <td>-</td>
                   <td>
              
                
                  <b>On</b>
                
                
              
            </td>
          </tr>

            <tr>
                       <td>RDMS</td>
                        <td>-</td>
                        <td>
              
                
                  <b>On</b>
                
                </td>
          </tr>

                </tbody></table>

我需要从 td 标签中获取值。以下一行适用于第一个标签,例如对于 Swift 我能够检索 "-" 的值,现在我想从第二个 SWIFT td 标签(日期)中获取值,但我得到了一个否这样的元素异常消息。

 WebElement getData = driver.findElement(
   By.xpath("//tr[td='SWIFT'][1]/td[2]"));
WebElement getData1 = driver.findElement(
    By.xpath("//tr//td[contains(text(),'SWIFT')]/following-sibling::td[2]"));

上面两个语句给了我一个“-”的值,这是正确的,但是当我将它更改为以下时,为了获取日期值,我得到一个 no such element 异常错误。

 WebElement getData = driver.findElement(
   By.xpath("//tr[td='SWIFT'][2]/td[2]"));

WebElement getData1 = driver.findElement(
   By.xpath("//tr//td[contains(text(),'SWIFT')][2]/following-sibling::td[2]"));

【问题讨论】:

    标签: java selenium-webdriver xpath


    【解决方案1】:

    用下面的语句解决了。

    By.xpath("//td[contains(text(), 'SWIFT')]/following-sibling::td")
    

    使用以下方法将 Swift 的后续兄弟的所有值保存在一个数组中。

     List<WebElement> getNextRowData = _getDriver()
      .findElements(By.xpath("//td[contains(text(), 'SWIFT')]/following-sibling::td"));
       List<String> depths = new ArrayList<>();
       for (WebElement rowData : getNextRowData) {
       depths.add(rowData.getText());
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多