当前位置: 首页 > news >正文

测试计划(抽奖系统)

目录

相关链接

一、项目介绍❤️‍🔥

二、测试目的🩷

三、测试范围🧡

四、测试方法及工具💜

五、测试执行🩵

5.1 Utils类 

 5.2测试登陆界面

代码实现: 

动画效果演示:

5.3测试活动中心界面

代码实现:

动图效果演示: 

 5.4测试活动列表界面

代码实现: 

动图效果演示:

 5.5测试创建活动界面

代码实现: 

动图效果演示:

 5.6测试奖品列表界面

代码实现: 

动图效果演示:

 5.7测试创建奖品界面

代码实现: 

动图效果演示:

 5.8测试人员列表页面

代码实现: 

动图效果演示:

 5.9测试注册用户页面

代码实现: 

动图效果演示:

5.10测试抽奖步骤界面

代码实现:

动图效果演示:


相关链接

抽奖系统代码: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. 分页查询大量记录时是否卡顿

四、测试方法及工具💜

  1. 使用selenum进行UI自动化测试
  2. 使用postman和jmeter进行接口自动化测试
  3. 使用Fiddler进行抓包验证

五、测试执行🩵

执行测试用例

架构设计 :

5.1 Utils类 

Utils 类是一个基于 Selenium 的 Web 自动化测试工具类,主要用于浏览器驱动的初始化和屏幕截图功能

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();//访问urldriver.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测试登陆界面

  • 是否能正常打开页面
  • 登录失败 所有用例
  • 登录成功 所有用例

代码实现: 

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://127.0.0.1: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);// 获取页面urlString 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测试活动中心界面

  • 成功登陆状态
  • 测试活动列表页面功能与元素
  • 测试创建活动页面功能与元素
  • 测试奖品列表页面功能与元素
  • 测试创建奖品页面功能与元素
  • 测试退出按钮功能

代码实现:

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 {// 活动中心页面urlprivate static final String url = "http://127.0.0.1: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(); //点击活动列表页//切换framedriver.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(); //点击创建活动页//切换framedriver.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(); //点击奖品列表页//切换framedriver.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(); //点击创建奖品//切换framedriver.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测试活动列表界面

  • 成功登陆状态
  • 测试活动列表页面功能与元素
  • 验证页面布局的合理性

  • 测试退出按钮功能

代码实现: 

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 {// urlprivate final static String url = "http://127.0.0.1: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(); //点击活动列表页//切换framedriver.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测试创建活动界面

  • 登陆状态-验证页面元素是否存在
  • 填选活动名称/活动描述-未圈选奖品/人员-点击创建活动按钮
  • 未填选活动名称/活动描述-点击创建活动按钮
  • 点击圈选奖品/人员按钮-预期弹出奖品/人员列表框-验证列表框内内容是否符合预期
  • 圈选奖品数量大于人员数量-点击创建活动按钮
  • 未圈选人员-点击创建活动按钮
  • 验证页面布局的合理性
  • 测试退出按钮功能

代码实现: 

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 {// urlprivate final static String url = "http://127.0.0.1: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测试奖品列表界面

  • 登陆状态-验证页面元素是否存在
  • 验证页面布局的合理性
  • 测试退出按钮功能

代码实现: 

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 {// urlprivate final static String url = "http://127.0.0.1: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测试创建奖品界面

  • 登陆状态-验证页面元素是否存在
  • 验证页面布局的合理性
  • 未输入奖品名称、奖品描述、奖品价格
  • 填写奖品名称、奖品描述、奖品价格、创建奖品
  • 测试退出按钮功能

代码实现: 

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 {// urlprivate final static String url = "http://127.0.0.1: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();//切换framedriver.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测试人员列表页面

  • 登陆状态-验证页面元素是否存在
  • 验证页面布局的合理性
  • 测试退出按钮功能

代码实现: 

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 {// urlprivate final static String url = "http://127.0.0.1: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]"))); //idAssertions.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测试注册用户页面

  • 均未填信息点击注册按钮
  • 输入不符合需求格式的手机号-其他信息均正确
  • 输入已注册的手机号-其他信息均正确
  • 输入不符需求格式的邮箱-其他信息均匀正确
  • 成功注册用户并跳转到人员列表页
  • 点击退出按钮-跳转到登陆界面

代码实现: 

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 {//urlprivate static final String url = "http://127.0.0.1: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]"))); //idAssertions.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测试抽奖步骤界面

  • 验证页面元素/整个抽奖步骤是否正常显示 (前提:未进行抽奖的活动共两轮抽奖)
  • 验证页面元素/整个抽奖步骤是否正常显示(前提:已进行一轮抽奖的活动,共两轮抽奖)
  • 点击退出按钮-跳转到登陆界面

代码实现:

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 {//urlprivate static final String url = "http://127.0.0.1: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();}
}

动图效果演示:

http://www.xdnf.cn/news/1149265.html

相关文章:

  • 考研复习-数据结构-第七章-查找
  • Linux“一切皆文件“设计哲学 与 Linux文件抽象层:struct file与file_operations的架构解析
  • 我做的基础服务项目,是如何实现 API 安全与限流的(短信、邮件、文件上传、钉钉通知)
  • Jenkins 实现项目的构建和发布
  • 企业运维实战:Jenkins 依赖 JDK21 与应用需 JDK1.8 共存方案(含流水线配置)
  • 【ExtendScript Toolkit CC】【PR插件开发】获取当前序列的所有剪辑片段名
  • Java 性能调优实战:JVM 参数配置与 GC 日志分析
  • 深度学习-线性神经网络
  • QCC系列显示交互层的自研技术突破与实践
  • 本地大模型部署工具全解析:LM Studio vs. Ollama 及最佳实践指南
  • 81、【OS】【Nuttx】【启动】caller-saved 和 callee-saved 示例:压栈内容
  • Mybatis学习之简介(一)
  • Django接口自动化平台实现(三)
  • 多式联运物流管理系统的设计与实现(原创)
  • picoCTF 2024: [[NoSQL]] Injection - Writeup
  • 【MATLAB例程】Taylor算法用于TOA(到达时间)的三维标签位置解算,可自适应基站数量。附下载链接
  • 一个基于阿里云的C端Java服务的整体项目架构
  • 后缀树:字符串处理的利器
  • 模型轻量化全指南:从剪枝量化到低配置设备部署实战
  • 【Linux】基本指令详解(三) 指令本质、三个查找指令、打包压缩、重要热键、linux体系结构、命令行解释器
  • Go-Redis × 向量检索实战用 HNSW 在 Redis 中索引与查询文本 Embedding(Hash JSON 双版本)
  • 智能光电检测:YOLO+OpenCV联合算法工程实践
  • 【运维】flash attention安装出现错误及编译慢
  • 思维链(CoT)技术全景:原理、实现与前沿应用深度解析
  • windows wsl2-06-docker hello world
  • 1.初始化
  • Windows原生环境配置Claude Code MCP(通过JSON)
  • 【MySQL笔记】视图
  • Spring AI 项目实战(十九):Spring Boot + AI + Vue3 + OSS + DashScope 构建多模态视觉理解平台(附完整源码)
  • mac 配置svn