2016-08-28 4 views
1

HTML:Извлечение текста из webtable селена WebDriver

<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.

Я попытался с помощью тэгу и XPath для извлечения текстов и сортировки it.But есть какой-то уникальный локатор здесь, который можно использовать здесь?

+0

Coud вы делитесь подробностями таблицы HTML, поэтому мы могли предоставить вам уникальный локатор ... ?? –

+0

'<тело BGCOLOR = "# FFFFFF" VLINK = "# 666666" ссылка = "# 000099"> <Таблица ширина = "492" граница = "0" CELLSPACING = "0" CELLPADDING = "0"> <тр VALIGN = "сверху"> <р ALIGN = "левой"><шрифта = "Arial, Helvetica, без засечек" размер = "2"><шрифта =» Arial, Helvetica, sans-serif "size =" 2 "> Ваш маршрут был забронирован!
' – Combospirit

+0

Здесь только одна строка в вашем столе ??? –

ответ

1

Согласно предоставленному HTML-строке таблицы, я не уверен, что может быть уникальным локатором. Может быть, ниже при условии cssSelector будет уникальным здесь, чтобы извлечь текст: -

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

Вы можете использовать выше cssSelector, если он не является уникальным вам необходимо предоставить более подробную информацию о таблице HTML. Поэтому я мог бы предоставить вам уникальный локатор.

Или, если вы хотите, чтобы найти этот элемент с текстом, вы можете использовать ниже xpath который будет уникальным: -

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

Привет, я не мог найти никаких уникальных значений здесь, которые могут быть использованы с cssLocator – Combospirit

+0

Значения означает значение атрибута или внутренний текст? –

+0

Как вы указали HTML в комментарии, если в вашей таблице есть только одна строка, при условии, что cssSelector и xpath оба будут уникальными, попробуйте и дайте мне знать ... для синтаксиса selenium, как использовать его, можете ли вы рассказать, какой язык программирования ты используешь?? –

1

много дней назад, я столкнулся с этой проблемой. У этого есть два подхода, чтобы решить эту проблему.

  • использование нормального пространства xpath. В моем проекте я должен получить текст в элементе tr с тегом br. String temp = td.findElement (By.xpath (".// span [normalize-space()]")). getText();
    • используя javascript для получения содержимого с помощью селектора css. Я использовал первый подход. Извините, если мой английский не является хорошим
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; 
} 

На самом деле, может даже быть дополнительно modularize, чтобы сделать утилиту таблиц с помощью таких методов, как getTableHeader(), getRowSize(), getColSize(), getData (int rowIndex), getData (int colIndex)

Смежные вопросы