目录
[5.1 Utils类](#5.1 Utils类)
相关链接
抽奖系统代码:https://gitee.com/jia-lixuan/lucky-bullet-bullet-bullet
自动化测试代码/性能测试报告:jialixuan/幸运弹弹弹 - Gitee.com
已上线项目地址:管理员登录页面
同时也有:博客系统自动化测试-CSDN博客
一、项目介绍❤️🔥
该抽奖系统基于 Java 语言开发,借助 Spring Boot 框架的便捷性与高效性搭建基础架构,运用 MyBatis 进行数据库操作,利用 Redis 实现数据缓存加速,结合 RabbitMQ 完成消息的异步处理。系统涵盖活动创建、奖品管理、抽奖操作以及中奖记录管理等核心功能,为抽奖活动提供了全面、稳定且灵活的解决方案。通过对活动、奖品和人员信息的有效管理,以及采用先进的缓存和消息队列技术,实现了抽奖活动的自动化管理和数据的高效处理,能够满足不同规模和场景下的抽奖需求。
二、测试目的🩷
本测试计划旨在验证项目核心功能(用户管理、活动管理、抽奖流程、奖品管理)的正确性和完整性。通过测试,发现并修复系统中存在的缺陷和问题,保证平台在正式上线后能够稳定、安全地运行
三、测试范围🧡
|--------|---------|------------------------------------|----------------------------------------------------------------------------------------|
| 模块 | 功能 | 功能描述 | 对应功能测试点 |
| 用户管理模块 | 用户注册 | 支持用户通过手机号注册,需填写密码并校验格式,注册成功后生成用户账号 | 1. 手机号 / 邮箱格式错误时是否提示;2. 密码强度不足(如长度 < 6 位)是否拦截;3. 重复注册(同手机号)是否返回错误;4. 注册成功后数据库是否新增用户记录 |
| 用户管理模块 | 用户登录 | 支持账号密码登录,验证通过后返回登录凭证,失败则提示错误信息 | 1. 账号不存在 / 密码错误时是否提示;2. 登录成功后是否生成有效 token; |
| 用户管理模块 | 密码加密 | 注册 / 登录时对密码进行加密存储,解密时验证合法性 | 1. 数据库中密码是否为加密后字符串(非明文);2. 正确密码解密后是否匹配;3. 错误密码解密后是否验证失败 |
| 活动管理模块 | 活动创建 | 支持创建抽奖活动,配置活动名称、关联奖品等信息 | 1. 活动名称为空 / 重复是否提示;2. 开始时间晚于结束时间是否拦截;3. 未关联奖品时是否允许创建; |
| 活动管理模块 | 活动查询 | 支持查询活动列表(分页)及单活动详情 | 1. 分页参数(页码、条数)异常时是否处理;2. 活动详情查询是否优先从 Redis 获取;3. 活动删除后是否无法查询 |
| 活动管理模块 | 活动状态管理 | 支持活动启用、暂停、结束操作,状态变更后同步更新缓存 | 1. 启用已结束活动是否提示;2. 暂停活动后用户是否无法参与抽奖;3. 状态变更后 Redis 缓存是否同步更新 |
| 奖品管理模块 | 奖品创建 | 支持添加奖品,配置名称、数量、图片、等信息 | 1. 奖品数量为负数是否拦截;2.片上传格式 / 大小超限是否报错 |
| 奖品管理模块 | 奖品查询与编辑 | 支持查询奖品列表、修改奖品信息(如库存、概率) | 1. 编辑后奖品信息是否同步至活动关联数据;2. 库存为 0 时是否仍能查询;3. 奖品删除后关联活动是否无法抽取该奖品 |
| 抽奖功能模块 | 抽奖请求处理 | 接收用户抽奖请求,校验资格后执行抽奖逻辑,返回中奖结果 | 1. 未登录用户抽奖是否拦截;2. 超过参与次数限制是否提示;3. 活动未开始 / 已结束时抽奖是否失败 |
| 抽奖功能模块 | 异步抽奖流程 | 通过 RabbitMQ 异步处理抽奖任务,更新中奖记录并同步缓存 | 1. 高并发抽奖时是否出现重复中奖;2. 消息队列投递失败是否重试;3. 中奖记录是否同时写入数据库和 Redis |
| 抽奖功能模块 | 中奖记录管理 | 支持查询活动 / 奖品维度中奖记录、删除无效记录 | 1. 中奖记录查询是否优先从 Redis 获取;2. 删除记录后数据库与 Redis 是否同步删除;3. 分页查询大量记录时是否卡顿 |
四、测试方法及工具💜
- 使用selenum进行UI自动化测试
- 使用postman和jmeter进行接口自动化测试
- 使用Fiddler进行抓包验证
五、测试执行🩵
执行测试用例

架构设计 :

5.1 Utils类
Utils
类是一个基于 Selenium 的 Web 自动化测试工具类,主要用于浏览器驱动的初始化和屏幕截图功能
java
package org.example.lotteryautotest.utils;
import io.github.bonigarcia.wdm.WebDriverManager;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.edge.EdgeDriver;
import org.openqa.selenium.edge.EdgeOptions;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
public class Utils {
public static WebDriver driver;
/**
* 创建driver驱动对象
*/
public static WebDriver createDriver()
{
if(driver == null)
{
//使用 WebDriverManager 自动管理 Edge 驱动(无需手动下载驱动)。
//添加 --remote-allow-origins=* 参数解决可能的跨域限制。
WebDriverManager.edgedriver().setup();
EdgeOptions options = new EdgeOptions();
//允许访问所有的链接
options.addArguments("--remote-allow-origins=*");
driver = new EdgeDriver(options);
//隐式等待(全局情况,查找元素的时候都让它等待2秒)
//driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(2));
}
return driver;
}
/**
* 构造方法
*/
public Utils(String url)
{
//调用driver对象
driver = createDriver();
//访问url
driver.get(url);
}
public void printscreen(String test) throws NoSuchMethodException, IOException {
//屏幕截图
SimpleDateFormat sim1 = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat sim2 = new SimpleDateFormat("HHmmssSS");
String dirTime = sim1.format(System.currentTimeMillis());
String fileTime = sim2.format(System.currentTimeMillis());
String filename ="./src/test/java/com/example/lottertAutotest/image/"+ dirTime +"/"+test +"-" + fileTime+".png";
System.out.println("filename:"+filename);
File srcFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
//srcFile放到指定位置
FileUtils.copyFile(srcFile,new File(filename));
}
}
5.2测试登陆界面
- 是否能正常打开页面
- 登录失败 所有用例
- 登录成功 所有用例
代码实现:
java
package org.example.lotteryautotest.test;
import com.sun.jna.WString;
import org.example.lotteryautotest.utils.Utils;
import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import java.io.IOException;
/**
* 测试 登陆用例
*/
public class LoginPage extends Utils {
//活动登陆url:
private final static String url = "http://8.140.60.17:8080/blogin.html";
// 创建显示等待对象
private WebDriverWait wait = new WebDriverWait(driver, java.time.Duration.ofSeconds(20));
// 初始化页面
public LoginPage() {
super(url);
}
public void check() throws IOException, NoSuchMethodException, InterruptedException {
login();
loginSuccess();
loginFail();
System.out.println("测试登陆通过");
}
public void login() throws InterruptedException {
Thread.sleep(500);
// 获取页面url
String CurUrl = driver.getCurrentUrl();
//比较当前CurUrl正确
Assertions.assertEquals(url,CurUrl);
//验证图片是否存在
Assertions.assertNotNull(driver.findElement(By.xpath("/html/body/div/div[1]/img")));
//验证用户名输入框是否存在
Assertions.assertNotNull(driver.findElement(By.xpath("//*[@id=\"phoneNumber\"]")));
//验证密码输入框是否存在
Assertions.assertNotNull(driver.findElement(By.xpath("//*[@id=\"password\"]")));
//验证登录按钮是否存在
Assertions.assertNotNull(driver.findElement(By.xpath("//*[@id=\"loginForm\"]/button")));
//验证注册按钮
Assertions.assertNotNull(driver.findElement(By.xpath("/html/body/div/div[2]/div[2]/a")));
//点击注册按钮验证是否跳转到注册页面
driver.findElement(By.xpath("/html/body/div/div[2]/div[2]/a")).click();
Thread.sleep(1000);
CurUrl = driver.getCurrentUrl();
String newUrl = "http://127.0.0.1:8080/register.html?admin=true";
Assertions.assertEquals(newUrl,CurUrl);
driver.navigate().back();//返回上一页
}
/**
* 测试:登陆成功
*/
public void loginSuccess() throws InterruptedException {
//输入用户名和密码
driver.findElement(By.xpath("//*[@id=\"phoneNumber\"]")).click();
driver.findElement(By.xpath("//*[@id=\"password\"]")).click();
driver.findElement(By.xpath("//*[@id=\"phoneNumber\"]")).sendKeys("18532536053");
driver.findElement(By.xpath("//*[@id=\"password\"]")).sendKeys("123456");
driver.findElement(By.xpath("//*[@id=\"loginForm\"]/button")).click();
Thread.sleep(1000);
//验证是否跳转到主页
Assertions.assertEquals("http://127.0.0.1:8080/admin.html",driver.getCurrentUrl());
Assertions.assertNotNull(driver.findElement(By.xpath("/html/body/div[2]/div[1]/ul/li[1]/div/span")));
driver.navigate().back();//返回上一页
}
/**
* 测试:登陆失败
*/
public void loginFail() throws IOException, NoSuchMethodException, InterruptedException {
//清除输入框内容
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@id=\"phoneNumber\"]"))).clear();//清空输入框
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@id=\"password\"]"))).clear();//清空输入框
//情况一 手机号非11位 密码正确
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@id=\"phoneNumber\"]"))).sendKeys("111111111");//在输入框中输入用户名
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@id=\"password\"]"))).sendKeys("123456"); //在输入框中输入密码
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@id=\"loginForm\"]/button"))).click();//点击提交按钮
Alert alert = wait.until(ExpectedConditions.alertIsPresent());
Assertions.assertEquals("登录失败!登录方式不存在",alert.getText());
alert.accept();
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@id=\"phoneNumber\"]"))).clear();//清空输入框
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@id=\"password\"]"))).clear();//清空输入框
//情况一 手机是11位但未注册 密码正确
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@id=\"phoneNumber\"]"))).sendKeys("18535263059");//在输入框中输入用户名
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@id=\"password\"]"))).sendKeys("123456"); //在输入框中输入密码
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@id=\"loginForm\"]/button"))).click();//点击提交按钮
alert = wait.until(ExpectedConditions.alertIsPresent());
Assertions.assertEquals("登录失败!用户信息为空",alert.getText());
alert.accept();
}
}
动画效果演示:

5.3测试活动中心界面
- 成功登陆状态
- 测试活动列表页面功能与元素
- 测试创建活动页面功能与元素
- 测试奖品列表页面功能与元素
- 测试创建奖品页面功能与元素
- 测试退出按钮功能
代码实现:
java
package org.example.lotteryautotest.test;
import org.example.lotteryautotest.utils.Utils;
import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.support.ui.WebDriverWait;
import java.io.IOException;
/**
* 测试 活动中心用例
*/
public class ActivityCenterPage extends Utils {
// 活动中心页面url
private static final String url = "http://8.140.60.17:8080/blogin.html";
// 创建显示等待对象
private WebDriverWait wait = new WebDriverWait(driver,java.time.Duration.ofSeconds(20));
public ActivityCenterPage() {
super(url);
}
public void check() throws IOException, NoSuchMethodException, InterruptedException {
ByLogin();
AllModules();
TestCase2();
System.out.println("测试活动中心用例通过");
}
public void notByLogin(){
}
// 登陆状态:验证页面元素
public void ByLogin() throws InterruptedException {
//输入用户名和密码
driver.findElement(By.xpath("//*[@id=\"phoneNumber\"]")).click();
driver.findElement(By.xpath("//*[@id=\"password\"]")).click();
driver.findElement(By.xpath("//*[@id=\"phoneNumber\"]")).sendKeys("18532536053");
driver.findElement(By.xpath("//*[@id=\"password\"]")).sendKeys("123456");
driver.findElement(By.xpath("//*[@id=\"loginForm\"]/button")).click();
Thread.sleep(500);
Assertions.assertEquals("http://127.0.0.1:8080/admin.html",driver.getCurrentUrl());
//验证界面元素
Assertions.assertNotNull(driver.findElement(By.xpath("/html/body/div[1]/div[1]/img"))); //左上角的活动中心
Assertions.assertNotNull(driver.findElement(By.xpath("/html/body/div[2]/div[1]/ul/li[1]/div/span"))); //三大模块之一活动管理
Assertions.assertNotNull(driver.findElement(By.xpath("/html/body/div[2]/div[1]/ul/li[2]/div/span"))); //三大模块之二奖品管理
Assertions.assertNotNull(driver.findElement(By.xpath("/html/body/div[2]/div[1]/ul/li[3]/div/span"))); //三大模块之三用户管理
}
public void AllModules(){
//1.活动列表页
driver.findElement(By.xpath("//*[@id=\"activitiesList\"]")).click(); //点击活动列表页
//切换frame
driver.switchTo().frame("contentFrame");
Assertions.assertNotNull(driver.findElement(By.xpath("/html/body/div/h2"))); //活动列表页
Assertions.assertNotNull(driver.findElement(By.xpath("/html/body/div/div[2]/button[1]"))); //首页按钮
Assertions.assertNotNull(driver.findElement(By.xpath("/html/body/div/div[2]/button[2]"))); //上一页按钮
Assertions.assertNotNull(driver.findElement(By.xpath("/html/body/div/div[2]/button[3]"))); //下一页按钮
Assertions.assertNotNull(driver.findElement(By.xpath("/html/body/div/div[2]/button[4]"))); //尾页
//2.创建活动页
// 切换回主页面(关键!)
driver.switchTo().defaultContent();
driver.findElement(By.xpath("//*[@id=\"createActivity\"]")).click(); //点击创建活动页
//切换frame
driver.switchTo().frame("contentFrame");
Assertions.assertNotNull(driver.findElement(By.xpath("/html/body/div[1]/h2"))); //创建活动标题
Assertions.assertNotNull(driver.findElement(By.xpath("//*[@id=\"buttonPrizes\"]"))); //圈选奖品按钮
Assertions.assertNotNull(driver.findElement(By.xpath("//*[@id=\"buttonUsers\"]"))); //圈选人员按钮
Assertions.assertNotNull(driver.findElement(By.xpath("//*[@id=\"createActivity\"]"))); //创建活动按钮
// 切换回主页面(关键!)
driver.switchTo().defaultContent();
//3.奖品列表页
driver.findElement(By.xpath("/html/body/div[2]/div[1]/ul/li[2]/ul/li[1]/a")).click(); //点击奖品列表页
//切换frame
driver.switchTo().frame("contentFrame");
Assertions.assertNotNull(driver.findElement(By.xpath("/html/body/div/h2")));
Assertions.assertNotNull(driver.findElement(By.xpath("/html/body/div/div[2]/button[1]"))); //首页按钮
Assertions.assertNotNull(driver.findElement(By.xpath("/html/body/div/div[2]/button[2]"))); //上一页按钮
Assertions.assertNotNull(driver.findElement(By.xpath("/html/body/div/div[2]/button[3]"))); //下一页按钮
Assertions.assertNotNull(driver.findElement(By.xpath("/html/body/div/div[2]/button[4]"))); //尾页
// 切换回主页面(关键!)
driver.switchTo().defaultContent();
//4.创建奖品页
driver.findElement(By.xpath("/html/body/div[2]/div[1]/ul/li[2]/ul/li[2]/a")).click(); //点击创建奖品
//切换frame
driver.switchTo().frame("contentFrame");
Assertions.assertNotNull(driver.findElement(By.xpath("/html/body/div/h2"))); //开始创建奖品标题
Assertions.assertNotNull(driver.findElement(By.xpath("//*[@id=\"prizeForm\"]/button"))); //创建奖品按钮
}
/**
* 测试用例:点击退出按钮 -跳转到登陆界面
*/
public void TestCase2(){
driver.switchTo().defaultContent(); // 切回主文档
driver.findElement(By.xpath("/html/body/div[1]/div[2]/div/span")).click();
String Cur= driver.getCurrentUrl();
Assertions.assertEquals(url, Cur);
driver.close();
}
}
动图效果演示:

5.4测试活动列表界面
成功登陆状态
测试活动列表页面功能与元素
验证页面布局的合理性
测试退出按钮功能
代码实现:
java
package org.example.lotteryautotest.test;
import org.example.lotteryautotest.utils.Utils;
import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.By;
import org.openqa.selenium.support.ui.WebDriverWait;
/**
* 测试 活动列表用例
*/
public class ActivityListPage extends Utils {
// url
private final static String url = "http://8.140.60.17:8080/blogin.html";
// 创建显示等待对象
private WebDriverWait wait = new WebDriverWait(driver,java.time.Duration.ofSeconds(20));
public ActivityListPage() {
super(url);
}
public void check() throws InterruptedException {
login();
TestCase2();
System.out.println("测试活动列表通过");
}
//登陆状态
public void login() throws InterruptedException {
//输入用户名和密码
driver.findElement(By.xpath("//*[@id=\"phoneNumber\"]")).click();
driver.findElement(By.xpath("//*[@id=\"password\"]")).click();
driver.findElement(By.xpath("//*[@id=\"phoneNumber\"]")).sendKeys("18532536053");
driver.findElement(By.xpath("//*[@id=\"password\"]")).sendKeys("123456");
driver.findElement(By.xpath("//*[@id=\"loginForm\"]/button")).click();
Thread.sleep(500);
driver.findElement(By.xpath("//*[@id=\"activitiesList\"]")).click(); //点击活动列表页
//切换frame
driver.switchTo().frame("contentFrame");
Assertions.assertNotNull(driver.findElement(By.xpath("/html/body/div/h2"))); //活动列表页
Assertions.assertNotNull(driver.findElement(By.xpath("/html/body/div/div[2]/button[1]"))); //首页按钮
Assertions.assertNotNull(driver.findElement(By.xpath("/html/body/div/div[2]/button[2]"))); //上一页按钮
Assertions.assertNotNull(driver.findElement(By.xpath("/html/body/div/div[2]/button[3]"))); //下一页按钮
Assertions.assertNotNull(driver.findElement(By.xpath("/html/body/div/div[2]/button[4]"))); //尾页
}
/**
* 测试用例:点击退出按钮 -跳转到登陆界面
*/
public void TestCase2(){
driver.switchTo().defaultContent(); // 切回主文档
driver.findElement(By.xpath("/html/body/div[1]/div[2]/div/span")).click();
String Cur= driver.getCurrentUrl();
Assertions.assertEquals(url, Cur);
driver.close();
}
}
动图效果演示:

5.5测试创建活动界面
- 登陆状态-验证页面元素是否存在
- 填选活动名称/活动描述-未圈选奖品/人员-点击创建活动按钮
- 未填选活动名称/活动描述-点击创建活动按钮
- 点击圈选奖品/人员按钮-预期弹出奖品/人员列表框-验证列表框内内容是否符合预期
- 圈选奖品数量大于人员数量-点击创建活动按钮
- 未圈选人员-点击创建活动按钮
- 验证页面布局的合理性
- 测试退出按钮功能
代码实现:
java
package org.example.lotteryautotest.test;
import org.example.lotteryautotest.utils.Utils;
import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
/**
* 测试 创建活动用例
*/
public class ActivityCreatePage extends Utils {
// url
private final static String url = "http://8.140.60.17:8080/blogin.html";
// 创建显示等待对象
private WebDriverWait wait = new WebDriverWait(driver,java.time.Duration.ofSeconds(10));
public ActivityCreatePage() {
super(url);
}
public void check() throws InterruptedException {
login();
TestCase1();
TestCase2();
TestCase3();
TestCase4();
TestCase5();
TestCase6();
System.out.println("验证-创建活动通过");
}
//登陆状态-验证页面元素是否存在
public void login() throws InterruptedException {
driver.findElement(By.xpath("//*[@id=\"phoneNumber\"]")).click();
driver.findElement(By.xpath("//*[@id=\"password\"]")).click();
driver.findElement(By.xpath("//*[@id=\"phoneNumber\"]")).sendKeys("18532536053");
driver.findElement(By.xpath("//*[@id=\"password\"]")).sendKeys("123456");
driver.findElement(By.xpath("//*[@id=\"loginForm\"]/button")).click();
Thread.sleep(2000);
driver.findElement(By.xpath("//*[@id=\"createActivity\"]")).click(); //点击创建活动页
//切换frame页面
driver.switchTo().frame("contentFrame");
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id=\"buttonPrizes\"]")));
Assertions.assertNotNull(driver.findElement(By.xpath("//*[@id=\"buttonPrizes\"]"))); //圈选奖品按钮
Assertions.assertNotNull(driver.findElement(By.xpath("//*[@id=\"buttonUsers\"]"))); //圈选人员按钮
Assertions.assertNotNull(driver.findElement(By.xpath("//*[@id=\"createActivity\"]"))); //创建活动按钮
}
/**
//测试用例;填选活动名称/活动描述-未圈选奖品/人员-点击创建活动按钮
*
*/
private void TestCase1(){
driver.findElement(By.xpath("//*[@id=\"activityName\"]")).click(); //点击名称输入框
driver.findElement(By.xpath("//*[@id=\"activityName\"]")).sendKeys("测试!");
driver.findElement(By.xpath("//*[@id=\"description\"]")).click(); // 点击描述输入框
driver.findElement(By.xpath("//*[@id=\"description\"]")).sendKeys("测试描述!");
driver.findElement(By.xpath("//*[@id=\"createActivity\"]")).click(); // 点击创建
//验证提示框内容是否符合预期
Alert alert = driver.switchTo().alert();
Assertions.assertEquals("请至少选择一个奖品",alert.getText());
alert.accept();
}
/**
* //测试用例;未填选活动名称/活动描述-点击创建活动按钮
*/
private void TestCase5(){
driver.findElement(By.xpath("//*[@id=\"activityName\"]")).clear();
driver.findElement(By.xpath("//*[@id=\"description\"]")).clear();
driver.findElement(By.xpath("//*[@id=\"createActivity\"]")).click();
//验证输入框下方内容是否符合预期
Assertions.assertEquals("请输入活动名称",driver.findElement(By.xpath("//*[@id=\"activityName-error\"]")).getText());
Assertions.assertEquals("请输入活动描述",driver.findElement(By.xpath("//*[@id=\"description-error\"]")).getText());
}
/**
* //测试用例:点击圈选奖品/人员按钮-预期弹出奖品/人员列表框-验证列表框内内容是否符合预期
*/
private void TestCase2(){
//点击圈选奖品按钮
driver.findElement(By.xpath("//*[@id=\"buttonPrizes\"]")).click();
//验证奖品列表框内容是否符合预期
Assertions.assertNotNull(driver.findElement(By.xpath("//*[@id=\"prizesModal\"]/div/div[1]/p[1]")));
Assertions.assertNotNull(driver.findElement(By.xpath("//*[@id=\"prizesModal\"]/div/div[1]/p[2]")));
Assertions.assertNotNull(driver.findElement(By.xpath("//*[@id=\"prizesModal\"]/div/div[1]/p[3]")));
Assertions.assertNotNull(driver.findElement(By.xpath("//*[@id=\"prizesModal\"]/div/div[1]/p[4]")));
//点击去确认按钮
driver.findElement(By.xpath("//*[@id=\"prizesModal\"]/div/div[3]/button[2]")).click();
//点击圈选人员按钮
driver.findElement(By.xpath("//*[@id=\"buttonUsers\"]")).click();
//验证人员列表框内容是否符合预期
Assertions.assertNotNull(driver.findElement(By.xpath("//*[@id=\"usersModal\"]/div/div[2]/button[1]")));
Assertions.assertNotNull(driver.findElement(By.xpath("//*[@id=\"usersModal\"]/div/div[2]/button[2]")));
driver.findElement(By.xpath("//*[@id=\"usersModal\"]/div/div[2]/button[2]")).click();
}
/**
* 测试用例:圈选奖品数量大于人员数量-点击创建活动按钮
*/
private void TestCase3() throws InterruptedException {
//点击圈选奖品按钮
driver.findElement(By.xpath("//*[@id=\"buttonPrizes\"]")).click();
//选择奖品数量-输入数量(默认奖品等级)
driver.findElement(By.xpath("//*[@id=\"prize-30\"]")).click();
driver.findElement(By.xpath("//*[@id=\"prizesContainer\"]/div[1]/input[2]")).clear();
driver.findElement(By.xpath("//*[@id=\"prizesContainer\"]/div[1]/input[2]")).sendKeys("10");
//点击去奖品确认按钮
driver.findElement(By.xpath("//*[@id=\"prizesModal\"]/div/div[3]/button[2]")).click();
//点击圈选人员按钮
driver.findElement(By.xpath("//*[@id=\"buttonUsers\"]")).click();
driver.findElement(By.xpath("//*[@id=\"user-42\"]")).click();
//点击去人员确认按钮
driver.findElement(By.xpath("//*[@id=\"usersModal\"]/div/div[2]/button[2]")).click();
//点击创建活动按钮
driver.findElement(By.xpath("//*[@id=\"createActivity\"]")).click();
Thread.sleep(2000);
//验证提示框内容是否符合预期
Alert alert = driver.switchTo().alert();
Assertions.assertEquals("创建失败!活动关联的奖品及人员数量设置异常",alert.getText());
alert.accept();
}
/**
测试用例:未圈选人员-点击创建活动按钮
*/
private void TestCase4() throws InterruptedException {
Thread.sleep(1000);
// 切换回主页面(关键!)
driver.switchTo().defaultContent();
driver.findElement(By.xpath("//*[@id=\"createActivity\"]")).click(); //点击创建活动页
//切换frame页面
driver.switchTo().frame("contentFrame");
//点击圈选人员按钮
driver.findElement(By.xpath("//*[@id=\"buttonUsers\"]")).click();
//点击勾选人员
driver.findElement(By.xpath("//*[@id=\"user-42\"]")).click();
//点击去确认按钮
driver.findElement(By.xpath("//*[@id=\"usersModal\"]/div/div[2]/button[2]")).click();
driver.findElement(By.xpath("//*[@id=\"createActivity\"]")).click(); // 点击创建按钮
String text = driver.findElement(By.xpath("//*[@id=\"activityName-error\"]")).getText();
Assertions.assertEquals("请输入活动名称",text);
}
/**
* 测试用例:点击退出按钮 -跳转到登陆界面
*/
public void TestCase6(){
driver.switchTo().defaultContent(); // 切回主文档
driver.findElement(By.xpath("/html/body/div[1]/div[2]/div/span")).click();
String Cur= driver.getCurrentUrl();
Assertions.assertEquals(url, Cur);
driver.close();
}
}
动图效果演示:

5.6测试奖品列表界面
- 登陆状态-验证页面元素是否存在
- 验证页面布局的合理性
- 测试退出按钮功能
代码实现:
java
package org.example.lotteryautotest.test;
import org.example.lotteryautotest.utils.Utils;
import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.By;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import java.io.IOException;
/**
* 测试奖品列表页面
*/
public class PrizeListPage extends Utils {
// url
private final static String url = "http://8.140.60.17:8080/blogin.html";
// 创建显示等待对象
private WebDriverWait wait = new WebDriverWait(driver,java.time.Duration.ofSeconds(5));
public PrizeListPage() {
super(url);
}
public void check() throws InterruptedException {
login();
TestCase1();
System.out.println("测试奖品列表页面通过");
}
//登陆状态
public void login() throws InterruptedException {
driver.findElement(By.xpath("//*[@id=\"phoneNumber\"]")).click();
driver.findElement(By.xpath("//*[@id=\"password\"]")).click();
driver.findElement(By.xpath("//*[@id=\"phoneNumber\"]")).sendKeys("18532536053");
driver.findElement(By.xpath("//*[@id=\"password\"]")).sendKeys("123456");
driver.findElement(By.xpath("//*[@id=\"loginForm\"]/button")).click();
Thread.sleep(500);
//点击活动列表页
// wait.until(ExpectedConditions.elementToBeClickable(By.xpath("/html/body/div[2]/div[1]/ul/li[2]/ul/li[1]/a")));
driver.findElement(By.xpath("/html/body/div[2]/div[1]/ul/li[2]/ul/li[1]/a")).click();
// 获取frame页面
wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt("contentFrame"));
//验证奖品列表页面元素是否存在
Assertions.assertNotNull(driver.findElement(By.xpath("/html/body/div/h2"))); //奖品列表页
Assertions.assertNotNull(driver.findElement(By.xpath("/html/body/div/div[2]/button[1]"))); //首页按钮
Assertions.assertNotNull(driver.findElement(By.xpath("/html/body/div/div[2]/button[2]"))); //上一页按钮
Assertions.assertNotNull(driver.findElement(By.xpath("/html/body/div/div[2]/button[3]"))); //下一页按钮
Assertions.assertNotNull(driver.findElement(By.xpath("/html/body/div/div[2]/button[4]"))); //尾页
}
/**
* 测试用例:点击退出按钮 -跳转到登陆界面
*/
public void TestCase1(){
driver.switchTo().defaultContent(); // 切回主文档
driver.findElement(By.xpath("/html/body/div[1]/div[2]/div/span")).click();
String Cur= driver.getCurrentUrl();
Assertions.assertEquals(url, Cur);
driver.close();
}
}
动图效果演示:

5.7测试创建奖品界面
- 登陆状态-验证页面元素是否存在
- 验证页面布局的合理性
- 未输入奖品名称、奖品描述、奖品价格
- 填写奖品名称、奖品描述、奖品价格、创建奖品
- 测试退出按钮功能
代码实现:
java
package org.example.lotteryautotest.test;
import org.example.lotteryautotest.utils.Utils;
import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
/**
* 测试 创建奖品用例
*/
public class PrizeCreatePage extends Utils {
// url
private final static String url = "http://8.140.60.17:8080/blogin.html";
// 创建显示等待对象
private WebDriverWait wait = new WebDriverWait(driver,java.time.Duration.ofSeconds(5));
public PrizeCreatePage() {
super(url);
}
public void check() throws InterruptedException {
login();
TestCase1();
// TestCase2();
TestCase3();
System.out.println("测试创建奖品通过");
}
public void login() throws InterruptedException{
driver.findElement(By.xpath("//*[@id=\"phoneNumber\"]")).click();
driver.findElement(By.xpath("//*[@id=\"password\"]")).click();
driver.findElement(By.xpath("//*[@id=\"phoneNumber\"]")).sendKeys("18532536053");
driver.findElement(By.xpath("//*[@id=\"password\"]")).sendKeys("123456");
driver.findElement(By.xpath("//*[@id=\"loginForm\"]/button")).click();
Thread.sleep(2000);
//点击创建奖品页
driver.findElement(By.cssSelector("body > div.cont-box > div.sidebar > ul > li:nth-child(2) > ul > li:nth-child(2) > a")).click();
//切换frame
driver.switchTo().frame("contentFrame");
//验证页面元素
Assertions.assertNotNull(driver.findElement(By.xpath("//*[@id=\"prizeRows\"]/div/div[1]/label")));
Assertions.assertNotNull(driver.findElement(By.xpath("//*[@id=\"prizeRows\"]/div/div[2]/label")));
Assertions.assertNotNull(driver.findElement(By.xpath("//*[@id=\"prizeRows\"]/div/div[3]/label")));
Assertions.assertNotNull(driver.findElement(By.xpath("//*[@id=\"prizeRows\"]/div/div[4]/label")));
Assertions.assertNotNull(driver.findElement(By.xpath("//*[@id=\"prizeForm\"]/button")));
}
/**
* 测试用例:未输入奖品名称、奖品描述、奖品价格
*/
public void TestCase1() throws InterruptedException {
driver.findElement(By.xpath("//*[@id=\"prizeForm\"]/button")).click();
Assertions.assertNotNull(driver.findElement(By.xpath("//*[@id=\"prizeName-error\"]")));
Assertions.assertNotNull(driver.findElement(By.xpath("//*[@id=\"price-error\"]")));
Assertions.assertNotNull(driver.findElement(By.xpath("//*[@id=\"description-error\"]")));
}
/**
* 测试用例:填写奖品名称、奖品描述、奖品价格-创建奖品
*/
// public void TestCase2(){
// driver.findElement(By.xpath("//*[@id=\"prizeName\"]")).sendKeys("测试奖品!");
// driver.findElement(By.xpath("//*[@id=\"description\"]")).sendKeys("测试奖品描述!");
// driver.findElement(By.xpath("//*[@id=\"price\"]")).sendKeys("10");
// driver.findElement(By.xpath("//*[@id=\"prizeForm\"]/button")).click();
//
//// driver.findElement(By.xpath("//*[@id=\"prizeImageUrl\"]"))
//// .sendKeys("/Users/xibei/下载/xxx.jpg"); // 填你要上传的文件绝对路径
// }
/**
* 测试用例:点击退出按钮 -跳转到登陆界面
*/
public void TestCase3(){
driver.switchTo().defaultContent(); // 切回主文档
driver.findElement(By.xpath("/html/body/div[1]/div[2]/div/span")).click();
String Cur= driver.getCurrentUrl();
Assertions.assertEquals(url, Cur);
driver.close();
}
}
动图效果演示:

5.8测试人员列表页面
- 登陆状态-验证页面元素是否存在
- 验证页面布局的合理性
- 测试退出按钮功能
代码实现:
java
package org.example.lotteryautotest.test;
import org.example.lotteryautotest.utils.Utils;
import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.By;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
/**
* 测试 人员列表用例
*/
public class UserListPage extends Utils {
// url
private final static String url = "http://8.140.60.17:8080/blogin.html";
// 创建显示等待对象
private WebDriverWait wait = new WebDriverWait(driver,java.time.Duration.ofSeconds(5));
public UserListPage() {
super(url);
}
public void check() throws InterruptedException {
login();
TestCase1();
System.out.println("测试人员列表用例通过");
}
/**
* 测试用例 验证页面元素是否存在
* @throws InterruptedException
*/
public void login() throws InterruptedException {
driver.findElement(By.xpath("//*[@id=\"phoneNumber\"]")).click();
driver.findElement(By.xpath("//*[@id=\"password\"]")).click();
driver.findElement(By.xpath("//*[@id=\"phoneNumber\"]")).sendKeys("18532536053");
driver.findElement(By.xpath("//*[@id=\"password\"]")).sendKeys("123456");
driver.findElement(By.xpath("//*[@id=\"loginForm\"]/button")).click();
Thread.sleep(500);
//点击人员列表页
driver.findElement(By.xpath("//*[@id=\"userList\"]")).click();
// 获取frame页面
wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt("contentFrame"));
//验证人员列表页面元素是否存在
Assertions.assertNotNull(driver.findElement(By.xpath("/html/body/div/div/table/thead/tr/th[1]"))); //id
Assertions.assertNotNull(driver.findElement(By.xpath("/html/body/div/div/table/thead/tr/th[2]"))); //人员
Assertions.assertNotNull(driver.findElement(By.xpath("/html/body/div/div/table/thead/tr/th[3]"))); //身份
}
/**
* 测试用例:点击退出按钮 -跳转到登陆界面
*/
public void TestCase1(){
driver.switchTo().defaultContent(); // 切回主文档
driver.findElement(By.xpath("/html/body/div[1]/div[2]/div/span")).click();
String Cur= driver.getCurrentUrl();
Assertions.assertEquals(url, Cur);
driver.close();
}
}
动图效果演示:

5.9测试注册用户页面
- 均未填信息点击注册按钮
- 输入不符合需求格式的手机号-其他信息均正确
- 输入已注册的手机号-其他信息均正确
- 输入不符需求格式的邮箱-其他信息均匀正确
- 成功注册用户并跳转到人员列表页
- 点击退出按钮-跳转到登陆界面
代码实现:
java
package org.example.lotteryautotest.test;
import org.example.lotteryautotest.utils.Utils;
import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
/**
* 测试 注册用例
*/
public class RegisterPage extends Utils {
//url
private static final String url = "http://8.140.60.17:8080/blogin.html";
// 创建显示等待对象
private WebDriverWait wait = new WebDriverWait(driver,java.time.Duration.ofSeconds(5));
public RegisterPage() {
super(url);
}
public void check() throws NoSuchMethodException, InterruptedException {
login();
TestCase1();
TestCase2();
TestCase3();
TestCase4();
TestCase5();
System.out.println("测试注册用例通过");
}
//测试用例 验证页面元素是否存在
public void login() throws InterruptedException {
driver.findElement(By.xpath("//*[@id=\"phoneNumber\"]")).click();
driver.findElement(By.xpath("//*[@id=\"password\"]")).click();
driver.findElement(By.xpath("//*[@id=\"phoneNumber\"]")).sendKeys("18532536053");
driver.findElement(By.xpath("//*[@id=\"password\"]")).sendKeys("123456");
driver.findElement(By.xpath("//*[@id=\"loginForm\"]/button")).click();
Thread.sleep(500);
//点击注册人员页
driver.findElement(By.xpath("//*[@id=\"register\"]")).click();
// 获取frame页面
wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt("contentFrame"));
//验证页面元素是否存在
Assertions.assertNotNull(driver.findElement(By.xpath("//*[@id=\"registerForm\"]/div[1]/label"))); //奖品列表页
Assertions.assertNotNull(driver.findElement(By.xpath("//*[@id=\"registerForm\"]/div[2]/label"))); //首页按钮
Assertions.assertNotNull(driver.findElement(By.xpath("//*[@id=\"registerForm\"]/div[3]/label"))); //上一页按钮
}
/**
* 测试用例 注册人员信息(必填项)
* 均未填信息点击注册按钮
*/
public void TestCase1(){
//点击注册按钮
driver.findElement(By.xpath("//*[@id=\"registerForm\"]/button")).click();
//验证提示信息词是否符合
Assertions.assertEquals("请输入您的姓名",driver.findElement(By.xpath("//*[@id=\"name-error\"]")).getText());
Assertions.assertEquals("请输入有效的邮箱地址",driver.findElement(By.xpath("//*[@id=\"mail-error\"]")).getText());
Assertions.assertEquals("请输入您的手机号",driver.findElement(By.xpath("//*[@id=\"phoneNumber-error\"]")).getText());
System.out.println("Test01验证通过");
}
/**
* 测试用例 :输入不符合需求格式的手机号-其他信息均正确
* 输入已注册的手机号 -其他信息均正确
*/
public void TestCase2() throws InterruptedException {
//填写正确的姓名
driver.findElement(By.xpath("//*[@id=\"name\"]")).clear();
driver.findElement(By.xpath("//*[@id=\"name\"]")).sendKeys("张三");
//填写不正确的手机号
driver.findElement(By.xpath("//*[@id=\"phoneNumber\"]")).clear();
driver.findElement(By.xpath("//*[@id=\"phoneNumber\"]")).sendKeys("1111111");
//填写正确的邮箱
driver.findElement(By.xpath("//*[@id=\"mail\"]")).clear();
driver.findElement(By.xpath("//*[@id=\"mail\"]")).sendKeys("2432003239@qq.com");
driver.findElement(By.xpath("//*[@id=\"registerForm\"]/button")).click();
Alert alert = driver.switchTo().alert();
Assertions.assertEquals("注册失败!手机号错误",alert.getText());
alert.accept();
//填写正确的姓名
driver.findElement(By.xpath("//*[@id=\"name\"]")).clear();
driver.findElement(By.xpath("//*[@id=\"name\"]")).sendKeys("李四");
//填写正确的邮箱
driver.findElement(By.xpath("//*[@id=\"mail\"]")).clear();
driver.findElement(By.xpath("//*[@id=\"mail\"]")).sendKeys("2432013239@qq.com");
driver.findElement(By.xpath("//*[@id=\"phoneNumber\"]")).clear();
driver.findElement(By.xpath("//*[@id=\"phoneNumber\"]")).sendKeys("18532536053");
driver.findElement(By.xpath("//*[@id=\"registerForm\"]/button")).click();
alert = driver.switchTo().alert();
Assertions.assertEquals("注册失败!手机号被使用",alert.getText());
alert.accept();
System.out.println("Test02验证通过");
}
/**
* 测试用例 输入不符需求格式的邮箱 -其他信息均正确
* 输入已注册的邮箱 -其他信息均正确
*/
public void TestCase3() throws InterruptedException {
//填写正确的姓名
driver.findElement(By.xpath("//*[@id=\"name\"]")).clear();
driver.findElement(By.xpath("//*[@id=\"name\"]")).sendKeys("张三");
//填写错误的邮箱
driver.findElement(By.xpath("//*[@id=\"mail\"]")).clear();
driver.findElement(By.xpath("//*[@id=\"mail\"]")).sendKeys("1111111");
//填写正确的手机号
driver.findElement(By.xpath("//*[@id=\"phoneNumber\"]")).clear();
driver.findElement(By.xpath("//*[@id=\"phoneNumber\"]")).sendKeys("18535263076");
//点击注册按钮
driver.findElement(By.xpath("//*[@id=\"registerForm\"]/button")).click();
Alert alert = driver.switchTo().alert();
Assertions.assertEquals("注册失败!邮箱错误",alert.getText());
alert.accept();
driver.findElement(By.xpath("//*[@id=\"mail\"]")).clear();
driver.findElement(By.xpath("//*[@id=\"mail\"]")).sendKeys("2432003237@qq.com");
driver.findElement(By.xpath("//*[@id=\"registerForm\"]/button")).click();
alert = driver.switchTo().alert();
Assertions.assertEquals("注册失败!邮箱被使用",alert.getText());
alert.accept();
System.out.println("Test03验证通过");
}
/**
* 测试用例:成功注册用户并跳转到人员列表页
* @throws InterruptedException
*/
public void TestCase4() throws InterruptedException {
//填写正确的姓名
driver.findElement(By.xpath("//*[@id=\"name\"]")).click();
driver.findElement(By.xpath("//*[@id=\"name\"]")).sendKeys("张三");
//填写有效的邮箱地址
driver.findElement(By.xpath("//*[@id=\"mail\"]")).click();
driver.findElement(By.xpath("//*[@id=\"mail\"]")).sendKeys("2432003337@qq.com");
//填写有效的电话号码
driver.findElement(By.xpath("//*[@id=\"phoneNumber\"]")).click();
driver.findElement(By.xpath("//*[@id=\"phoneNumber\"]")).sendKeys("13784019997");
//点击注册按钮完成注册
driver.findElement(By.xpath("//*[@id=\"registerForm\"]/button")).click();
Thread.sleep(1000);
// 获取frame页面
wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt("contentFrame"));
//验证人员列表页面元素是否存在
Assertions.assertNotNull(driver.findElement(By.xpath("/html/body/div/div/table/thead/tr/th[1]"))); //id
Assertions.assertNotNull(driver.findElement(By.xpath("/html/body/div/div/table/thead/tr/th[2]"))); //人员
Assertions.assertNotNull(driver.findElement(By.xpath("/html/body/div/div/table/thead/tr/th[3]"))); //身份
System.out.println("Test04验证通过");
}
/**
* 测试用例:点击退出按钮 -跳转到登陆界面
*/
public void TestCase5(){
driver.switchTo().defaultContent(); // 切回主文档
driver.findElement(By.xpath("/html/body/div[1]/div[2]/div/span")).click();
String Cur= driver.getCurrentUrl();
Assertions.assertEquals(url, Cur);
System.out.println("Test05验证通过");
}
}
动图效果演示:
5.10测试抽奖步骤界面
- 验证页面元素/整个抽奖步骤是否正常显示 (前提:未进行抽奖的活动共两轮抽奖)
- 验证页面元素/整个抽奖步骤是否正常显示(前提:已进行一轮抽奖的活动,共两轮抽奖)
- 点击退出按钮-跳转到登陆界面
代码实现:
java
package org.example.lotteryautotest.test;
import org.example.lotteryautotest.utils.Utils;
import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import java.io.IOException;
/**
* 测试 抽奖用例
*/
public class DrawPage extends Utils {//url
private static final String url = "http://8.140.60.17:8080/blogin.html";
// 创建显示等待对象
private WebDriverWait wait = new WebDriverWait(driver,java.time.Duration.ofSeconds(5));
public DrawPage() {
super(url);
}
public void check() throws IOException, InterruptedException, NoSuchMethodException {
login();
System.out.println("测试抽奖通过");
}
public void login() throws InterruptedException, IOException, NoSuchMethodException {
driver.findElement(By.xpath("//*[@id=\"phoneNumber\"]")).click();
driver.findElement(By.xpath("//*[@id=\"password\"]")).click();
driver.findElement(By.xpath("//*[@id=\"phoneNumber\"]")).sendKeys("18532536053");
driver.findElement(By.xpath("//*[@id=\"password\"]")).sendKeys("123456");
driver.findElement(By.xpath("//*[@id=\"loginForm\"]/button")).click();
Thread.sleep(500);
//切换到frame页面
driver.switchTo().frame("contentFrame");
Thread.sleep(500);
String By_is_not_accompplish = driver.findElement(By.xpath("//*[@id=\"activities\"]/div[1]/div[2]/p/a")).getText();
if(By_is_not_accompplish.equals("活动已完成,查看中奖名单")){
TestCase2();
}else {
TestCase1();
}
// // 使用显式等待确保 URL 包含 "draw.html"
// wait.until(ExpectedConditions.urlContains("draw.html"));
//
// // 输出等待后的 URL
// System.out.println("After wait: " + driver.getCurrentUrl());
//
// //获取当前url
// String url = driver.getCurrentUrl();
// System.out.println( url);
// //检查字符串 url 是否包含子字符串 "draw.html"
// Assertions.assertTrue(url.contains("draw.html"));
//
// printscreen(url);
}
/**
* 验证页面元素是否正常显示 (前提:未进行抽奖的活动共两轮抽奖)
*/
public void TestCase1() throws InterruptedException {
//点击活动状态(正在进行中)
driver.findElement(By.xpath("//*[@id=\"activities\"]/div[1]/div[2]/p/a")).click();
Thread.sleep(1000);
//打印当前窗口句柄
String originalWindowHandle = driver.getWindowHandle();
System.out.println("原始窗口句柄: " + originalWindowHandle);
// 获取所有窗口句柄
java.util.Set<String> allWindowHandles = driver.getWindowHandles();
// 遍历句柄并切换到非原始窗口
for (String handle : allWindowHandles) {
if (!handle.equals(originalWindowHandle)) {
driver.switchTo().window(handle);
System.out.println("切换到新窗口: " + handle);
}
}
// 验证 查看奖项和开始抽奖按钮是否存在
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@id=\"container\"]/div[4]/span[1]")));
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@id=\"container\"]/div[4]/span[2]")));
// 验证图片
Assertions.assertNotNull(driver.findElement(By.xpath("//*[@id=\"image\"]")));
// 第一轮:点击开始抽奖按钮
driver.findElement(By.xpath("//*[@id=\"container\"]/div[4]/span[2]")).click();
Assertions.assertNotNull(driver.findElement(By.xpath("//*[@id=\"container\"]/div[4]/span[2]")));
// 获取元素文本
String actualText = driver.findElement(By.xpath("//*[@id=\"container\"]/div[4]/span[2]")).getText();
// 进行文本比较
if(actualText.equals("已抽完,下一步")){
TestCase3(originalWindowHandle);
}
Assertions.assertEquals("点我确定", actualText);
// 第二轮点击开始抽奖按钮
driver.findElement(By.xpath("//*[@id=\"container\"]/div[4]/span[2]")).click();
// 获取元素文本
actualText = driver.findElement(By.xpath("//*[@id=\"container\"]/div[4]/span[2]")).getText();
// 进行文本比较
Assertions.assertEquals("已抽完,下一步", actualText);
// 第三轮点击开始抽奖按钮
driver.findElement(By.xpath("//*[@id=\"container\"]/div[4]/span[2]")).click();
// 获取元素文本
actualText = driver.findElement(By.xpath("//*[@id=\"container\"]/div[4]/span[2]")).getText();
// 进行文本比较
Assertions.assertEquals("开始抽奖", actualText);
driver.findElement(By.xpath("//*[@id=\"container\"]/div[4]/span[2]")).click();
// 获取元素文本
actualText = driver.findElement(By.xpath("//*[@id=\"container\"]/div[4]/span[2]")).getText();
// 进行文本比较
Assertions.assertEquals("点我确定", actualText);
// 第二轮点击开始抽奖按钮
driver.findElement(By.xpath("//*[@id=\"container\"]/div[4]/span[2]")).click();
// 获取元素文本
actualText = driver.findElement(By.xpath("//*[@id=\"container\"]/div[4]/span[2]")).getText();
// 进行文本比较
Assertions.assertEquals("已抽完,下一步", actualText);
// 查看上一奖项
driver.findElement(By.xpath("//*[@id=\"container\"]/div[4]/span[1]")).click();
actualText = driver.findElement(By.xpath("//*[@id=\"container\"]/div[4]/span[2]")).getText();
Assertions.assertEquals("已全部抽完", actualText);
actualText = driver.findElement(By.xpath("//*[@id=\"container\"]/div[4]/span[1]")).getText();
Assertions.assertEquals("查看上一奖项", actualText);
// 返回上一个页面
driver.close();
/**
* 测试用例:点击退出按钮 -跳转到登陆界面
*/
driver.switchTo().window(originalWindowHandle);
driver.findElement(By.xpath("/html/body/div[1]/div[2]/div/span")).click();
String Cur= driver.getCurrentUrl();
Assertions.assertEquals(url, Cur);
driver.close();
System.out.println("Test01验证通过");
driver.quit();
}
/**
* 验证页面元素是否正常显示 (前提:已进行一轮抽奖的活动,共两轮抽奖)
*/
public void TestCase3(String originalWindowHandle) throws InterruptedException {
// 第二轮点击开始抽奖按钮
driver.findElement(By.xpath("//*[@id=\"container\"]/div[4]/span[2]")).click();
Assertions.assertNotNull(driver.findElement(By.xpath("//*[@id=\"container\"]/div[4]/span[2]")));
// 获取元素文本
String actualText = driver.findElement(By.xpath("//*[@id=\"container\"]/div[4]/span[2]")).getText();
//Assertions.assertEquals("点我确定", actualText);
Assertions.assertEquals("开始抽奖", actualText);
// 第三轮点击开始抽奖按钮
driver.findElement(By.xpath("//*[@id=\"container\"]/div[4]/span[2]")).click();
// 获取元素文本
actualText = driver.findElement(By.xpath("//*[@id=\"container\"]/div[4]/span[2]")).getText();
// 进行文本比较
Assertions.assertEquals("点我确定", actualText);
// 点我确定
driver.findElement(By.xpath("//*[@id=\"container\"]/div[4]/span[1]")).click();
actualText = driver.findElement(By.xpath("//*[@id=\"container\"]/div[4]/span[2]")).getText();
Assertions.assertEquals("已抽完,下一步", actualText);
actualText = driver.findElement(By.xpath("//*[@id=\"container\"]/div[4]/span[1]")).getText();
Assertions.assertEquals("查看上一奖项", actualText);
// 返回上一个页面
driver.close();
/**
* 测试用例:点击退出按钮 -跳转到登陆界面
*/
driver.switchTo().window(originalWindowHandle);
driver.findElement(By.xpath("/html/body/div[1]/div[2]/div/span")).click();
String Cur= driver.getCurrentUrl();
Assertions.assertEquals(url, Cur);
driver.close();
System.out.println("测试用例3结束");
driver.quit();
}
/**
*测试用例:验证已完成的抽奖活动
*/
public void TestCase2() throws InterruptedException {
//点击活动状态(正在进行中)
driver.findElement(By.xpath("//*[@id=\"activities\"]/div[1]/div[2]/p/a")).click();
Thread.sleep(1000);
//打印当前窗口句柄
String originalWindowHandle = driver.getWindowHandle();
System.out.println("原始窗口句柄: " + originalWindowHandle);
// 获取所有窗口句柄
java.util.Set<String> allWindowHandles = driver.getWindowHandles();
// 遍历句柄并切换到非原始窗口
for (String handle : allWindowHandles) {
if (!handle.equals(originalWindowHandle)) {
driver.switchTo().window(handle);
System.out.println("切换到新窗口: " + handle);
}
}
// 验证 查看奖项和开始抽奖按钮是否存在
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@id=\"container\"]/div[4]/span[1]")));
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@id=\"container\"]/div[4]/span[2]")));
// 验证图片
Assertions.assertNotNull(driver.findElement(By.xpath("//*[@id=\"image\"]")));
// 验证分享结果按钮/文字是否存在
WebElement text = wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@id=\"container\"]/div[4]/span[3]")));
Assertions.assertEquals("分享结果", text.getText());
// 返回上一个页面
driver.close();
/**
* 测试用例:点击退出按钮 -跳转到登陆界面
*/
driver.switchTo().window(originalWindowHandle);
driver.findElement(By.xpath("/html/body/div[1]/div[2]/div/span")).click();
String Cur= driver.getCurrentUrl();
Assertions.assertEquals(url, Cur);
driver.close();
System.out.println("测试用例02结束");
driver.quit();
}
}