如何从 selenium webelement 获取表数据并检查列值

问题描述 投票:0回答:1

在我的硒脚本中,我想从下表中获取表数据,并比较“电话”列下的所有值,并检查所有值是否仅为数字。 我尝试使用以下代码,如果不打印每列的文本,而是显示行数。

WebElement table = driver.findElement(By.xpath(“//table[contains(@class, 'table table-style')]”));
        List<WebElement> rowsList = table.findElements(By.tagName("tr"));

        List<WebElement> columnsList = null;

       for (WebElement row : rowsList) {
               columnsList = row.findElements(By.tagName("td"));

                for (WebElement column : columnsList) {
                       System.out.println("column text" + column.getText()+ ", "); // here is is just printing number of rows, like 1, 2
               }

        }

<table class="table table-style" >
    
    <thead>
    <tr>
    <th class="text-center">
            Id
    </th>
    <th class="text-center">username</th>
    <th class="text-center">email</th>
    <th class="text-center">phone</th>
    <th class="text-center">address1</th>
    <th class="text-center">address2</th>
    <th class="text-center">City</th>
    </tr>
    </thead>
    
    <tbody>
    <tr>
    
    <td class="text-center">Here is user name</td>
    <td class="text-center">[email protected]</td>
    <td class="text-center">123456789</td>
    <td class="text-center">address 1</td>
    <td class="text-center">address 2</td>
    <td class="text-center">city name</td>
    </tr>
        <tr>
    
    <td class="text-center">Here is user name</td>
    <td class="text-center">[email protected]</td>
    <td class="text-center">99999999</td>
    <td class="text-center">address 1</td>
    <td class="text-center">address 2</td>
    <td class="text-center">city name</td>
    </tr>
    
     <tr>
    
    <td class="text-center">Here is user name</td>
    <td class="text-center">[email protected]</td>
    <td class="text-center">abcdef12</td>
    <td class="text-center">address 1</td>
    <td class="text-center">address 2</td>
    <td class="text-center">city name</td>
    </tr>
    
</table>
java selenium
1个回答
0
投票

通过列名获取单元格值

您的案例中没有任何其他属性来检测某些单元格属于某个列。

我建议使用 XPATH

count
方法通过文本检测列号,并使用它按列获取所有单元格。

对于电话列:

List<WebElement> phoneNumbersList = table.findElements(By.xpath("//td[count(//th[text()='phone']/preceding-sibling::th)]"));

// the same can be dome for "email" and other columns.

检查所有值是否都是数字

看这个: Java 字符串 - 查看字符串是否只包含数字而不包含字母


我尝试使用以下代码,如果不是打印每列的文本,而是显示行数。

我可以确认此代码:

@Test
public void printTable() {
    WebDriver driver = new ChromeDriver(new ChromeOptions());
    driver.manage().window().maximize();
    //local html file
    driver.get("file:///D:/projects/print-table/src/test/resources/test.html");

    WebElement table = driver.findElement(By.xpath("//table[contains(@class, 'table table-style')]"));
    List<WebElement> rowsList = table.findElements(By.tagName("tr"));

    List<WebElement> columnsList = null;

    for (WebElement row : rowsList) {
        columnsList = row.findElements(By.tagName("td"));

        for (WebElement column : columnsList) {
            System.out.println("column text" + column.getText()+ ", "); // here is is just printing number of rows, like 1, 2
        }

    }
    driver.quit();
}

打印:

column textHere is user name, 
column [email protected], 
column text123456789, 
column textaddress 1, 
column textaddress 2, 
column textcity name, 
column textHere is user name, 
column [email protected], 
column text99999999, 
column textaddress 1, 
column textaddress 2, 
column textcity name, 
column textHere is user name, 
column [email protected], 
column textabcdef12, 
column textaddress 1, 
column textaddress 2, 
column textcity name, 

因此,您提供的代码片段按预期工作。

© www.soinside.com 2019 - 2024. All rights reserved.