Как получить текст из каждой ячейки таблицы HTML?
В Selenium 2.0 я понятия не имею, как перемещаться по таблице HTML на веб-странице. В selenium2.0 javadoc я обнаружил два класса "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
}
}
Как получить текст из каждой ячейки таблицы?
Ответы
Ответ 1
Спасибо за более ранний ответ.
Я выяснил решения, используя классы селена 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++;
}
}
}
Ответ 2
Здесь пример С#, который я только что приготовил, свободно основанный на ответе с помощью селекторов CSS, мы надеемся использовать для других, чтобы увидеть, как настроить ReadOnlyCollection
строк таблицы и, по крайней мере, перебрать его в MS-land. Я просматриваю коллекцию строк таблицы, чтобы найти строку с 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;
}
Ответ 3
Я не использовал 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")
Ответ 4
$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";
}
Ответ 5
Другой пример С#. Я просто сделал для него метод расширения.
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;
}
Ответ 6
его
selenium.getTable("tablename".rowNumber.colNumber)
not
selenium.getTable("tablename".colNumber.rowNumber)