当前位置: 首页 > 知识库问答 >
问题:

如何从硒网获取表数据并检查列值

韩阳成
2023-03-14

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

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>

共有1个答案

公羊信厚
2023-03-14

通过列名获取单元格值

在您的案例中,没有任何附加属性可以检测某个单元格是否属于某个列。

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

对于电话专栏:

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, 

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

 类似资料:
  • 问题内容: 我从SQL获取数据并将其放在列表中。这就是我现在正在尝试的 这就是我从sql获取数据的方式, 桌子看起来像这样 aID,bID,名称 ** 问题 ** 我被困在如何将项目添加到列表中,这 也是最佳实践吗? 问题答案:

  • 我有以下代码: LR是类的列表类型。在这个列表中,我有15个索引,例如在索引[0]中,我有: 现在在这个索引[0]中,我有两个int的变量end 88和start 96 在这个for循环中,我需要做的是: _fts是一个<代码>列表 我有两个错误: 错误31“系统”的最佳重载方法匹配。集合。通用。列表。添加(int)”有一些无效参数 和 错误32参数1:无法从“Lightings\u提取器”转换。

  • 问题内容: 我正在基于CodeIgniter的应用程序。这里的代码: 控制器 : 型号 : 查看 : Javascript : 上面的代码运行良好。 现在,我想通过ajax请求将数据提取到。我已经从url创建了一个ajax请求,可以从这里,where 和进行说。 Ajax响应产生: 问题 如何使用Ajax数据源配置数据表,以及如何将数据显示到表中,所以我可以使用数据例如创建类似代码的链接 问题答案

  • 问题内容: 如何获得特定表中的列名列表? IE。 火鸟表: 得到这样的列表: 问题答案: 如果要获取特定表中的列名列表,则这是您需要的sql查询: 我在firebird 2.5中尝试过此方法,并且可以正常工作。 顺便说一句,YOUR-TABLE-NAME周围的单引号是必需的

  • 您好,这里的场景是我想在页面的文本字段中输入一些值,在此之前,我需要使用xpath查找文本字段。 所以在这里,我在Excel表中有这些字段的值和xpath。如何让上面的代码工作?两个片段都不起作用或显示任何错误。 如能回复,我们将不胜感激。

  • 我想知道无论如何都有从Azure Cosmos获得所有数据库的列表。我看到一个可能的解决办法在这里。然而,如果我只知道连接字符串,有没有任何东西可以做它?