
在开始之前,请确保您的开发环境中已配置好Java开发工具包(JDK)和Maven或Gradle等构建工具。本教程将使用JUnit 5作为测试框架,并依赖Selenium WebDriver库。
Maven pom.xml 依赖示例:
<dependencies>
<!-- Selenium Java Client -->
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>4.18.1</version> <!-- 使用最新稳定版本 -->
</dependency>
<!-- JUnit 5 -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.10.1</version> <!-- 使用最新稳定版本 -->
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.10.1</version>
<scope>test</scope>
</dependency>
</dependencies>同时,您需要下载对应浏览器版本的WebDriver可执行文件(例如,ChromeDriver),并将其路径配置到系统属性中。
首先,我们需要通过Selenium模拟用户登录并导航到包含目标表格的页面。这通常涉及定位用户名、密码输入框,输入凭据,然后点击登录按钮。
立即学习“Java免费学习笔记(深入)”;
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 org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
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 WebDriver driver;
private WebDriverWait wait;
@BeforeEach
public void setup() {
// 设置ChromeDriver路径,请替换为您的实际路径
System.setProperty("webdriver.chrome.driver", "path/to/your/chromedriver.exe");
driver = new ChromeDriver();
driver.manage().window().maximize();
// 使用WebDriverWait提供更健壮的等待机制
wait = new WebDriverWait(driver, Duration.ofSeconds(10));
}
@Test
public void verifyAmountColumnSorting() {
// 1. 登录到应用
driver.get("https://sakshingp.github.io/assignment/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();
// 2. 等待页面加载并导航到包含表格的页面
// 假设登录后直接跳转到 home.html,或者通过点击某个链接
wait.until(ExpectedConditions.urlContains("home.html"));
// 等待表格元素可见
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("transactionsTable")));
// ... 后续排序验证逻辑 ...
}
@AfterEach
public void tearDown() {
if (driver != null) {
driver.quit(); // 关闭浏览器
}
}
}表格数据的验证核心在于准确地从网页中提取数据,并将其转换为可比较的格式。对于金额列,通常需要移除货币符号、逗号和多余的空格,然后将字符串转换为数值类型(如Double),以便进行正确的数值排序。
我们将创建一个辅助方法 extractAndCleanAmountData() 来处理这些步骤:
/**
* 从表格中提取“Amount”列的数据并进行清洗和类型转换。
* @return 包含Double类型金额的列表。
*/
private List<Double> extractAndCleanAmountData() {
// 定位所有包含金额的span元素。这里的XPath定位了transactionsTable下tbody中所有td内的span元素。
// 请根据实际页面结构调整XPath或CSS选择器。
List<WebElement> amountElements = driver.findElements(By.xpath("//*[@id=\"transactionsTable\"]/tbody/tr/td/span"));
List<Double> amounts = new ArrayList<>();
for (WebElement element : amountElements) {
String text = element.getText();
// 清理字符串:移除"USD", ",", " "
String cleanedText = text.replace("USD", "")
.replace(",", "")
.trim();
try {
// 转换为Double类型进行数值比较
amounts.add(Double.parseDouble(cleanedText));
} catch (NumberFormatException e) {
System.err.println("解析金额时发生错误: " + cleanedText + " - " + e.getMessage());
// 根据需求处理错误,例如跳过此行数据或抛出异常
}
}
return amounts;
}验证表格排序的关键在于:
验证升序排序示例:
@Test
public void verifyAmountColumnSorting() {
// ... (登录和导航代码,如上所示) ...
// 3. 点击“Amount”列头进行排序
WebElement amountHeader = driver.findElement(By.id("amount"));
amountHeader.click();
// 重要的:等待页面更新或数据重新加载。
// 对于这个页面,点击后数据会立即重新排列,但为了健壮性,可以加入短暂的等待。
// 实际项目中应使用更智能的等待,例如等待某个数据元素文本发生变化。
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
// 4. 重新提取排序后的金额数据
List<Double> actualSortedAmounts = extractAndCleanAmountData();
System.out.println("页面实际排序后的金额: " + actualSortedAmounts);
// 5. 创建一个预期排序的列表副本并进行程序化排序
List<Double> expectedSortedAmounts = new ArrayList<>(actualSortedAmounts); // 创建副本
Collections.sort(expectedSortedAmounts); // 默认升序
System.out.println("程序化升序排序的金额: " + expectedSortedAmounts);
// 6. 验证实际数据是否与预期升序排序一致
// 假设第一次点击“Amount”按钮是升序排序。
assertEquals(expectedSortedAmounts, actualSortedAmounts, "金额列未按升序排列。");
}验证降序排序示例(如果页面支持):
如果页面在再次点击同一列头时切换到降序排序,您可以扩展上述逻辑:
@Test
public void verifyAmountColumnDescendingSorting() {
// ... (登录和导航代码) ...
WebElement amountHeader = driver.findElement(By.id("amount"));
amountHeader.click(); // 第一次点击,假设为升序
try { Thread.sleep(1000); } catch (InterruptedException e) { Thread.currentThread().interrupt(); }
amountHeader.click(); // 第二次点击,假设为降序
try { Thread.sleep(1000); } catch (InterruptedException e) { Thread.currentThread().interrupt(); }
// 重新提取降序排序后的金额数据
List<Double> actualDescendingAmounts = extractAndCleanAmountData();
System.out.println("页面实际降序排序后的金额: " + actualDescendingAmounts);
// 创建一个副本并进行程序化降序排序
List<Double> expectedDescendingAmounts = new ArrayList<>(actualDescendingAmounts);
Collections.sort(expectedDescendingAmounts, Collections.reverseOrder()); // 降序排序
System.out.println("程序化降序排序的金额: " + expectedDescendingAmounts);
// 验证实际数据是否与预期降序排序一致
assertEquals(expectedDescendingAmounts, actualDescendingAmounts, "金额列未按降序排列。");
}通过上述步骤,我们构建了一个健壮的Java Selenium测试脚本,能够有效地验证网页表格中金额列的升序或降序排序功能。关键在于正确地提取、清洗、转换数据,并利用程序化排序的副本与页面实际排序结果进行比较。遵循最佳实践,如使用智能等待和合适的数值类型,将使您的自动化测试更加稳定和可靠。
以上就是使用Java Selenium验证表格数据排序:金额列的升序与降序检查的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号