测试计划(抽奖系统)

目录

相关链接

一、项目介绍❤️‍🔥

二、测试目的🩷

三、测试范围🧡

四、测试方法及工具💜

五、测试执行🩵

[5.1 Utils类](#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 自动化测试工具类,主要用于浏览器驱动的初始化和屏幕截图功能

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();

    }
}

动图效果演示:

相关推荐
Kookoos16 小时前
ABP VNext + GitHub Actions:CI/CD 全流程自动化
ci/cd·自动化·github·abp vnext
Stark-C16 小时前
nastools继任者?极空间部署影视自动化订阅系统『MediaMaster』
运维·自动化
OEC小胖胖19 小时前
前端性能优化“核武器”:新一代图片格式(AVIF/WebP)与自动化优化流程实战
前端·javascript·性能优化·自动化·web
PHOSKEY1 天前
3D工业相机是什么?如何选择和使用它?
数码相机·3d·自动化
中科岩创1 天前
武汉江滩某码头变形及应力自动化监测
人工智能·物联网·自动化
Feng.Lee1 天前
聊一聊接口测试编码和工具有哪些优缺点
功能测试·测试工具·可用性测试
666HZ6661 天前
从0到1入门测试
功能测试
Feng.Lee1 天前
聊聊数据和功能测试面临的挑战有哪些?
功能测试·测试工具·可用性测试
厦门辰迈智慧科技有限公司1 天前
高速公路自动化安全监测主要内容
运维·物联网·安全·自动化