Selenium读取复杂的表结构



我在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<WebElement> webElements = driver.findElements(by.tagName("table"));

但是在这里我看不清表上的条目。。。。

List<WebElement> webElements = driver.findElements(by.tagName("table"));
WebElement webElementsCoupon = webElements[0].findElement(by.tagName("tr"));

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

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

使用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]]

最新更新