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

IPIDEA网页抓取API实战:全自动化实现eBay商品数据采集与Python接入

IPIDEA网页抓取API实战:全自动化实现eBay商品数据采集与Python接入

前言:跨境电商数据采集痛点与需求 随着跨境电商、数据驱动决策以及AI模型训练的需求不断增长,开发者与企业需要稳定、合规、可规模化 的网页数据抓取方案。但实际落地往往困难重重:高强度抓取、IP无法访问、JS渲染、数据格式不统一,这些让数据采集的技术门槛与成本居高不下。本篇将带你实操IPIDEA网页抓取API,并构建一个 可直接投入使用的eBay商品信息采集工具,一步步完成抓取、解析到下载的全过程,帮助你快速掌握全球电商数据采集的核心方法。 为什么需要网页抓取API 在跨境电商运营、市场竞品调研、AI模型训练等核心业务场景中,企业与开发者往往需要获取公开的电商商品信息、竞品动态等关键数据,但直接开展数据采集工作会面临三大核心痛点: 抓取门槛居高不下:Amazon、eBay等主流平台普遍部署了验证码校验、IP访问管理、JS动态渲染等多重抓取机制,若自研抓取系统,不仅需要持续投入人力进行技术突破与迭代,还会面临采集稳定性差、数据获取中断等问题,综合成本居高不下 合规风险难以规避:未经合规授权的公开数据采集行为,容易触碰GDPR、CCPA等国际数据合规法规;同时普通代理IP无法满足 “

By Ne0inhk
Ubuntu系统下Python连接国产KingbaseES数据库实现增删改查

Ubuntu系统下Python连接国产KingbaseES数据库实现增删改查

摘要:本文将介绍Ubuntu系统下如何使用Python连接国产金仓数据库KingbaseES,并实现基本的增删改查操作。文中将通过具体代码示例展示连接数据库、执行SQL语句以及处理结果的全过程。这里把Python连接KingbaseES的经验整理一下,希望能帮到同样踩坑的兄弟。 目录 1.环境准备与驱动安装 1.1 科普ksycopg2知识 1.2 官方下载ksycopg2驱动 1.3 安装ksycopg2驱动 2. 连接KingbaseES数据库 3. 创建数据表 4. 实现增删改查功能 4.1 新增 4.2 查询 4.3 修改 4.4 删除 4.5 封装一个类crud方便复用 5.总结 1.环境准备与驱动安装 KingbaseES提供了专门的Python驱动包ksycopg2,它是基于Python DB API 2.0规范实现的线程安全数据库适配器!

By Ne0inhk

python八股文汇总(持续更新版)

python装饰器 一、装饰器是什么? 装饰器是Python中一种"化妆师",它能在不修改原函数代码的前提下,给函数动态添加新功能。 * 本质:一个接收函数作为参数,并返回新函数的工具。 * 作用:像给手机贴膜,既保护屏幕(原函数),又新增防摔功能(装饰逻辑)。 二、核心原理 1. 函数是"对象":Python中函数可以像变量一样传递,这是装饰器的基础。 2. 闭包机制:装饰器通过嵌套函数(闭包)保留原函数,并包裹新功能。 工作流程: 1. 你调用被装饰的函数(如hello())。 2. Python实际执行的是装饰器加工后的新函数。 3. 新函数先执行装饰器添加的逻辑(如权限检查),再执行原函数。 三、常见用途 场景 作用 生活类比 权限验证 检查用户是否登录再执行函数

By Ne0inhk
【免费领源码】96007物流车辆预约平台 计算机毕业设计项目推荐上万套实战教程JAVA,node.js,C++、python、大屏数据可视化

【免费领源码】96007物流车辆预约平台 计算机毕业设计项目推荐上万套实战教程JAVA,node.js,C++、python、大屏数据可视化

目 录 物流车辆预约平台 摘  要 第1章 绪论 1.1背景及意义 1.2 研究现状 1.3  论文组成结构 第2章 相关技术 2.1 B/S体系工作原理 2.2 Django框架介绍 2.3 MySQL数据库 第3章 系统分析 3.1 系统可行性分析 3.1.1技术可行性 3.1.2经济可行性 3.1.3操作可行性 3.2 功能需求分析 3.3 非功能性分析 3.4系统流程分析 3.

By Ne0inhk