
在 Web 应用测试中,表格数据的排序功能是常见的测试点之一。用户通常期望点击列标题后,表格数据能按照该列的数值或字母顺序正确排列。手动验证大量数据不仅耗时且易出错,因此,使用 Selenium 自动化验证表格排序功能变得尤为重要。本教程将以一个具体的“金额”列为例,演示如何使用 Java 和 Selenium 验证表格数据的升序和降序排列。
在开始之前,请确保您的开发环境已配置以下组件:
Maven pom.xml 依赖示例:
<dependencies>
<!-- Selenium Java Client -->
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>4.1.2</version> <!-- 请使用最新稳定版本 -->
</dependency>
<!-- JUnit 4 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
<!-- WebDriverManager (可选,用于自动管理浏览器驱动) -->
<dependency>
<groupId>io.github.bonigarcia</groupId>
<artifactId>webdrivermanager</artifactId>
<version>5.0.3</version> <!-- 请使用最新稳定版本 -->
<scope>test</scope>
</dependency>
</dependencies>验证表格数据排序通常涉及以下几个关键步骤:
立即学习“Java免费学习笔记(深入)”;
首先,需要设置 WebDriver 并导航到包含目标表格的网页。这通常包括浏览器启动、最大化窗口以及登录等操作。
在执行任何排序操作之前,我们需要获取表格中目标列的当前数据。这些数据将作为我们生成预期排序结果的基准。
从网页元素中提取的文本数据通常包含货币符号、逗号、空格等非数字字符。为了能够进行数值排序,必须对这些字符串进行清洗,并将其转换为可比较的数值类型(如 Double)。
基于清洗后的原始数值列表,我们可以使用 Java 的 Collections.sort() 方法生成一个预期升序排列的列表。如果需要验证降序,则可以对升序列表进行反转。
通过 Selenium 定位并点击表格列的标题元素,以触发网页的内置排序功能。
点击排序按钮后,再次从表格中提取目标列的文本数据,并进行相同的清洗和类型转换,得到实际的排序结果。
最后,使用断言(如 Assert.assertEquals())比较实际排序结果列表与预期排序结果列表。如果两者完全相同,则表示排序功能正常。
以下是一个完整的 Java Selenium JUnit 测试示例,用于验证指定网页上“金额”列的升序和降序排序功能。
package com.example.seleniumtests;
import io.github.bonigarcia.wdm.WebDriverManager;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import java.time.Duration;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
public class TableSortingVerification {
private static WebDriver driver;
private static WebDriverWait wait;
// 辅助方法:提取并清洗金额数据
private List<Double> extractAndCleanAmountData() {
// 定位所有金额列的span元素
List<WebElement> amountElements = driver.findElements(By.xpath("//table[@id='transactionsTable']/tbody/tr/td/span"));
List<Double> cleanedAmounts = new ArrayList<>();
for (WebElement element : amountElements) {
String text = element.getText();
// 清除货币符号 "USD", 逗号 ",", 空格 " "
String cleanedText = text.replaceAll("USD", "").replaceAll(",", "").trim();
try {
// 转换为 Double 类型
cleanedAmounts.add(Double.parseDouble(cleanedText));
} catch (NumberFormatException e) {
System.err.println("无法解析金额: " + text + " - " + e.getMessage());
// 根据需求处理错误,例如跳过或抛出异常
}
}
return cleanedAmounts;
}
@BeforeClass
public static void setup() {
// 自动管理 ChromeDriver (推荐使用 WebDriverManager)
WebDriverManager.chromedriver().setup();
driver = new ChromeDriver();
driver.manage().window().maximize();
wait = new WebDriverWait(driver, Duration.ofSeconds(10)); // 显式等待
// 导航到登录页面并登录
String loginUrl = "https://sakshingp.github.io/assignment/login.html";
driver.get(loginUrl);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("username"))).sendKeys("Lakshay");
driver.findElement(By.id("password")).sendKeys("Wingify");
driver.findElement(By.id("log-in")).click();
// 等待登录成功并跳转到主页
wait.until(ExpectedConditions.urlContains("home.html"));
System.out.println("成功登录并进入主页.");
}
@Test
public void testAmountColumnSorting() {
System.out.println("开始验证金额列排序...");
// 1. 提取原始(未排序)金额数据
List<Double> initialAmounts = extractAndCleanAmountData();
System.out.println("原始金额数据: " + initialAmounts);
// 2. 准备预期升序数据
List<Double> expectedAscendingAmounts = new ArrayList<>(initialAmounts);
Collections.sort(expectedAscendingAmounts); // 默认升序
System.out.println("预期升序数据: " + expectedAscendingAmounts);
// 3. 触发 UI 升序排序操作
WebElement amountHeader = driver.findElement(By.id("amount"));
amountHeader.click(); // 第一次点击通常是升序
// 4. 提取实际升序排序后的数据
// 等待表格内容更新,这里可以根据实际页面加载情况调整等待策略
// 简单等待一段时间,或者等待某个元素状态变化
wait.until(ExpectedConditions.stalenessOf(amountHeader)); // 假设点击后页面有刷新或部分更新
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//table[@id='transactionsTable']/tbody/tr/td/span"))); // 确保元素可见
List<Double> actualAscendingAmounts = extractAndCleanAmountData();
System.out.println("实际升序数据: " + actualAscendingAmounts);
// 5. 验证升序排序
Assert.assertEquals("金额列升序排序验证失败!", expectedAscendingAmounts, actualAscendingAmounts);
System.out.println("金额列升序排序验证成功!");
// --- 验证降序排序(可选) ---
System.out.println("\n开始验证金额列降序排序...");
// 1. 准备预期降序数据
List<Double> expectedDescendingAmounts = new ArrayList<>(expectedAscendingAmounts);
Collections.reverse(expectedDescendingAmounts); // 反转升序列表得到降序
System.out.println("预期降序数据: " + expectedDescendingAmounts);
// 2. 触发 UI 降序排序操作 (再次点击通常是降序)
amountHeader.click();
// 3. 提取实际降序排序后的数据
wait.until(ExpectedConditions.stalenessOf(amountHeader)); // 假设点击后页面有刷新或部分更新
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//table[@id='transactionsTable']/tbody/tr/td/span"))); // 确保元素可见
List<Double> actualDescendingAmounts = extractAndCleanAmountData();
System.out.println("实际降序数据: " + actualDescendingAmounts);
// 4. 验证降序排序
Assert.assertEquals("金额列降序排序验证失败!", expectedDescendingAmounts, actualDescendingAmounts);
System.out.println("金额列降序排序验证成功!");
}
@AfterClass
public static void tearDown() {
if (driver != null) {
driver.quit();
System.out.println("浏览器已关闭.");
}
}
}通过本教程,您应该掌握了如何使用 Java 和 Selenium WebDriver 自动化验证网页表格的排序功能。核心在于正确地提取、清洗和转换数据,然后与预期排序结果进行比较。这种自动化测试方法不仅提高了测试效率,也大大增强了测试的准确性和可靠性,确保了 Web 应用数据展示的正确性。
以上就是Selenium Java:验证网页表格数据排序功能的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号