2017-05-14 5 views
1

をリスト取得に失敗:私はこのような類似したHTMLにこのコードを実行していますセレンクロムwebdriverを - 私は、次のコードを持っている細胞が

 WebElement table = a_chromeWebDriver.findElement(By.className("stats-table")); 
     List<WebElement> allRows = table.findElements(By.tagName("tr")); 

     system.out.println(allRows.size()); 

     for (WebElement row : allRows) { 


      ArrayList<WebElement> cells = (ArrayList<WebElement>) row.findElements(By.tagName("td")); 
    ... 

を:

<table id="table-type-1" class="stats-table stats-main table-1"> 
    <thead> 
     <tr class="main"> 
      <th class="aaaa" data-type="rank" title="Rank"> 

      </th> 
      A number of headers here... 
     </tr> 
    </thead> 
    <tbody title=""> 
     <tr bla bla bla> 
      <td class="bla bla bla" title="bla bla bla>1.</td> 
      <td class="bla bla bla"></td> 
      <td class="bla bla bla">36</td> 
      <td class="bla bla bla">28</td> 
      <td class="bla bla bla">3</td> 
     </tr> 
      <td class="bla bla bla" title="bla bla bla>1.</td> 
      <td class="bla bla bla"></td> 
      <td class="bla bla bla">45</td> 
      <td class="bla bla bla">fnf</td> 
      <td class="bla bla bla">kfkfk</td> 
     </tr> 
     . 
     . 
     . 

ALLROWSサイズが私に与えます正しい行数。 何らかの理由でセル= nullと表示されます。 By.xpath( "td")も試しましたが、使用しませんでした。

お願いしますか?

ありがとうございます!

答えて

2

このコードを使用して、あなたのループ:あなたのコードによってピックアップされる最初の行があるためであること

CellCount 0 
CellCount 4 
CellCount 4 

for (WebElement row : allRows) { 


     ArrayList<WebElement> cells = (ArrayList<WebElement>) row.findElements(By.tagName("td")); 

     System.out.println("CellCount " + cells.size()); 
    } 

あなたはあなたのように出力を取得していることがわかります<thead>セクションからは<td>要素が残っていません。

List<WebElement> allRows = table.findElements(By.xpath("tbody//tr")); 
2

まず、すべての行を検索し、それらを反復:ので、あなたが次のようにあなたのALLROWS要素を変更することでそれを行うことができます最初の<tr>

のための例外を作成する必要が

List<WebElement> allRows = driver.findElements(By.cssSelector("#table-type-1 > tbody > tr")); 

    for(WebElement row : allRows){ 
     List<WebElement> cells = row.findElements(By.tagName("td")); 
     System.out.println("Cell count: " + cells.size());//cell count for a row 
    } 
2

HTML <table>は、3つのセクション:<thead>,<tbody>および<tfoot>で構成されています。

通常、表示されるのは<thead><tbody>です。

正しい方法は、最初にこれらのセクションのそれぞれを識別してから、その子要素を処理することです。

// Get the table 
WebElement table = a_chromeWebDriver.findElement(By.id("table-type-1")); 

// Get the thead in table 
WebElement thead = table.findElement(By.tagName("thead")); 

// Get the tbody in table 
WebElement tbody = table.findElement(By.tagName("tbody")); 

// Get all headers in thead 
List<WebElement> allHeaders = thead.findElements(By.tagName("th")); 

// Get all rows in tbody 
List<WebElement> allRows = tbody.findElements(By.tagName("tr")); 

// Get all cells for each row in allRows 
for(WebElement row : allRows) { 
    List<WebElement> allCells = row.findElements(By.tagName("td")); 
    int rowNum = allRows.indexOf(row) + 1; 
    System.out.println("Row no. " + rowNum + " has " + allCells.size() +" cells."); 
} 
関連する問題