从 webtable selenium webdriver 中提取文本
Extracting text from webtable selenium webdriver
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>
我正在尝试检索文本 Your itinerary has been booked!
和 Please print a copy of this screen for your records. Thank you for choosing Mercury Tours.
我尝试使用 tagName 和 xpath 来提取文本和排序 it.But 这里有一些可以在这里使用的独特定位器吗?
根据 table 行提供的 HTML,我不确定什么是唯一定位器。可能是,下面提供的 cssSelector
在这里是唯一的以提取文本:-
tr[valign = 'top'] > td > p[align = 'left']
您可以使用上面的 cssSelector
,如果它不是唯一的,您需要分享更多关于 table HTML 的详细信息。所以我可以为您提供唯一的定位器。
或者如果你想用文本定位这个元素,你可以使用下面的 xpath
这将是唯一的:-
.//td[contains(.,'itinerary has been booked')]
很多天前,我遇到了这个问题。它有两种方法来解决这个问题
- 使用 xpath 的 normailize-space。 ẽ我项目中的示例,我必须在 tr 元素中获取带有 br 标签的文本
String temp = td.findElement(By.xpath(".//span[normalize-space()]")).getText();
- 使用 javascript 通过 css 选择器获取内容。
我使用了第一种方法。对不起,如果我的英语不好
使用 Java,我通常更喜欢使用另一种通用方法来读取任何给定的 table 数据及其中的内容
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;
}
实际上,它甚至可以进一步模块化以使用 getTableHeader()、getRowSize()、getColSize()、getData(int rowIndex)、getData 等方法制作 Table 实用程序(int colIndex)
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>
我正在尝试检索文本 Your itinerary has been booked!
和 Please print a copy of this screen for your records. Thank you for choosing Mercury Tours.
我尝试使用 tagName 和 xpath 来提取文本和排序 it.But 这里有一些可以在这里使用的独特定位器吗?
根据 table 行提供的 HTML,我不确定什么是唯一定位器。可能是,下面提供的 cssSelector
在这里是唯一的以提取文本:-
tr[valign = 'top'] > td > p[align = 'left']
您可以使用上面的 cssSelector
,如果它不是唯一的,您需要分享更多关于 table HTML 的详细信息。所以我可以为您提供唯一的定位器。
或者如果你想用文本定位这个元素,你可以使用下面的 xpath
这将是唯一的:-
.//td[contains(.,'itinerary has been booked')]
很多天前,我遇到了这个问题。它有两种方法来解决这个问题
- 使用 xpath 的 normailize-space。 ẽ我项目中的示例,我必须在 tr 元素中获取带有 br 标签的文本
String temp = td.findElement(By.xpath(".//span[normalize-space()]")).getText();
- 使用 javascript 通过 css 选择器获取内容。 我使用了第一种方法。对不起,如果我的英语不好
使用 Java,我通常更喜欢使用另一种通用方法来读取任何给定的 table 数据及其中的内容
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;
}
实际上,它甚至可以进一步模块化以使用 getTableHeader()、getRowSize()、getColSize()、getData(int rowIndex)、getData 等方法制作 Table 实用程序(int colIndex)