2017-07-13 64 views
0

我試圖將數據從HTML表格存儲到二維數組中,但我似乎無法弄清楚。我的代碼目前看起來像這樣。將數據從HTML表格存儲到二維數組中Selenium Java

這是該表是網站:https://www.w3schools.com/html/html_tables.asp

@Test 
public void checkTable() { 

    // Number of Rows in table 
    int rowCount = driver.findElements(By.xpath("//*[@id='customers']/tbody/tr")).size(); 
    System.out.println("The total number of rows is " + rowCount); 

    // Number of Columns in table 
    int colCount = driver.findElements(By.xpath("//*[@id='customers']/tbody/tr[1]/th")).size(); 
    System.out.println("The total number of columns is " + colCount); 

    // Dynamic X-Path 

    String firstX = "//*[@id='customers']/tbody/tr["; 
    String secondX = "]/td["; 
    String thirdX = "]"; 

    for(int i=2; i <= rowCount; i++) { 
     for(int j=1; j <= colCount; j++) { 
      String completeX = firstX + i + secondX + j + thirdX; 
      String tableData = driver.findElement(By.xpath(completeX)).getText(); 
      System.out.println(tableData + " "); 
     } 
     System.out.println(" "); 
    } 

而這個電流輸出。

艾爾弗雷德Futterkiste
瑪麗亞·安德斯
德國

商業中心蒙特祖瑪
舊金山昌
墨西哥

恩斯特·亨德爾
羅蘭·孟德爾
奧地利

島貿易
海倫·貝內特
英國

笑巴克斯Winecellars
耀Tannamuri
加拿大

MAGAZZINI ALIMENTARI裏尤尼蒂紡織廠
喬瓦尼·羅韋利
意大利

我想得到輸出到lo好的,就像這樣。

[[Alfreds Futterkiste,德國瑪麗亞安德斯],[墨西哥Francisco Chang墨西哥商業中心Moctezuma]]等等。

回答

0

我不認爲這與Selenium有任何關係。這僅基於邏輯。 下面是您應該嘗試的代碼。讓我知道它是否可以解決您的問題。

for(int i=2; i <= rowCount; i++) { 
     if(i==2) 
     { 
      System.out.print("["); 
     } 

     for(int j=1; j <= colCount; j++) { 
      String completeX = firstX + i + secondX + j + thirdX; 
      String tableData = driver.findElement(By.xpath(completeX)).getText(); 

      if (j==1) 
      { 
      System.out.print("["); 
      } 

      if (j==colCount) 
      { 
       System.out.print(tableData); 
      } 
      else 
      { 
       System.out.print(tableData + ','); 
      } 

      if (j==colCount && i!=rowCount) 
      { 
       System.out.print("],"); 
      } 

      if (j==colCount && i==rowCount) 
      { 
       System.out.print("]]"); 
      }  
    }  
} 
+0

嗨!它似乎已經工作,但我實際上想要將信息存儲在二維數組中,而不是控制檯日誌記錄看起來像一個數組。我對Java仍然很陌生。請幫忙。 – Niko

+0

@niko - 你需要括號'['和逗號''嗎? – Kapil

0

需要的輸出看起來像使用數組toString()方法生成的。因此,您可以使用1D數組並使用toString()方法直接生成它,而不必擔心手動添加空格和新行。

  1. 現在你初始化一維數組來存儲每一行​​的結果。在第一個循環之外創建它。

    String[] rowResults = new String[rowCount]; 
    
  2. 您可以創建另一個1D數組。將其放置在第一個循環內部和第二個循環外部。

    String[] columnResults = new String[coulmCount]. 
    
  3. 當你開始閱讀elemnts,將它添加到columnResults,一旦你與內環完成。使用下面

    String columnOutput = Arrays.toString(columnResults); 
    rowResults.add(columnOutput); 
    

    Arrays.toString(ARR)用於陣列 「ARR」 會給你[ 「一」, 「B」, 「C」]的格式。

  4. 所以一旦你與執行完成後,只需運行 Arrays.toString(rowResults),你將不得不在要求的格式輸出。

+0

我看到一個編譯錯誤。 '不能在數組類型String上調用add(String)''' 發生在'rowResults.add(columnOutput);'上。 有什麼建議嗎? – Niko

相關問題