2017-07-13 2 views
0

Ich versuche, Daten aus einer HTML-Tabelle in einem 2D-Array zu speichern, aber ich kann es nicht herausfinden. Mein Code sieht momentan so aus.Speichern von Daten aus einer HTML-Tabelle in ein 2D-Array Selenium Java

Dies ist der Ort, wo der Tisch ist: 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(" "); 
    } 

Und die aktuelle Ausgabe.

Alfreds Futterkiste
Maria Anders
Deutschland

Centro Comercial Moctezuma
Francisco Chang
Mexiko

Ernst Handel
Roland Mendel
Österreich

Insel Handels
Helen Bennett
UK

Lachen Bacchus Winecellars
Yoshi Tannamuri
Kanada

Magazzini Alimentari Riuniti
Giovanni Rovelli
Italien

Ich versuche, Holen Sie diesen Ausgang zu lo ok so etwas.

[Alfreds Futterkiste, Maria Anders, Deutschland], [Centro comercial Moctezuma, Francisco Chang, Mexiko]] ... etc.

Antwort

0

Ich glaube nicht, dass dies etwas mit Selenium zu tun hat. Dies basiert nur auf Logik. Unten ist der Code, den Sie ausprobieren sollten. Lass es mich wissen, wenn es dein Problem löst.

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

Hallo! Es scheint zu funktionieren, aber ich wollte die Informationen tatsächlich in einem 2D-Array speichern, anstatt nur das Logging zu protokollieren, was wie ein Array aussieht. Ich bin noch ziemlich neu in Java. Bitte helfen Sie. – Niko

+0

@niko - Brauchen Sie Klammern '[' und Kommas ',' auch? – Kapil

0

Die benötigte Ausgabe sieht so aus, als ob sie mit der toString() - Methode von Arrays generiert wird. Sie können also ein 1D-Array verwenden und die toString() -Methode verwenden, um es direkt zu generieren, ohne sich Gedanken darüber zu machen, wie Sie Leerzeichen und neue Zeilen manuell hinzufügen.

  1. Jetzt initialisieren Sie ein 1D-Array, um das Ergebnis jeder Zeile zu speichern. Erstellen Sie es außerhalb Ihrer ersten Schleife.

    String[] rowResults = new String[rowCount]; 
    
  2. Sie können ein weiteres 1D-Array erstellen. Legen Sie diese innerhalb der ersten Schleife und außerhalb der zweiten Schleife.

    String[] columnResults = new String[coulmCount]. 
    
  3. Wie Sie die elemnts zu lesen beginnen, fügen Sie ihn zu der columnResults und sobald Sie sind mit der inneren Schleife durchgeführt.Unter den nachfolgenden

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

    Arrays.toString (FER) für ein Array "Arr" wird Ihnen [ "a", "b", "c"] -Format.

  4. Also, wenn Sie mit der Ausführung fertig sind, laufen nur Arrays.toString (rowResults) und Sie erhalten die Ausgabe im gewünschten Format haben.

+0

Ich sehe einen Kompilierungsfehler bekommen. 'Kann nicht add (String) auf dem Array-Typ String []' Happening auf die 'rowResults.add (columnOutput);'. Irgendwelche Vorschläge? – Niko

Verwandte Themen