抽奖系统Selenium自动化测试流程解析

抽奖系统Selenium自动化测试流程解析




🌈感谢大家的阅读、点赞、收藏和关注

 💕希望大家喜欢我本次的讲解💕

目录👑

一、自动化测试环境与框架核心配置🌟

1. 技术栈与依赖(测试文档 - 环境配置章节)

2. 浏览器驱动初始化(测试文档 - 基础工具章节)

二、核心工具类(测试文档 - 通用工具章节)❄️

1. 测试数据自动生成(解决测试数据重复问题)

2. 自动化截图(测试失败溯源)

三、核心业务模块测试逻辑(测试文档 - 功能测试章节)🍃

1. 登录 / 注册模块(边界值 + 异常场景全覆盖)

2. 管理员核心模块(iframe 切换 + 多场景校验)

3. 测试执行入口(全流程自动化)

四、关键技术难点与解决方案(测试文档 - 技术难点章节)


一、自动化测试环境与框架核心配置🌟

1. 技术栈与依赖(测试文档 - 环境配置章节)

描述:本次抽奖系统 UI 自动化测试基于 Spring Boot + Selenium 4.0 实现,核心依赖包括 Selenium-Java(浏览器驱动操作)、WebDriverManager(自动管理浏览器驱动版本)、commons-io(截图功能),测试环境为 Java 17,浏览器为 Chrome。

关键代码(pom.xml 核心依赖)

<!-- Selenium核心依赖 --> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>4.0.0</version> </dependency> <!-- 自动管理ChromeDriver版本 --> <dependency> <groupId>io.github.bonigarcia</groupId> <artifactId>webdrivermanager</artifactId> <version>5.8.0</version> <scope>test</scope> </dependency> <!-- 截图功能依赖 --> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.6</version> </dependency> 
2. 浏览器驱动初始化(测试文档 - 基础工具章节)

描述:封装统一的 Chrome 驱动创建方法,自动下载匹配版本的驱动,配置--remote-allow-origins=*解决跨域问题,设置 6 秒隐式等待确保元素加载,同时封装 WebDriverWait 显式等待(最长 60 秒)适配复杂场景。

关键代码(Utils 类核心方法)

public static WebDriver createDriver() { if(driver == null) { // 自动下载并配置ChromeDriver WebDriverManager.chromedriver().setup(); ChromeOptions options = new ChromeOptions(); options.addArguments("--remote-allow-origins=*"); // 解决跨域限制 driver = new ChromeDriver(options); // 隐式等待:全局等待元素加载 driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(6)); } return driver; } 

二、核心工具类(测试文档 - 通用工具章节)❄️

1. 测试数据自动生成(解决测试数据重复问题)

描述:封装 3 类随机测试数据生成方法,避免手动造数,保证测试用例的可重复性:

  • 随机手机号:生成符合 11 位规范的手机号(第一位固定为 1,第二位 3-9,后 9 位随机);
  • 唯一 QQ 邮箱:基于 UUID 生成绝对唯一的 QQ 邮箱,避免重复注册问题;
  • 随机管理员名称:生成 1-6 位字母 + 数字混合字符串。

关键代码

// 随机手机号生成 public static String generateRandomMobile() { StringBuilder mobile = new StringBuilder("1"); mobile.append(MOBILE_SECOND_DIGITS[RANDOM.nextInt(MOBILE_SECOND_DIGITS.length)]); for (int i = 0; i < 9; i++) { mobile.append(RANDOM.nextInt(10)); } return mobile.toString(); } // 唯一QQ邮箱生成 public static String generateUniqueQQEmail() { String uuidPart = UUID.randomUUID().toString().replace("-", "").substring(0, 8); long uuidNum = Long.parseLong(uuidPart, 16) % 100000000; String qqNumber = String.valueOf(Math.abs(uuidNum)); if (qqNumber.length() < 5) { qqNumber = "12345" + qqNumber; } return qqNumber.substring(0, 8) + "@qq.com"; } 
2. 自动化截图(测试失败溯源)

描述:封装截图方法,按 “年月日 / 类名 - 时分秒毫秒.png” 路径存储截图,可在测试用例失败时自动捕获页面状态,便于问题定位。

关键代码

public static void screenShot(String str) throws IOException { SimpleDateFormat sim1 = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat sim2 = new SimpleDateFormat("HH_mm_ss_SS"); String fileName = "./src/test/java/image/" + sim1.format(System.currentTimeMillis()) + "/" + str + "-" + sim2.format(System.currentTimeMillis()) + ".png"; File srcFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE); FileUtils.copyFile(srcFile, new File(fileName)); } 

三、核心业务模块测试逻辑(测试文档 - 功能测试章节)🍃

1. 登录 / 注册模块(边界值 + 异常场景全覆盖)

描述:覆盖注册 / 登录的全量异常场景,采用 “先异常后正常” 的测试逻辑,验证前端校验和后端逻辑:

  • 注册:空值校验→格式错误(邮箱 / 手机号)→已注册数据校验→正常注册;
  • 登录:手机号 / 密码错误→手机号正确密码错误→正常登录;
  • 核心技术:切换 Alert 弹窗、显式等待弹窗加载、元素定位(CSS Selector/XPath 混合使用)。

关键代码(注册异常场景)

// 空值校验:不填信息直接注册,验证前端提示 driver.findElement(By.cssSelector("#registerForm > button")).click(); String nameErr = driver.findElement(By.cssSelector("#name-error")).getText(); assert !nameErr.isEmpty(); // 格式错误:邮箱填123456,验证格式提示 driver.findElement(By.xpath("//*[@id=\"mail\"]")).sendKeys("123456"); driver.findElement(By.cssSelector("#registerForm > button")).click(); String mailErr = driver.findElement(By.cssSelector("#mail-error")).getText(); assert !mailErr.isEmpty(); // 已注册数据校验:弹窗提示处理 wait.until(ExpectedConditions.alertIsPresent()); Alert alert = driver.switchTo().alert(); String text = alert.getText(); // 获取弹窗提示(如“手机号已被使用”) alert.accept(); 
2. 管理员核心模块(iframe 切换 + 多场景校验)

描述:抽奖系统管理员端核心模块测试,覆盖人员管理、奖品管理、活动管理,解决 iframe 嵌套页面元素定位问题,核心场景:

  • 人员管理:注册校验、列表元素验证;
  • 奖品管理:奖品创建(价格 0 / 负数 / 正常值校验)、列表数据提取;
  • 活动管理:活动创建(奖品 / 人员数量校验)、抽奖流程自动化、中奖结果复制验证。

关键技术点代码

// 1. iframe切换(解决嵌套页面元素定位) wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.id("contentFrame"))); // 切入iframe driver.switchTo().defaultContent(); // 切回顶层页面 // 2. 奖品价格校验 driver.findElement(By.xpath("//*[@id=\"price\"]")).sendKeys("0"); // 价格为0 driver.findElement(By.cssSelector("body > div > button")).click(); driver.findElement(By.xpath("//*[@id=\"price\"]")).clear(); driver.findElement(By.xpath("//*[@id=\"price\"]")).sendKeys("-1"); // 价格为负数 driver.findElement(By.cssSelector("body > div > button")).click(); // 3. 抽奖流程自动化(按钮状态切换+循环抽奖) By nextBtnLocator = By.cssSelector("#container > div.opt-box > span.btn.next-btn"); while(true) { WebElement nextBtn = wait.until(ExpectedConditions.visibilityOfElementLocated(nextBtnLocator)); String btnText = nextBtn.getText(); if (btnText.equals("已全部抽完")) break; // 退出条件 nextBtn.click(); // 点击开始抽奖 Thread.sleep(3000); wait.until(ExpectedConditions.textToBe(nextBtnLocator, "点我确定")); nextBtn.click(); // 确定中奖人 wait.until(ExpectedConditions.textToBe(nextBtnLocator, "已抽完,下一步")); nextBtn.click(); // 下一步 } 
3. 测试执行入口(全流程自动化)

描述:统一测试执行入口,按 “注册管理员→管理员登录→人员管理→奖品管理→活动管理→抽奖→退出” 流程执行,自动关闭浏览器,实现全流程无人值守测试。

关键代码

public static void main(String[] args) throws InterruptedException { LoginPage loginPage = new LoginPage(); loginPage.checkRegister(); loginPage.checkLogin(); AdminPage adminPage = new AdminPage(); adminPage.humanAdmin(); adminPage.humanList(); adminPage.createPrize(); adminPage.prizeList(); adminPage.createActivity(); adminPage.activityList(); adminPage.loginout(); Thread.sleep(1500); Utils.quit(); // 关闭浏览器 } 

四、关键技术难点与解决方案(测试文档 - 技术难点章节)

技术难点解决方案
iframe 嵌套页面定位先等待 iframe 加载完成,切换到 iframe 后再定位元素,操作完成切回顶层页面;
弹窗(Alert)处理显式等待弹窗加载(ExpectedConditions.alertIsPresent()),切换到弹窗后操作;
动态按钮状态切换基于按钮文本变化的显式等待(textToBe),适配抽奖按钮 “开始→确定→下一步” 状态;
测试数据重复基于 UUID / 随机数生成唯一测试数据(手机号 / 邮箱),避免重复注册 / 重复抽奖;

Read more

Python 爬虫实战:爬取音乐平台(网易云 / QQ 音乐)歌曲信息

前言 音乐平台汇聚了海量的歌曲资源,包含歌名、歌手、专辑、播放量、歌词等核心信息,这些数据在音乐趋势分析、个性化推荐研究、音乐版权管理等场景中具有重要价值。传统手动整理歌曲信息的方式效率极低,而基于 Python 的爬虫技术能够批量采集音乐平台的歌曲数据,大幅提升数据获取效率。本文以网易云音乐和 QQ 音乐两大主流平台为例,系统讲解歌曲信息爬取的技术方案、接口解析方法及数据结构化处理,为音乐数据分析师和开发者提供可落地的实战指南。 摘要 本文聚焦音乐平台歌曲信息的爬取实战,分别以网易云音乐网页版和QQ 音乐网页版为核心操作对象(可直接点击进入对应平台),从抓包分析接口、构造请求参数,到多维度歌曲信息提取、数据清洗与存储,完整实现歌名、歌手、专辑、播放量、时长等核心字段的采集。文中包含可直接运行的代码案例、接口参数说明表格及数据输出结果,兼顾技术深度与实操性,帮助读者掌握不同音乐平台歌曲数据爬虫开发的核心技术。 一、技术栈与原理概述 1.1 核心技术栈 < 技术 / 库功能说明

By Ne0inhk
Python深度挖掘:openpyxl和pandas的使用详细

Python深度挖掘:openpyxl和pandas的使用详细

文章目录 * 一、Excel处理在数据分析中的重要性 * 二、openpyxl基础与核心功能 * 2.1 openpyxl简介与安装 * 2.2 工作簿与工作表的基本操作 * 创建新工作簿 * 打开已有工作簿 * 工作表操作 * 2.3 单元格操作详解 * 基本单元格操作 * 批量操作单元格 * 特殊单元格操作 * 2.4 样式与格式设置 * 字体样式 * 对齐方式 * 边框设置 * 填充颜色 * 数字格式 * 2.5 公式与计算 * 2.6 图表与图像操作 * 创建图表 * 插入图像 * 2.7 高级功能 * 数据验证 * 条件格式 * 保护工作表 * 冻结窗格 * 三、pandas基础与核心功能 * 3.1 pandas简介与安装 * 3.2

By Ne0inhk
LangGraph 智能体状态管理与决策

LangGraph 智能体状态管理与决策

LangGraph 智能体状态管理与决策 * 写在最前面 🌌你好!这里是 晓雨的笔记本在所有感兴趣的领域扩展知识,感谢你的陪伴与支持~👋 欢迎添加文末好友,不定期掉落福利资讯 写在最前面 版权声明:本文为原创,遵循 CC 4.0 BY-SA 协议。转载请注明出处。 本次演示围绕 Bright Data Web MCP 与 LangGraph 的集成实操 展开,完整展示了从获取大模型 API Key、创建大模型会话,到获取 Bright Data API Key、通过 MultiServerMCPClient 连接 Web MCP 服务器,并在 Bright Data 后台进一步启用浏览器自动化工具、扩展智能体可调用能力的全流程;同时结合 LangGraph

By Ne0inhk
【笔记】在 Windows 上安装 Python-vLLM

【笔记】在 Windows 上安装 Python-vLLM

SystemPanic/vllm-windows:用于 LLM(Windows 构建和内核)的高吞吐量和内存效率推理和服务引擎 在 Windows 上安装 vLLM 有两种方式,分别是通过已发布的 wheel 包安装和从源码构建安装,具体步骤如下: 一、通过现有发布的 wheel 包安装(推荐) 发布 v0.11.0 ·SystemPanic/vllm-windows vllm-0.11.0+cu124-cp312-cp312-win_amd64.whl 1. 确认版本兼容性 确保你的 Python、PyTorch 和 CUDA 版本与 wheel 包要求一致(版本信息会在发布版本中注明)。 2. 下载 wheel 包 从 最新发布页面

By Ne0inhk