2016-08-29 2 views
1

Я использую Java и Selenium для написания теста. В моем целевом приложении DOM есть много таблиц, которые мне нужно пройти. Я имел обыкновение использовать такие вещи, как:Как обрабатывать строки и столбцы таблицы

WebElement mytable = driver.findElement(By.xpath(".//table/tbody")); 
    List<WebElement> rows_table = mytable.findElements(By.tagName("tr")); 
    int rows_count = rows_table.size(); 
    for (int row=0; row<rows_count; row++){ 
    List<WebElement> Columns_row = rows_table.get(row).findElements(By.tagName("td")); 
    int columns_count = Columns_row.size(); 
    System.out.println("Number of cells In Row "+row+" are "+columns_count); 
    for (int column=0; column<columns_count; column++){ 
    String celtext = Columns_row.get(column).getText(); 
    System.out.println("Cell Value Of row number "+row+" and column number "+column+" Is "+celtext); 
    } 
    System.out.println("--------------------------------------------------"); 
    } 

Но я искал что-то, что может обрабатывать таблицы в более простой способ, так что я искал и нашел:

1) selenium.getTable

2) GetTable(ElementFinder finder, JavascriptLibrary js)

, но я не смог найти хороший образец кода для них.

Короче говоря, мне было интересно, есть ли лучший способ, а не найти .//tr или .//td для обработки строк и столбцов в таблице?

+0

В соответствии с документацией вы можете получить содержимое ячейки с помощью getTable (tableLocator.row.column) - где строка и столбец основаны на нуле. – lsiva

+0

@ Lsiva спасибо, можете ли вы добавить его в качестве ответа со всеми кодами и импортом? –

ответ

1

getTable не реализован в webdriver. Но вы можете попробовать это.

WebDriver driver = new ChromeDriver(); 
Selenium selenium = new WebDriverBackedSelenium(driver, "your website url"); 
selenium .getTable("xpath"); 

selenium.getTable ("table.1.2"); GetTable (tableCellAddress) Аргументы:

tableCellAddress - a cell address, e.g. "foo.1.4" 

Returns: the text from the specified cell 

Gets the text from a cell of a table. The cellAddress syntax tableLocator.row.column, where row and column start at 0. 

Добавить Подавите предупреждение для метода.

+0

Спасибо, откуда я должен получить этот объект селена? не могли бы вы также добавить descreaption? –

+0

, когда я использую 'DefaultSelenium selenium = ...' есть черная линия по умолчаниюSelenium –

+0

Я просто проверил его DefaultSelenium обесценился. – ChanChow

0

Подобного ответ Вопрос ответил в следующем потоке:

Extracting text from webtable selenium webdriver

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 (интермедиат RowIndex), GetData (интермедиат colIndex)

Если у нас есть несколько таблиц, то цикл таблицы, а

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