
本文详解如何在 Selenium Java 中提取 Google 搜索结果总数(如“约 1,230,000,000 个结果”中的数字),清洗格式后转为数值,并通过 Assert.assertTrue() 断言其是否大于 5000,同时实现控制台输出测试状态。
本文详解如何在 selenium java 中提取 google 搜索结果总数(如“约 1,230,000,000 个结果”中的数字),清洗格式后转为数值,并通过 `assert.asserttrue()` 断言其是否大于 5000,同时实现控制台输出测试状态。
在自动化测试中,常需验证动态页面元素的数值是否满足业务阈值(例如搜索结果量是否足够)。Google 搜索页的 #result-stats 元素文本格式通常为:"约 1,230,000,000 个结果" 或 "About 1,230,000,000 results"(取决于语言环境)。直接调用 .split(" ")[1] 可能因空格/逗号/单位不一致而失败,因此需结合字符串清洗与健壮解析。
以下是优化后的完整示例代码(含异常处理与日志反馈):
import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.testng.Assert;
public class GrabTheResultGoogle {
public static void main(String[] args) {
ChromeOptions options = new ChromeOptions();
options.addArguments("--remote-allow-origins=*");
options.addArguments("--headless", "--no-sandbox", "--disable-dev-shm-usage"); // 推荐添加,提升稳定性
System.setProperty("webdriver.chrome.driver", "C:\Users\l\OneDrive\Desktop\chromedriver-win32\chromedriver.exe");
WebDriver driver = new ChromeDriver(options);
try {
driver.get("https://www.google.com");
WebElement searchBox = driver.findElement(By.name("q")); // 更稳定:Google 当前推荐 name="q"
searchBox.sendKeys("mobile", Keys.ENTER);
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
WebElement resultStats = wait.until(ExpectedConditions.presenceOfElementLocated(By.id("result-stats")));
String rawText = resultStats.getText();
System.out.println("原始结果文本: " + rawText);
// 提取纯数字:移除所有非数字字符(保留数字和空格),再取首个连续数字块
String numberStr = rawText.replaceAll("[^0-9\s]", " ").trim()
.replaceAll("\s+", " ")
.split(" ")[0]
.replaceAll(",", ""); // 移除千位分隔符
long resultCount = Long.parseLong(numberStr);
System.out.println("解析出的结果数: " + resultCount);
// ✅ 核心断言:验证是否大于 5000
Assert.assertTrue(resultCount > 5000,
"搜索结果数 " + resultCount + " 未超过 5000,断言失败!");
System.out.println("✅ 测试通过:结果数大于 5000");
} catch (NumberFormatException e) {
System.err.println("❌ 解析失败:无法从 '" + rawText + "' 中提取有效数字");
throw new RuntimeException(e);
} catch (TimeoutException e) {
System.err.println("❌ 超时:未能定位到 #result-stats 元素");
throw new RuntimeException(e);
} finally {
driver.quit();
}
}
}关键要点说明:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
避免硬编码索引:原代码
split(" ")[1]易受语言/布局变化影响;改用正则清洗 + 首个数字块提取更鲁棒; -
必须清除逗号:
replaceAll(",", "")是解析大数的必要步骤,否则Long.parseLong("1,230,000")将抛出异常; -
优先使用
assertTrue:当只需验证布尔条件(如> 5000)时,Assert.assertTrue(condition)比assertEquals(expected, actual)更语义清晰、错误信息更直观; -
添加显式等待:
WebDriverWait确保#result-stats元素加载完成,避免NoSuchElementException; - 启用 headless 模式:提升执行效率与 CI/CD 兼容性(如需可视化调试可临时移除);
-
务必关闭驱动:
driver.quit()放入finally块,防止资源泄漏。
运行成功后,控制台将输出:
立即学习“Java免费学习笔记(深入)”;
✅ 测试通过:结果数大于 5000
若断言失败,则 TestNG 会抛出带自定义消息的 AssertionError,便于快速定位问题。

















