2016-03-25 16 views
0

Selenium kullanarak bir web sayfasının içeriğini almaya çalışıyorum ve sonra içeriği 2d matrisinde saklıyorum.2d matrisinde bir webtable içeriğini saklama

Aşağıda benim kodudur:

//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(); 
} 

Bu bana bir Boş İşaretçi İstisna verir "reportMatrix [i-2] [j-1] = text".

Neyi yanlış yaptığımı anlamıyorum. 2d dizisini bildirdiğimde ikinci indeksi bile vermem gerekiyor mu?

Şimdiden teşekkürler.

cevap

0

Çok boyutlu diziler üzerinde çalışan bir öğrenci değilseniz veya kullanmanız gereken bir API tarafından kısıtlanmış değilseniz, dizilerden kaçının. Daha uzun süre daha iyi kalacağınız :)

Eğer bir 2B dizi kullanacaksanız, aslında bir matris yaratmadığınızı hatırlamak akıllıca olacaktır. 1D dizisi oluşturuyorsunuz ve bu dizinin her elemanı başka bir 1D dizisidir. Bu şekilde düşündüğünüzde, kesinlikle "sütunlar" dizilerinin yanı sıra "satırlar" dizisini başlatmanız gerektiği açıkça ortaya çıkıyor.

Bu hat:

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

rowCount olması rapor matrisi başlatır - Her ve sütunların her set için 1 satır ve boş. Eğer sütun sayısını belirledik sonra ilk döngü içinde

, bunu böyle bir şey yapmak istiyorum:

reportMatrix[i] = new String[columnCount]; 

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

Böylece, gerekirse, her satırdaki sütun farklı sayıda sağlayacaktır.

Ardından, yazdırma döngünüzde, satır ve sütunları yazdırmak için dizi uzunluklarını kullanmalısınız. Bu, uzunluk özelliğinden 1 çıkarmayı unutmayın; çünkü bu, dizideki öğe sayısını temsil eder ve neredeyse her zaman döngüler için sıfır endeksli kullanırız.

//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

Sorunumu çözdüm. Teşekkürler! – sanaku