Selenium 读取复杂的表结构

Posted

技术标签:

【中文标题】Selenium 读取复杂的表结构【英文标题】:Selenium read complex table structure 【发布时间】:2021-06-14 14:28:18 【问题描述】:

我在我的 Java 项目中使用 Selenium。 Selenium 在测试中购买了优惠券,然后想在优惠券概览中看到它们。如果用户之前购买过一些,那里可以有多个优惠券包。

页面上的表格结构如下所示:

<div>
  <div><div>
    <table>
      <thead></thead>
      <tbody>
        <tr>
        <tr><td>Coupon-Code 1</td><td>Unused</td></tr>
        <tr><td>Coupon-Code 2</td><td>Used</td></tr>
        </tr>
      </tbody>
     </table>
  </div></div>
  <div><div>
    <table>
      <thead></thead>
      <tbody>
        <tr><td>Coupon-Code 1</td><td>Used</td></tr>
        <tr><td>Coupon-Code 2</td><td>Unused</td></tr>
      </tbody>
     </table>
  </div></div>
</div>

我还没有找到阅读优惠券的方法。我想将它们存储在一个列表中,html 页面的每个表格都应对应于列表中的一个条目,并包含优惠券代码及其已使用/未使用的值。

你知道我该如何实现它吗?

我已经做了一些事情

List&lt;WebElement&gt; webElements = driver.findElements(by.tagName("table"));

但在这里我无法读取表格中的条目......

【问题讨论】:

【参考方案1】:
List<WebElement> webElements = driver.findElements(by.tagName("table"));
WebElement webElementsCoupon = webElements[0].findElement(by.tagName("tr"));

从每个表中获取 tr 标签,然后 td,现在您使用 getText() 获取文本

【讨论】:

【参考方案2】:

您需要首先识别表元素,然后迭代该元素以查找列并迭代该列以将数据存储在列表中。

使用WebDriverWait() 和预期条件来避免同步问题。

创建两个列表,一个用于添加表格数据,另一个用于添加单元格数据。

List<WebElement> tableElements =new WebDriverWait(driver,10).until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.tagName("table")));
        
        List<List<String>> tableData = new ArrayList<List<String>>();
        for(WebElement table : tableElements)           
          
            List<String> cellData = new ArrayList<String>();
            List<WebElement> lstcolums=table.findElements(By.xpath("./tbody//tr//td"));
            for (WebElement td : lstcolums)
            
                cellData.add(td.getText());
                
            
            tableData.add(cellData);
        
        
        System.out.println(tableData);

输出:

[[Coupon-Code 1, Unused, Coupon-Code 2, Used], [Coupon-Code 1, Used, Coupon-Code 2, Unused]]

【讨论】:

以上是关于Selenium 读取复杂的表结构的主要内容,如果未能解决你的问题,请参考以下文章

用于从具有复杂结构的表中选择数据的 sql 查询

JeeSite 4.x 树形结构的表设计和用法

magereverse - Magento数据库表结构

Spring Security教程:自定义表结构

按查询数据库方式不同设计接口测试方案

mysql存储引擎