Как получить текст из каждой ячейки таблицы HTML? - PullRequest
25 голосов
/ 01 июня 2011

В Selenium 2.0 я понятия не имею, как пройти через таблицу HTML на веб-странице.В javadoc selenium2.0 я нашел два класса «TableFinder» и «TableCellFinder», но не смог найти ни одного примера.

Я хочу сделать что-то вроде этого:

RowCount=Get how many rows are there in the html table

for each row of the table
{
   column_count=Get column count
   for each column
   {
      cell_value=get_text_from(row,col);
      Do something with cell_value
   }
}

Как я могу получить текст из каждой ячейки таблицы?

Ответы [ 6 ]

46 голосов
/ 02 июня 2011

Спасибо за предыдущий ответ.

Я нашел решения, используя классы селена 2.0.

import java.util.List;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.ie.InternetExplorerDriver;

public class WebTableExample 
{
    public static void main(String[] args) 
    {
        WebDriver driver = new InternetExplorerDriver();
        driver.get("http://localhost/test/test.html");      

        WebElement table_element = driver.findElement(By.id("testTable"));
        List<WebElement> tr_collection=table_element.findElements(By.xpath("id('testTable')/tbody/tr"));

        System.out.println("NUMBER OF ROWS IN THIS TABLE = "+tr_collection.size());
        int row_num,col_num;
        row_num=1;
        for(WebElement trElement : tr_collection)
        {
            List<WebElement> td_collection=trElement.findElements(By.xpath("td"));
            System.out.println("NUMBER OF COLUMNS="+td_collection.size());
            col_num=1;
            for(WebElement tdElement : td_collection)
            {
                System.out.println("row # "+row_num+", col # "+col_num+ "text="+tdElement.getText());
                col_num++;
            }
            row_num++;
        } 
    }
}
8 голосов
/ 07 августа 2012

Вот пример C #, который я только что подготовил, свободно основываясь на ответе с использованием селекторов CSS, надеюсь, что он будет полезен другим для просмотра того, как установить ReadOnlyCollection строк таблицы и, по крайней мере, выполнить итерацию по ней в среде MS. Я просматриваю коллекцию строк таблицы, чтобы найти строку с OriginatorsRef (просто строка) и TD с изображением, которое содержит атрибут title с Overdue by в нем:

    public ReadOnlyCollection<IWebElement> GetTableRows()
    {
        this.iwebElement = GetElement();
        return this.iwebElement.FindElements(By.CssSelector("tbody tr"));
    }

И в моем основном коде:

        ...
        ReadOnlyCollection<IWebElement> TableRows;
        TableRows = f.Grid_Fault.GetTableRows();

        foreach (IWebElement row in TableRows)
        {
            if (row.Text.Contains(CustomTestContext.Current.OriginatorsRef) &&
              row.FindElements(By.CssSelector("td img[title*='Overdue by']")).Count > 0)
                return true;
        }
0 голосов
/ 26 февраля 2016

Еще один пример C #. Я только что сделал метод расширения для него.

public static string GetCellFromTable(this IWebElement table, int rowIndex, int columnIndex)
    {
        return table.FindElements(By.XPath("./tbody/tr"))[rowIndex].FindElements(By.XPath("./td"))[columnIndex].Text;
    }
0 голосов
/ 27 июня 2012
$content = '';
    for($rowth=0; $rowth<=100; $rowth++){
        $content .= $selenium->getTable("tblReports.{$rowth}.0") . "\n";
        //$content .= $selenium->getTable("tblReports.{$rowth}.1") . "\n";
        $content .= $selenium->getTable("tblReports.{$rowth}.2") . " ";
        $content .= $selenium->getTable("tblReports.{$rowth}.3") . " ";
        $content .= $selenium->getTable("tblReports.{$rowth}.4") . " ";
        $content .= $selenium->getTable("tblReports.{$rowth}.5") . " ";
        $content .= $selenium->getTable("tblReports.{$rowth}.6") . "\n";

    }
0 голосов
/ 21 июня 2012

его

selenium.getTable("tablename".rowNumber.colNumber)

не

selenium.getTable("tablename".colNumber.rowNumber)

0 голосов
/ 01 июня 2011

Я не использовал Selenium 2. Selenium 1.x имеет selenium.getTable("tablename".columnNumber.rowNumber), чтобы достичь нужной ячейки.Может быть, вы можете использовать webdriverbackedselenium и сделать это.

И вы можете получить общее количество строк и столбцов, используя

int numOfRows = selenium.getXpathCount("//table[@id='tableid']//tr")

int numOfCols=selenium.getXpathCount("//table[@id='tableid']//tr//td")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...