# 9 周 WebDriver – 遍历表元素
> 原文: [https://javabeginnerstutorial.com/selenium/9w-webdriver-looping-table-elements/](https://javabeginnerstutorial.com/selenium/9w-webdriver-looping-table-elements/)
欢迎回来,勇士们! 我们刚刚看到了如何检查使用和不使用 XPath 的表的特定单元格中是否存在特定的[数据](https://javabeginnerstutorial.com/selenium/9v-webdriver-handling-tables-two-ways/)。 是时候遍历每个元素并可视化 Selenium WebDriver 的功能了。 让我们回到我们的[演示站点](https://chandanachaitanya.github.io/selenium-practice-site/)并关注“**书籍&作者”**表以了解这一概念。
## 步骤 1:
使用其 ID “`BooksAuthorsTable`”找到“图书&作者”表。 HTML 代码如下:
```java
```
*代码:*
```java
WebElement BooksTable = driver.findElement(By.id("BooksAuthorsTable"));
```
## 步骤 2:
**使用 XPath 计算行和列的总数**。
让我们使用绝对 XPath 查找总行数。 请注意,XPath 以标签名称“`tr`”结尾。 `size()`方法给出使用 XPath 由`findElements()`返回的元素数。
*Code:*
```java
int rowNum = driver.findElements(By.xpath("/html/body/form/div[5]/div/div/table/tbody/tr")).size();
```
让我们稍微切换一下齿轮,并使用相对 XPath 查找总列数。
*Code:*
```java
int colNum = driver.findElements(By.xpath("//table[@id='BooksAuthorsTable']/tbody/tr[1]/th")).size();
```
这种查找行和列总数的方法在表的行和列动态变化的情况下很有用。
## 步骤 3:
**遍历表元素**
如果表的行和列号固定为,那么遍历每个表元素将变得非常容易。 可以使用两个`for()`循环,一个用于行,另一个用于访问列值。
*Code:*
```java
for(int i=2; i<=6; i++){
for(int j=1; j<=4; j++){
System.out.print(driver.findElement(By.
xpath("//table[@id='BooksAuthorsTable']/tbody/tr[" + i +"]/td[" + j + "]")).getText() + "\t");
}
System.out.println("");
}
```
有一天,如果幸运的话,您可能会偶然发现一个表,该表在每次页面刷新时都会动态加载,因此行数通常会有所不同。 因此,每执行一次测试便要计算行数。
首先,让我们获取所有标签名称为“”的元素,并将它们放在名为“`rowVals`”的列表中。
```java
List rowVals = BooksTable.findElements(By.tagName("tr"));
```
要从第一行获取标头元素,请找到所有标签名称为“`th`”的元素,并将其放在名为“`colHeader`”的列表中。
```java
List colHeader = rowVals.get(0).findElements(By.tagName("th"));
```
要将每个标题文本打印到控制台,请遍历`colHeader`列表中的标题值并使用`getText()`方法。
```java
for(int i=0; i colVals = rowVals.get(i).findElements(By.tagName("td"));
for(int j=0; j rowVals = BooksTable.findElements(By.tagName("tr"));
//Get number of rows and columns
//using absoulute xpath
int rowNum = driver.findElements(By.xpath("/html/body/form/div[5]/div/div/table/tbody/tr")).size();
//using relative xpath
int colNum = driver.findElements(By.xpath("//table[@id='BooksAuthorsTable']/tbody/tr[1]/th")).size();
System.out.println("Total number of rows = " + rowNum);
System.out.println("Total number of columns = " + colNum);
//Get column header values from first row
List colHeader = rowVals.get(0).findElements(By.tagName("th"));
//Loop through the header values and print them to console
System.out.println("Header values:");
for(int i=0; i colVals = rowVals.get(i).findElements(By.tagName("td"));
//Loop through each column
for(int j=0; j