16

UI でテーブルからデータをフェッチしたい。「tr」と「td」を使用して行と列をループすることについて知っています。しかし、私が持っているテーブルは次のようなものです:

<table>
 <tbody>
  <tr><td>data</td><th>data</th><td>data</td><td>data</td></tr>
  <tr><td>data</td><th>data</th><td>data</td><td>data</td></tr>
  <tr><td>data</td><th>data</th><td>data</td><td>data</td></tr>
 </tbody>
</table>

途中での「TH」の発生を処理できるように、コードを汎用的にするにはどうすればよいですか。現在、私はこのコードを使用しています:

// Grab the table
WebElement table = driver.findElement(By.id(searchResultsGrid));

// Now get all the TR elements from the table
List<WebElement> allRows = table.findElements(By.tagName("tr"));
// And iterate over them, getting the cells
for (WebElement row : allRows) {
 List<WebElement> cells = row.findElements(By.tagName("td"));
 for (WebElement cell : cells) {
 // And so on
 }
}
4

8 に答える 8

18

td と th を区別せずに、tr 要素のすべての子を探すことができます。だから代わりに

List<WebElement> cells = row.findElements(By.tagName("td"));

私は使うだろう

List<WebElement> cells = row.findElements(By.xpath("./*"));
于 2012-05-17T11:06:23.860 に答える
9

この質問の所有者にとっては遅すぎるかもしれませんが、他の人にとっては役に立ちます。

List<WebElement> cells = row.findElements(By.xpath(".//*[local-name(.)='th' or local-name(.)='td']"));
于 2012-11-09T11:28:58.133 に答える
3

要素をループする必要はありません。代わりに、ByChained ロケーターを使用してください。

テーブルが次のようになっている場合:

<table>
  <tbody>
    <tr><th>Col1</th><th>Col2</th><th>Col3</th></tr>
    <tr><td>data</td><td>data</td><td>data</td></tr>
    <tr><td>data</td><td>data</td><td>data</td></tr>
    <tr><td>data</td><td>data</td><td>data</td></tr>
  </tbody>
</table>

このように見つけます:

By tableBodyLocator = By.xpath(".//table/tbody");
By headerRowLocator = By.xpath(".//tr[position()=1]");
By dataRowsLocator = By.xpath(".//tr[not(position()=1)]");

By headerRowLocator = new ByChained(tableBodyLocator, headerRowLocator);
List<WebElement> weHeaders = driver.findElement(headerRowLocator)
       .findElements(By.xpath(".//th");
List<WebElement> allRowData = driver.findElements(tableBodyLocator, dataRowsLocator);

WebElement row1Data = allRowData.get(0);
WebElement row2Data = allRowData.get(1);

etc.
于 2016-03-11T21:05:55.130 に答える
3
// Grab the table
WebElement table = driver.findElement(By.id("searchResultsGrid"));

// Now get all the TR elements from the table
List<WebElement> allRows = table.findElements(By.tagName("tr"));
// And iterate over them, getting the cells
for (WebElement row : allRows) {
    List<WebElement> cells = row.findElements(By.tagName("td"));
    for (WebElement cell : cells) {
        System.out.println("content >>   " + cell.getText());
    }
}

を使用cell.getText()すると簡単に機能します

于 2015-03-07T11:22:02.523 に答える