从webtable selenium webdriver中提取文本

时间:2016-08-28 06:09:32

标签: selenium webdriver html-table gettext

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来提取文本并对其进行排序。但是这里有一些独特的定位器可以在这里使用吗?

3 个答案:

答案 0 :(得分:1)

根据提供的表行HTML,我不确定什么是唯一的定位器。可能是,下面提供的cssSelector在此处是唯一的,用于提取文本: -

tr[valign = 'top'] > td > p[align = 'left']

您可以使用上面的cssSelector,如果它不是唯一的,您需要分享有关表HTML的更多详细信息。所以我可以为你提供独特的定位器。

或者,如果您想要使用文字找到此元素,您可以在xpath下方使用,这将是唯一的: -

.//td[contains(.,'itinerary has been booked')]

答案 1 :(得分:1)

很多天前,我遇到了这个问题。它有两种方法来解决这个问题

  • 使用xpath的normailize-space。在我的项目中,我必须使用br标签获取tr元素中的文本     String temp = td.findElement(By.xpath(“.// span [normalize-space()]”))。getText();
    • 使用javascript获取css选择器的内容。 我用了第一种方法。对不起,如果我的英语不好

答案 2 :(得分:0)

使用Java,我通常更喜欢使用另一种通用方法来读取任何给定的表数据及其中的内容

  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(int colIndex)等方法制作Table实用程序