2012-04-05 16 views
4

Ich muss Daten Validierung von zwei Tabellen mit Selen durchführen.Wie kann ich HTML-Tabellendaten in ein zweidimensionales Array "deserialisieren"?

eine richtig markiert-up HTML-Tabelle mit Daten gefüllt Gegeben:

<table> 
    <tbody> 
     <tr> 
      <td>A</td> 
      <td>B</td> 
      <td>C</td> 
     </tr> 

     <tr> 
      <td>1</td> 
      <td>2</td> 
      <td>3</td> 
     </tr> 
    </tbody> 
</table> 

Und ich will „deserialisieren“ diese Tabelle (seine Daten sammeln) in einen zweidimensionalen Array (String[][]) unter Verwendung von Selen. Der Grund dafür ist, dass ich eine andere HTML-Tabelle (auf der anderen Webseite) habe, die angeblich die gleichen Daten enthält - und ich muss Datenvalidierung zwischen diesen beiden Tabellen durchführen.

Ich habe versucht, viele Möglichkeiten, wie dieses Problem zu lösen, und iterative Zelle-für-Zelle Datenerfassung (Fest Zellen, die entweder mit der getTable() oder getText() Methoden) ist nicht einer von ihnen - Da es sehr viel Zeit kostet, einen großen Tisch auf einer überlasteten Webseite fertig zu stellen.

JavaScript Injektion (unter Verwendung der getEval()-Methode) in meinem Fall nicht zur Verfügung, da die Tabelle in einem < iframe befindet >, die einen Ursprung (Basis-URL) hat, die von dem einen der Haupt Seite unterscheidet . Und nach same origin policy kann dies nicht durchgeführt werden.

Jungs, irgendeine Idee, wie man das gegebene Problem löst?

Antwort

1

Sie könnten JAXB verwenden, um den HTML-Text in eine einfache Java-Objekthierarchie zu deserialisieren und dann aus diesen Objekten ein 2D-Array zu konstruieren.

Eine andere Option: Parsen Sie den Text als XML in ein org.w3c.dom.Document und verwenden Sie XPath in Java, um die Elemente zu finden und zu iterieren.

+0

Bedeuten Sie, dass Sie die Methode ** 'getHtmlSource' ** verwenden? Gibt es Selenium-Alternativen, um nur einen Teil von HTML anstelle des Ganzen zu bekommen? –

+1

Entweder mit getHtmlSource/getBodySource und dann nach dem Element oder element.getAttribute ("innerHTML") – Andrejs

+0

Ist nicht 'innerHTML' ** eine andere Objekteigenschaft als ein Attribut? –

Verwandte Themen