繁体   English   中英

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

[英]How to get table data from a selenium webelement and check column value

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

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@email.com</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@email.com</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@email.com</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>

通过列名获取单元格值

在您的情况下,没有任何其他属性可以检测某个单元格属于某个列。

我建议使用 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 textemail@email.com, 
column text123456789, 
column textaddress 1, 
column textaddress 2, 
column textcity name, 
column textHere is user name, 
column textemail@email.com, 
column text99999999, 
column textaddress 1, 
column textaddress 2, 
column textcity name, 
column textHere is user name, 
column textemail@email.com, 
column textabcdef12, 
column textaddress 1, 
column textaddress 2, 
column textcity name, 

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM