抽奖系统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

放弃无效编码!AI+SDD 重构复杂业务研发范式,新手也能落地

放弃无效编码!AI+SDD 重构复杂业务研发范式,新手也能落地

在当前复杂业务系统研发中,我们常陷入诸多困境:需求反复变更导致开发返工,AI辅助编程易出现幻觉生成无效代码,多人协作时重复开发浪费精力,上线后频繁出现回归bug,文档与代码脱节成为“无效资产”。这些问题的核心,是缺乏一套统一可落地的研发范式,让需求、设计、开发、测试全流程形成闭环,而规格驱动开发(SDD,Spec-Driven Development),正是解决这一痛点的关键。 很多开发者对SDD的认知停留在“先写文档再写代码”的表面,甚至觉得它是“额外负担”,尤其在工期紧张的复杂项目中,更倾向于跳过规格设计直接编码。但事实上,SDD并非传统意义上的“文档绑架”,而是结合AI时代研发特点,形成的一套高效可落地的工程化方法。 本文结合OpenSpec这一主流SDD工具,从实操层面拆解SDD在复杂业务系统中的落地全流程,解答工具使用、流程设计、痛点解决等关键问题,帮助每一位开发者真正用好SDD,提升复杂系统研发效率与质量。 核心概念明确 SDD中的Spec(Specification,规格),本质是对业务需求、技术设计、实现细节的标准化描述,是整个研发流程的“唯一真理来源”。与传统

By Ne0inhk
把废弃的腾讯云服务器改为 Openclaw 仅需一句话!!!(附带免费白嫖AI模型)

把废弃的腾讯云服务器改为 Openclaw 仅需一句话!!!(附带免费白嫖AI模型)

大家好,我是热爱探索AI前沿技术的LucianaiB。 前面我尝试了,感兴趣的可以才是部署一下试试 1.在 Windows 上部署 Openclaw:https://mp.weixin.qq.com/s/iF3ED1e649kkmdR26Y1xiw 2.把 Openclaw 接入到 Moltbook:https://mp.weixin.qq.com/s/QUrB50iwRGGdkl1LO-Tl8Q 相信很多技术爱好者都有这样的经历:趁着双十一或者大促,脑子一热买了一台腾讯云或者阿里云的服务器。买的时候雄心勃勃,想着要搭建博客、跑脚本、做图床。结果呢?大概率是跑了几个自动化签到脚本后,它就静静地躺在控制台里“吃灰”,每个月白白扣费。 但是在自己的电脑运行 Openclaw 无法做到24小时的在运行,于是我就想到了我有一个好久不用的腾讯云服务器,之前购买主要是跑一些自动化签到脚本,并没有实际做什么具体工作。于是我就想到把废弃的腾讯云服务器改为 Openclaw 的24小时的服务器。 于是,

By Ne0inhk
云平台DeepSeek满血版:引领AI推理革新,开启智慧新时代

云平台DeepSeek满血版:引领AI推理革新,开启智慧新时代

引言:人工智能的未来——云平台的卓越突破 在当今科技飞速发展的时代,人工智能(AI)技术正深刻地改变着我们生活与工作方式的方方面面。作为AI领域的创新者与领航者,云平台始终走在技术前沿,凭借无穷的热情与智慧,致力于发掘AI的无限潜能,努力为全球用户描绘更加智能、高效、便捷的未来。 向阿里、腾讯等多家云平台也紧跟潮流推出最新力作——DeepSeek满血版。将为用户带来前所未有的体验革新。DeepSeek满血版的问世标志着云平台在AI技术征途上的一个新里程碑,推动行业迈向更加辉煌的未来。为了让更多的用户亲身感受这一革命性技术成果,云平台推出了免费Tokens的特权活动,让每一位用户都能够充分体验DeepSeek满血版的强大功能,并一同见证AI推理技术的突破性进展。 推荐阅读:Deepseek R1模型本地化部署+API接口调用详细教程:释放AI生产力 技术创新与核心突破:DeepSeek满血版的飞跃 DeepSeek满血版是云平台在AI推理领域的重要突破,它是首个完全通过强化学习训练的大型语言模型。与传统的监督微调方式不同,DeepSeek满血版仅凭奖励信号便开发出了出色的推理

By Ne0inhk
商贸赛道“智选优品”—基于大数据与AI驱动的跨境电商平台项目参考逐字稿

商贸赛道“智选优品”—基于大数据与AI驱动的跨境电商平台项目参考逐字稿

商贸赛道“智选优品”—基于大数据与AI驱动的跨境电商平台项目参考逐字稿 文章目录 * 商贸赛道“智选优品”—基于大数据与AI驱动的跨境电商平台项目参考逐字稿 * 开场与团队介绍 (3分钟) * 第一部分:项目背景与政策支持 (8分钟) * 第二部分:项目目标与预期成果 (5分钟) * 第三部分:技能要点展示 (15分钟) * 第四部分:项目体系与人员分工 (8分钟) * 第五部分:创新点与独特之处 (10分钟) * 第六部分:情景演示与设备调试 (8分钟) * 第七部分:总结与致谢 (3分钟) 近期我们团队收到很多粉丝的后台留言请求,随着每年一届的“全国职业院校技能大赛”(以下称为国赛)升级为“世界职业院校技能大赛”(以下称为世校赛),那么由原先的围绕技术厂商的服务器端进行开展技能模块转变为了:三自主即自主确定参赛项目名称,自主设计参赛项目内容,自主选择参赛设备。赛制进行了一次重大级别的改革,很多参赛院校包括指导老师们对这种新模式的流程不熟悉,于是在后台给我们团队留言,希望我们能对新赛制的各个赛道出一些可以参考的资料,我们

By Ne0inhk