selenium - Extraer texto del webbler de selenio webtable
webdriver html-table (3)
De acuerdo con el código HTML proporcionado de la fila de la tabla, no estoy seguro de qué podría ser el único localizador. Puede ser, a continuación se proporciona cssSelector
sería único aquí para extraer el texto: -
tr[valign = ''top''] > td > p[align = ''left'']
Puedes utilizar el cssSelector
anterior, si no es único necesitas compartir más detalles sobre la tabla HTML. Así que podría proporcionarle un localizador único.
O si desea ubicar este elemento con texto, puede usar debajo de xpath
que sería único:
.//td[contains(.,''itinerary has been booked'')]
HTML:
<tr valign="top">
<td>
<p align="left"><font face="Arial, Helvetica, sans-serif" size="2"><b><font face="Arial, Helvetica, sans-serif" size="2"><img src="/images/printit.gif" width="57" height="69" align="right"></font><font size="+1">Your
itinerary has been booked!</font></b><br>
<br>
Please print a copy of this screen for your records. Thank you for choosing
Mercury Tours.<br>
<br>
</font></p>
</td>
</tr>
Estoy tratando de recuperar el texto ¡ Your itinerary has been booked!
e Please print a copy of this screen for your records. Thank you for choosing Mercury Tours.
Please print a copy of this screen for your records. Thank you for choosing Mercury Tours.
Intenté usar tagName y xpath para extraer los textos y ordenarlos. Pero, ¿hay algún localizador único aquí que pueda usarse aquí?
Hace muchos días, me enfrenté a este problema. Tiene dos enfoques para resolver este problema
- usando normailize-space de xpath. Ejemplo en mi proyecto, tengo que obtener el texto en el elemento tr con la etiqueta br String temp = td.findElement (By.xpath (".// span [normalize-space ()]")). getText ();
- usando javascript para obtener contenido con el selector css. utilicé el primer acercamiento. Lo siento si mi inglés no es bueno
Usando Java, hay otra forma genérica que generalmente prefiero usar para leer cualquier dato de tabla dado y el contenido en él
HashMap<Integer, HashMap<String, String>> tableData = new HashMap<Integer, HashMap<String, String>>();
HashMap<String, String> tableCellDataMap = null;
WebElement table = driver.findElement(By.id("<table_id>"));
/**
* Call this method to get Table Cell Data by passing WebElement table
* @Params table
*
* @author Fayaz
**/
public static HashMap<String, String> getTableData(WebElement table) {
List<WebElements> tableColHeaders = table.findElements(By.tagName("th"));
List<WebElements> tableRows = table.findElements(By.tagName("tr"));
// Start rowIndex with ''1'' because in the zeroth index we get ''th'' tags
for(int rowIndex = 1; rowIndex < tableRows.size(); rowIndex++) {
List<WebElement> tableCells = tableRows.get(rowIndex).findElements(By.tagName("td"));
for(int cellIndex = 0; cellIndex < tableCells.size(); cellIndex++) {
String tableCellData = tableCells.get(cellIndex).getText();
String tableColName = tableColHeaders.get(cellIndex).getText();
tableCellDataMap = new HashMap<String, String>();
tableCellDataMap.put(tableColName, tableCellData);
}
tableData.put(rowIndex, tableCellDataMap);
}
return tableCellDataMap;
}
En realidad, puede incluso modularse aún más para hacer la utilidad Table con métodos como, getTableHeader (), getRowSize (), getColSize (), getData (int rowIndex), getData (int colIndex)