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

开源力量:GitCode+昇腾NPU 部署Mistral-7B-Instruct-v0.2模型的技术探索与经验总结

开源力量:GitCode+昇腾NPU 部署Mistral-7B-Instruct-v0.2模型的技术探索与经验总结

开源力量:GitCode+昇腾NPU 部署Mistral-7B-Instruct-v0.2模型的技术探索与经验总结 目录 开源力量:GitCode+昇腾NPU 部署Mistral-7B-Instruct-v0.2模型的技术探索与经验总结 摘要 一、技术背景 1.1 昇腾NPU 1.2 GitCode平台 1.3 vLLM Ascend 二、环境准备 2.1 创建GitCode Notebook 2.2 配置Hugging Face镜像 三、部署方案一:原生部署(transformers + torch_npu) 3.1 安装依赖 3.2 下载模型 3.3 推理代码 3.

By Ne0inhk
2025年AI领域年度深度总结:始于DeepSeek R1开源发布,终于Manus天价出海

2025年AI领域年度深度总结:始于DeepSeek R1开源发布,终于Manus天价出海

2025年AI领域年度深度总结:始于DeepSeek R1开源发布,终于Manus天价出海 摘要 站在2025年12月31日的终章回望,吴恩达曾说过:“2025年,是AI工业时代的黎明。”在经历了2023-2024年的“大炼模型”狂热后,2025年,AI终于从“概率模仿”跃向了“逻辑推理”的新阶段,从“对话框”到“行动流”的转折也逐渐显现。这一年,AI技术与产业的演进不仅仅是技术迭代那么简单,而是一场深刻的变革,清晰的产业蓝图开始显现:始于DeepSeek R1的开源突破,终于Manus的数十亿美元收购,验证了Agent商业化的巨大潜力。 2025年,AI不再是实验室中的抽象概念,而是逐步嵌入日常生产生活,以更加务实的姿态和广泛的应用场景,真正走向了社会的主流。从年初DeepSeek R1的开源发布到年末Manus的天价收购,这两件大事为2025年的AI发展定下了基调:开源与闭源的博弈,技术与商业的融合,模型与应用的深度对接,无疑为AI的未来铺设了一条发展道路。技术突破和产业落地不断交织,AI的角色正在悄然发生深刻的转变——从“辅助工具”走向了“自主执行者”。 文章目录

By Ne0inhk

TRAE vs Qoder vs Cursor vs GitHub Copilot:谁才是真正的“AI 工程师”?

引言:工具选择 = 成本 + 效率 + 风险 的综合权衡 2026 年,AI 编程工具已从“玩具”走向“生产主力”。但面对 TRAE、Qoder、Cursor、GitHub Copilot 等选项,开发者不仅要问: * 它能写 Rust 吗?支持中文需求吗? * 更要问:一个月多少钱?团队用得起吗?代码安全有保障吗? 本文将从 五大核心维度 深度剖析四大主流 AI IDE: 1. 核心理念与自主性 2. 多语言与跨生态支持能力 3. 工程化与交付闭环能力 4. 中文本地化与业务适配 5. 收费模式、定价策略与企业成本 帮你做出技术可行、经济合理、风险可控的决策。 一、核心理念:

By Ne0inhk

Cogito-v1-preview-llama-3B应用场景:工业设备故障日志分析与维修建议生成

Cogito-v1-preview-llama-3B应用场景:工业设备故障日志分析与维修建议生成 1. 工业设备运维的痛点与机遇 在工业制造领域,设备故障是每个工厂管理者最头疼的问题。一台关键设备的突然停机,可能导致整条生产线瘫痪,每小时损失数以万计。传统的故障排查方式往往依赖经验丰富的老师傅,通过查看设备日志、听声音、摸温度来判断问题所在。 但这种传统方式面临三大挑战:人才断层(老师傅越来越少)、响应延迟(排查需要时间)、经验局限(个人经验有限)。现在,借助Cogito-v1-preview-llama-3B这样的智能模型,我们可以让设备运维进入智能化时代。 Cogito v1预览版是Deep Cogito推出的混合推理模型,在标准基准测试中超越了同等规模的其他开源模型。它不仅能直接回答问题,还能进行自我反思和推理,特别适合处理工业设备故障日志这类复杂的技术问题。 2. Cogito模型的独特优势 2.1 混合推理能力 Cogito模型最大的特点是混合推理能力。当面对设备故障日志时,它不会简单地匹配关键词,而是会: * 先理解:分析日志中的技术术语和上下文关系

By Ne0inhk