
在网页自动化测试中,验证表格数据的排序功能是一个常见的需求。用户通常期望点击表格列头时,数据能够按照升序或降序正确排列。本教程将以一个具体的示例(验证金额列的排序)来演示如何使用 Java Selenium 实现这一验证过程。我们将涵盖从环境搭建、页面交互到数据提取、清洗、排序和断言的完整流程。
在开始之前,请确保您的开发环境中已安装以下组件:
在 Maven 项目的 pom.xml 文件中添加 Selenium 和 JUnit(或 TestNG)依赖:
<dependencies>
<!-- Selenium Java Client -->
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>4.1.2</version> <!-- 请使用最新稳定版本 -->
</dependency>
<!-- JUnit 5 -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.8.2</version> <!-- 请使用最新稳定版本 -->
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.8.2</version> <!-- 请使用最新稳定版本 -->
<scope>test</scope>
</dependency>
</dependencies>我们将通过以下步骤实现表格排序的验证:
立即学习“Java免费学习笔记(深入)”;
首先,设置 ChromeDriver 并实现登录功能。
package com.example.selenium;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
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;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
public class TableSortVerificationTest {
private static WebDriver driver;
private static WebDriverWait wait;
private static final String BASE_URL = "https://sakshingp.github.io/assignment/";
@BeforeAll
public static void setup() {
// 设置 ChromeDriver 路径
// System.setProperty("webdriver.chrome.driver", "path/to/your/chromedriver.exe");
// 如果 ChromeDriver 已经在 PATH 中,则无需设置
ChromeOptions options = new ChromeOptions();
// options.addArguments("--headless"); // 无头模式运行
options.addArguments("--start-maximized"); // 最大化窗口
driver = new ChromeDriver(options);
wait = new WebDriverWait(driver, Duration.ofSeconds(10)); // 显式等待,最长10秒
driver.get(BASE_URL + "login.html");
// 执行登录操作
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("username"))).sendKeys("Lakshay");
driver.findElement(By.id("password")).sendKeys("Wingify");
driver.findElement(By.id("log-in")).click();
// 等待登录成功并跳转到 home 页面
wait.until(ExpectedConditions.urlContains("home.html"));
System.out.println("登录成功,当前URL: " + driver.getCurrentUrl());
}
@AfterAll
public static void teardown() {
if (driver != null) {
driver.quit();
}
}
// ... 后续测试方法将在此处添加
}现在,我们编写一个测试方法来验证“Amount”列的排序。
// 承接上文的 TableSortVerificationTest 类
public class TableSortVerificationTest {
// ... setup 和 teardown 方法 ...
@Test
public void verifyAmountColumnSorting() {
System.out.println("开始验证金额列排序...");
// 1. 定位并点击“Amount”列头以触发排序
WebElement amountHeader = wait.until(ExpectedConditions.elementToBeClickable(By.id("amount")));
amountHeader.click();
System.out.println("已点击 'Amount' 列头进行排序。");
// 2. 提取排序后的金额数据
// 这里的XPath定位到表格中所有金额的<span>元素
List<WebElement> amountElements = driver.findElements(By.xpath("//table[@id='transactionsTable']/tbody/tr/td/span[@class='text-danger' or @class='text-success']"));
// 用于存储从网页中提取并清洗后的数值
List<Double> actualSortedAmounts = new ArrayList<>();
for (WebElement element : amountElements) {
String text = element.getText();
// 3. 数据清洗与类型转换
// 移除 "USD", "," 和空格,然后转换为 Double
String cleanedText = text.replaceAll("USD", "")
.replaceAll(",", "")
.trim();
try {
// 某些值可能以 "-" 开头表示负数,例如 "- 244.00 USD"
// 需要进一步处理,确保 Double.parseDouble 可以正确解析
double amount = Double.parseDouble(cleanedText);
actualSortedAmounts.add(amount);
} catch (NumberFormatException e) {
System.err.println("无法解析金额: " + cleanedText + ",原始文本: " + text);
// 根据实际情况选择抛出异常或跳过
}
}
System.out.println("从网页提取并清洗后的金额列表 (实际顺序): " + actualSortedAmounts);
// 4. 程序内部排序
// 创建一个副本进行内部排序,不改变原始提取顺序
List<Double> expectedSortedAmounts = new ArrayList<>(actualSortedAmounts);
Collections.sort(expectedSortedAmounts); // 默认升序排序
System.out.println("程序内部排序后的金额列表 (预期升序): " + expectedSortedAmounts);
// 5. 验证排序结果
// 比较实际排序结果与预期排序结果
assertEquals(expectedSortedAmounts, actualSortedAmounts, "金额列未能正确按升序排序!");
System.out.println("金额列已成功按升序排序验证通过!");
// 如果需要验证降序,可以再次点击 'Amount' 列头,然后对 expectedSortedAmounts 进行 Collections.reverse()
// amountHeader.click(); // 再次点击切换到降序
// Collections.reverse(expectedSortedAmounts);
// actualSortedAmounts.clear(); // 重新提取降序数据
// ... 重新提取和验证降序逻辑 ...
}
}代码解释:
通过本教程,您应该已经掌握了使用 Java Selenium 验证网页表格数据排序功能的核心技术。关键在于准确地提取数据,进行彻底的清洗和正确的类型转换,然后利用 Java 集合框架进行程序内部排序,并最终与从网页获取的实际数据进行对比。遵循这些步骤和最佳实践,可以有效地提高您的自动化测试覆盖率和质量。
以上就是使用 Java Selenium 验证网页表格数据排序功能的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号