2016-03-25 6 views
0

Ich versuche, den Inhalt eines Webtable mit Selen zu erhalten und dann den Inhalt in einer 2D-Matrix zu speichern.Inhalt eines Webtable in einer 2D-Matrix speichern

Unten ist mein Code:

//Locate the webtable 
WebElement reportTable = driver.findElement(By.xpath("//*[@id='pageContainer']/div/div[2]/table[2]")); 

int rowCount = driver.findElements(By.xpath("//*[@id='pageContainer']/div/div[2]/table[2]/tbody/tr")).size(); //Get number of rows 
System.out.println("Number of rows : " +rowCount); 

String[][] reportMatrix = new String[rowCount-1][]; //Declare new 2d String array 
           //rowCount-1 because the first row is header which i don't need to store 

int mainColCount = 0; 


for(int i=2;i<=rowCount;i++) //Start count from second row, and loop till last row 
{ 
    int columnCount = driver.findElements(By.xpath("//*[@id='pageContainer']/div/div[2]/table[2]/tbody/tr["+i+"]/td")).size(); //Get number of columns 
    System.out.println("Number of columns : " +columnCount); 

    mainColCount = columnCount; 

    for(int j=1;j<=columnCount;j++) //Start count from first column and loop till last column 
    { 
     String text = driver.findElement(By.xpath("//*[@id='pageContainer']/div/div[2]/table[2]/tbody/tr["+i+"]/td["+j+"]/div")).getText(); //Get cell contents 

     System.out.println(i + " " + j + " " + text); 

     reportMatrix[i-2][j-1] = text; //Store cell contents in 2d array, adjust index values accordingly 
    } 
} 


//Print contents of 2d matrix 
for(int i=0;i<rowCount-1;i++) 
{ 
    for(int j=0;j<mainColCount;j++) 
    { 
     System.out.print(reportMatrix[i][j] + " "); 
    } 
    System.out.println(); 
} 

Das gibt mir eine Null-Zeiger-Ausnahme bei "reportMatrix [i-2] [j-1] = text".

Ich verstehe nicht, was ich falsch mache. Muss ich sogar den zweiten Index angeben, wenn ich das 2D-Array deklariere?

Vielen Dank im Voraus.

Antwort

0

Wenn Sie kein Student sind, der mehrdimensionale Arrays untersucht oder anderweitig durch eine API eingeschränkt ist, die Sie verwenden müssen, vermeiden Sie Arrays. Du wirst noch länger gesund bleiben :)

Wenn du ein 2D-Array verwenden musst, solltest du daran denken, dass du keine Matrix erstellst. Sie erstellen ein 1D-Array und jedes Element dieses Arrays ist ein weiteres 1D-Array. Wenn man so darüber nachdenkt, wird klar, dass man die Arrays "columns" und "rows" definitiv initialisieren muss.

Diese Zeile:

String[][] reportMatrix = new String[rowCount-1][]; 

wird Bericht Matrix initialisieren rowCount haben - 1 Reihen und null für jeden einzelnen Satz von Spalten.

In Ihrer ersten Schleife, nachdem Sie die Anzahl der Spalten identifiziert haben, wollen Sie so etwas wie dies zu tun:

reportMatrix[i] = new String[columnCount]; 

for(int j=1;j<=columnCount;j++) ... 

Diese Sie unterschiedliche Anzahl von Spalten in jeder Zeile, wenn nötig haben, ermöglicht.

In Ihrer Druckschleife sollten Sie dann die Array-Längen verwenden, um die Zeilen und Spalten auszudrucken. Denken Sie daran, 1 vom Längenattribut zu subtrahieren, da dies die Anzahl der Elemente im Array darstellt und wir fast immer Null-indizierte For-Schleifen verwenden.

//Print contents of 2d matrix 
for(int i=0; i < reportMatrix.length - 1; i++) 
{ 
    for(int j=0; j < reportMatrix[i].length - 1; j++) 
    { 
     System.out.print(reportMatrix[i][j] + " "); 
    } 
    System.out.println(); 
} 
+0

Es löste mein Problem. Vielen Dank! – sanaku

Verwandte Themen