【测试报告】学评一体化平台测试报告(功能测试、自动化测试、Bug描述)

学评一体化平台测试报告

一、报告概述

1.项目背景

学评一体化平台,是一款基于Web的在线测评平台,主要用于:创建和管理各类问卷及考试、组织在线问卷考试和练习、收集和分析调查数据、管理题库和试题资源。该系统面向教育机构、企业培训部门和市场调研机构,提供从问卷/考试创建、发布、答题到结果分析的全流程解决方案。

系统包含以下核心模块:

模块 功能
用户管理 注册、登录、权限控制
问卷/考试管理 创建、编辑、发布、统计分析
题库管理 试题创建、分类、导入导出
练习系统 错题管理、练习记录
模板管理 问卷/考试模板的创建添加共享
系统设置 界面风格、安全设置

2.测试目的

2.1 功能验证:

①确保所有核心功能符合需求规格说明书要求

②验证用户注册/登录流程的正确性

③确认问卷/考试创建、编辑、发布的完整流程

④检查题库管理和试题操作的功能完整性

⑤验证模板管理和共享功能的可用性

2.2 用户体验优化

①评估界面布局的合理性和易用性

②测试导航逻辑是否符合用户习惯

③验证错误提示信息的清晰度

④检查响应式设计在不同设备上的表现

2.3 系统稳定性保障

①评估系统在高并发场景下的稳定性

②测试长时间运行的性能表现

③验证异常情况(网络中断、服务器错误)下的系统行为

④检查数据一致性和完整性

2.4 安全性加固

①防止未授权访问和数据泄露

②验证用户认证和授权机制

③测试SQL注入、XSS等常见Web攻击防护

④检查敏感数据加密存储和传输

2.5 兼容性确认

①确保主流浏览器兼容性

②验证不同操作系统下的运行表现

③测试多种设备类型和分辨率的适配情况

3.测试环境

  • 操作系统 : Windows 11
  • 浏览器:Chrome、Edge
  • 测试工具:Selenium

二、测试用例

因为测试用例较多,把这个思维导图通过分次展开来展示。



三、手动功能测试系统

1.注册页面

1.1测试场景一:输入用户名、登录账号、密码、确认密码后进行注册

预期结果:注册成功跳转到登录页面可以正常登录跳转到问卷考试系统首页


1.2测试场景二:不输入用户名、但输入登陆账号、密码、确认密码后进行注册

预期结果:提示用户名是必填项

1.3测试场景三:输入了已经存在的账号进行注册

预期结果:提示账号已存在

1.4测试场景四:密码和密码确认时输入的不一致

预期结果:提示两次密码不一致

2.登录页面

2.1测试场景一:输入正确用户名和密码点击登录

预期结果:登录成功,直接跳转到问卷考试系统首页

2.2测试场景二:输入错误的用户名和密码点击登录

预期结果:提示错误的用户名和密码

2.3测试场景三:输入用户名但不输入密码点击登录

预期结果:提示密码是必填项

2.4测试场景四:不输入用户名但输入密码点击登录

预期结果:提示用户名是必填项

3.系统首页

3.1测试场景一:点击"创建问卷"按钮

预期结果:跳转到编辑问卷页面

3.2测试场景二:编辑好问卷后点击"保存"按钮

预期结果:提示保存成功,首页问卷数+1,可在我的项目中查看到新创建标题为"测试"的问卷


3.3测试场景三:点击"创考试卷"按钮

预期结果:跳转到编辑考试页面

3.4测试场景四:编辑好考试后点击"保存"按钮

预期结果:提示保存成功,首页考试数+1,可在我的项目中查看到新创建标题为"测试2"的考试。


4.页面设置

4.1测试场景一:点击页面右上方设置图标

预期结果:弹出选项栏

4.2测试场景二:点击"整体风格设置"按钮后更改为暗黑风格

预期结果:页面主题变为暗黑风格

4.3测试场景三:点击"退出登录"按钮

预期结果:直接跳转到登录页面

5.我的项目页面

5.1测试场景一:点击项目搜索框,输入已创建的项目名称

预期结果:显示搜索出的项目

5.2测试场景二:点击"新建"按钮

预期结果:弹出需要新建的项目选项栏

5.3测试场景三:点击"问卷调查"按钮

预期结果:跳转到编辑问卷页面

5.4测试场景四:点击"回收站"按钮

预期结果:弹出回收站页面

5.5测试场景五:选择好一个项目后点击"彻底删除"按钮

预期结果:弹出提示弹窗

5.6测试场景六:点击"删除"按钮

预期结果:选择的项目被删除

5.7测试场景七:点击一个项目

预期结果:跳转到项目的设置页面

5.8测试场景八:开启问卷后,点击"打开"按钮并作答

预期结果:跳转到正式问卷,可以作答并提交,提交后项目状态由未发布变为收集中

6.我的练习页面

6.1测试场景一:点击状态选择框,状态选择"正在进行"并且点击"查询"按钮

预期结果:查询显示出正在进行状态的练习

6.2测试场景二:点击状态选择框,状态选择"已完成"并且点击"查询"按钮

预期结果:查询显示出已完成状态的练习

6.3测试场景三:点击"重置"按钮

预期结果:状态选择框清空,下方显示全部我的练习

7.我的题库页面

7.1测试场景一:名称输入框输入题库名称,选择题库的类型,点击"查询"按钮

预期结果:查询出了符合条件的题库

7.2测试场景二:点击"重置"按钮

预期结果:名称输入框和类型选择框清空,下方题库列表中显示全部题库

7.3测试场景三:点击"新建"按钮

预期结果:弹出新增题库编辑页面

7.4测试场景四:编辑好题库后点击"确定"按钮

预期结果:题库列表新增了刚新建的名为"测试新增题库功能"的题库

7.5测试场景五:新建题库时未填写题库名称

预期结果:提示题库名称不能为空

7.6测试场景六:新建题库时未选择题库类型

预期结果:提示请选择题库类型

8.问题管理页面

8.1测试场景一:选择好类型和题型,输入要查询的问题名称,点击"查询"按钮

预期结果:查询出了符合条件的问题

8.2测试场景二:只选择要查询的问题类型,题型不选择,名称也不输入,点击"查询"按钮

预期结果:查询出了符合选择的问题类型条件的所有问题

8.3测试场景三:输入不存在错误的问题名称,点击"查询"按钮

预期结果:查询为空什么也不显示

8.4测试场景四:点击"重置"按钮

预期结果:类型、题型选项框和名称输入框清空,试题列表显示全部问题

9.模板广场页面

9.1测试场景一:点击"添加模板"按钮

预期结果:跳转到编辑模板页面

9.2测试场景二:编辑好模板后点击"保存"按钮

预期结果:可以在模板广场公有库看到新添加的名为"test_5"的模板

9.3测试场景三:点击模板搜索框输入已有模板名字(test_5),点击"搜模板"按钮

预期结果:搜索出并显示名为"test模板"的模板

实际结果:输入"test模板"点击"搜模板"按钮后,什么也没有搜索出来

Bug:"搜模板"按钮异常,搜模板功能失效

10.用户管理页面

10.1测试场景一:姓名输入框输入用户姓名后,点击"查询"按钮

预期结果:查询到此用户信息

10.2测试场景二:点击"重置"按钮

预期结果:姓名输入框清空,下面系统用户列表显示全部用户信息

10.3测试场景三:点击"新建"按钮

预期结果:弹出新建编辑用户信息页面

10.4测试场景四:编辑好新建用户信息,点击"确定"按钮

预期结果:用户列表中新增了刚创建的aab用户

10.5测试场景五:编辑新建用户信息时,登录名输入的是已存在的用户登录名

预期结果:提示登录名已存在

10.6测试场景六:编辑新建用户信息时,输入密码和确认密码两次输入的不一致

预期结果:提示两次输入的密码不一致

10.7测试场景七:编辑新建用户信息时,未输入用户名

预期结果:提示用户名不能为空

10.8测试场景八:编辑新建用户信息时,必选项状态未选择,点击"确定"按钮

预期结果:提示请选择状态

实际结果:成功创建了新用户aa,并且状态为激活

Bug:必选项状态未选也正常创建用户成功了

10.9测试场景九:点击"编辑"按钮

预期结果:弹出修改用户信息页面

10.10测试场景十:用户名修改为已存在的用户名admin

预期结果:提示用户名已存在

实际结果:成功创建出了用户名为admin的用户

Bug:用户名已存在不进行提示而且还可以正常创建

10.11测试场景十一:点击"重置密码"按钮进行重置密码

预期结果:修改成功

10.12测试场景十二:再次点击"重置密码"按钮进行重置密码,重置的新密码与旧密码相同

预期结果:提示新密码不能与旧密码相同

实际结果:新密码与旧密码相同不进行提示并且也可以修改成功

Bug:当新密码与旧密码相同时不进行提示并且也可以修改成功

11.个人设置页面

11.1测试场景一:基本设置信息全部填写后点击"提交"按钮

预期结果:提示更新基本信息成功

11.2测试场景二:基本信息不输入姓名

预期结果:提示请输入您的昵称

11.3测试场景三:基本信息不输入手机号

预期结果:提示请输入您的联系电话

11.4测试场景四:安全设置界面修改账户密码,点击"修改"按钮

预期结果:弹出修改密码页面弹窗

11.5测试场景五:输入旧密码、新密码和确认密码后,点击"修改"按钮

预期结果:提示密码修改成功

11.6测试场景六:旧密码未输入

预期结果:提示请输入密码

11.7测试场景七:输入旧密码,新密码和确认密码不一致

预期结果:提示两次密码输入不一致

11.8测试场景八:旧密码输入的不正确

预期结果:提示密码验证失败

11.9测试场景九:旧密码与新密码相同

预期结果:提示旧密码不能与新密码一致

实际结果:旧密码与新密码一致时,修改成功了

Bug:旧密码与新密码一致时没有提示和修改失败

四、自动化测试

1.驱动类

python 复制代码
import sys
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver import Keys
from selenium.webdriver.edge.service import Service
import datetime
import os


#创建一个浏览器对象
class Driver:
    driver = ""
    def __init__(self):
        options=webdriver.EdgeOptions()
        edge_driver_path=r"F:\Python\msedgedriver.exe"  # 修改为实际路径
        self.driver=webdriver.Edge(service=Service(edge_driver_path),options=options)
        # 添加窗口最大化
        self.driver.maximize_window()
        # self.driver.implicitly_wait(2)
        self.driver.implicitly_wait(3)  # 等待元素最多3秒
    def getScreenShot(self):
        #获取屏幕截图
        #当前的文件夹,格式:./2026-01-13
        driname = datetime.datetime.now().strftime("%Y-%m-%d")
        #判断是否存在,不存在则重新创建该文件夹
        if not os.path.exists("../images/"+driname):
            os.mkdir("../images/"+driname)
        #保存的图片路径:../images/2026-01-13/调用方法-2026-01-13-121708.png
        filename =sys._getframe().f_back.f_code.co_name+"-"+datetime.datetime.now().strftime("%Y-%m-%d-%H%M%S")+".png"
        self.driver.save_screenshot("../images/"+driname+"/"+filename)

        # 由于项目外层不是一个单纯的input标签,而是组件封装之后的,所以不能使用selenium中的clear()
        # 清空指定输入框的内容
    def my_clear(self, element):
        actions = ActionChains(self.driver)
        actions.click(element)  # 点击元素
        actions.key_down(Keys.CONTROL).send_keys("a").key_up(Keys.CONTROL)  # Ctrl+A
        actions.send_keys(Keys.DELETE)  # 删除
        actions.perform()  # 执行所有动作



QE_SystemDriver =Driver()

2.注册模块测试

python 复制代码
#测试问卷考试系统的"注册"页面及功能


from selenium.webdriver.common.by import By
# import time
from common.Utils import QE_SystemDriver




class QE_SystemRegister:
    url = ""
    driver = ""
    def __init__(self):
        self.url = "http://49.235.61.184:8080/user/login"
        self.driver = QE_SystemDriver.driver
        self.driver.get(self.url)
        # time.sleep(3)

    # 测试"注册"的页面元素
    def RegisterInterface(self):
        # 首先点击"注册"按钮
        self.driver.find_element(By.CSS_SELECTOR, '#root > div > div.content___2zk1- > div.main___x4OjT > div > form > div:nth-child(4) > a').click()
        # time.sleep(3)
        # 用户名输入框
        self.driver.find_element(By.CSS_SELECTOR, "#name")
        # 昵称输入框
        self.driver.find_element(By.CSS_SELECTOR, "#username")
        # 密码输入框
        self.driver.find_element(By.CSS_SELECTOR,"#password" )
        # 密码确认输入框
        self.driver.find_element(By.CSS_SELECTOR, "#rePassword")
        # "注册账户"按钮
        self.driver.find_element(By.CSS_SELECTOR, "#root > div > div.content___1k5Ro > div.main___19HXK > div > form > button")
        # "返回登录"按钮
        self.driver.find_element(By.CSS_SELECTOR, "#root > div > div.content___1k5Ro > div.main___19HXK > div > form > div:nth-child(6) > a")
        # 添加屏幕截图
        QE_SystemDriver.getScreenShot()


    # 注册成功测试用例
    def RegisterSucTest(self):
        #清空输入框里面的内容
        QE_SystemDriver.my_clear(self.driver.find_element(By.CSS_SELECTOR, "#name"))
        QE_SystemDriver.my_clear(self.driver.find_element(By.CSS_SELECTOR, "#username"))
        QE_SystemDriver.my_clear(self.driver.find_element(By.CSS_SELECTOR, "#password"))
        QE_SystemDriver.my_clear(self.driver.find_element(By.CSS_SELECTOR, "#rePassword"))
        #输入未注册的用户名,账号,输入密码,点击"注册账户"
        self.driver.find_element(By.CSS_SELECTOR, "#name").send_keys("88899")
        self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("888899")
        self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("888888")
        self.driver.find_element(By.CSS_SELECTOR, "#rePassword").send_keys("888888")
        self.driver.find_element(By.CSS_SELECTOR, "#root > div > div.content___1k5Ro > div.main___19HXK > div > form > button").click()
        #如果在点击"注册账户"后,跳转回登录页面,说明注册成功
        self.driver.find_element(By.CSS_SELECTOR, "#root > div > div.content___2zk1- > div.main___x4OjT > div > form")
        # time.sleep(3)
        #添加屏幕截图
        QE_SystemDriver.getScreenShot()
        print(f"注册成功!")


    #注册失败测试用例
    def RegisterFailTest(self):
        # 第一个情况,使用已经注册过的账号
        # 登录成功之后,此时会返回登录页面,需要点击"注册账户"按钮
        self.driver.find_element(By.CSS_SELECTOR, '#root > div > div.content___2zk1- > div.main___x4OjT > div > form > div:nth-child(4) > a').click()
        #清空输入框里面的内容
        QE_SystemDriver.my_clear(self.driver.find_element(By.CSS_SELECTOR, "#name"))
        QE_SystemDriver.my_clear(self.driver.find_element(By.CSS_SELECTOR, "#username"))
        QE_SystemDriver.my_clear(self.driver.find_element(By.CSS_SELECTOR, "#password"))
        QE_SystemDriver.my_clear(self.driver.find_element(By.CSS_SELECTOR, "#rePassword"))
        # 输入注册过的用户名,账号,输入密码,点击"注册账户"
        self.driver.find_element(By.CSS_SELECTOR, "#name").send_keys("888888")
        self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("888888")
        self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("888888")
        self.driver.find_element(By.CSS_SELECTOR, "#rePassword").send_keys("888888")
        self.driver.find_element(By.CSS_SELECTOR,"#root > div > div.content___1k5Ro > div.main___19HXK > div > form > button").click()
        # 如果在点击"注册账户"后,未跳转回登录页面,出现"账号已存在",说明注册失败
        self.driver.find_element(By.CSS_SELECTOR, "#root > div > div.content___1k5Ro > div.main___19HXK > div > form > div.ant-alert.ant-alert-error")
        # time.sleep(3)
        # 添加屏幕截图
        QE_SystemDriver.getScreenShot()
        print(f"注册失败1!")

        #第二个情况,输入两次密码不一致
        #清空输入框里面的内容
        QE_SystemDriver.my_clear(self.driver.find_element(By.CSS_SELECTOR, "#name"))
        QE_SystemDriver.my_clear(self.driver.find_element(By.CSS_SELECTOR, "#username"))
        QE_SystemDriver.my_clear(self.driver.find_element(By.CSS_SELECTOR, "#password"))
        QE_SystemDriver.my_clear(self.driver.find_element(By.CSS_SELECTOR, "#rePassword"))
        # 输入注册过的账号,输入用户、密码,两次密码不一致,点击"注册账户"
        self.driver.find_element(By.CSS_SELECTOR, "#name").send_keys("888888")
        self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("888888")
        self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("888888")
        self.driver.find_element(By.CSS_SELECTOR, "#rePassword").send_keys("8888889")
        self.driver.find_element(By.CSS_SELECTOR,"#root > div > div.content___1k5Ro > div.main___19HXK > div > form > button").click()
        # 如果在点击或者未点击"注册账户"后,出现"两次密码不一致",说明注册失败
        self.driver.find_element(By.CSS_SELECTOR, "#rePassword_help > div")
        # 添加屏幕截图
        QE_SystemDriver.getScreenShot()
        print(f"注册失败2!")
# # 单个模块测试时可用下面代码
# Register=QE_SystemRegister()
# Register.RegisterInterface()
# Register.RegisterSucTest()
# Register.RegisterFailTest()

3.登录模块测试

python 复制代码
# 测试问卷考试系统的"登录"页面及功能

from selenium.webdriver.common.by import By
import time
from common.Utils import QE_SystemDriver

class QE_SystemLogin:
    url = ""
    driver = ""
    def __init__(self):
        self.url = "http://49.235.61.184:8080/user/login"
        self.driver = QE_SystemDriver.driver
        self.driver.get(self.url)
        # time.sleep(3)
    # 测试页面元素
    def LoginInterfaceTest(self):
        # 账号输入框
        self.driver.find_element(By.CSS_SELECTOR, "#username")
        # 密码输入框
        self.driver.find_element(By.CSS_SELECTOR, "#password")
        # "登录"按钮
        self.driver.find_element(By.CSS_SELECTOR, "#root > div > div.content___2zk1- > div.main___x4OjT > div > form > button")
        # time.sleep(2)

    # 登录成功测试用例
    def LoginSucTest(self):
        #首先清空昵称输入框和密码输入框
        QE_SystemDriver.my_clear(self.driver.find_element(By.CSS_SELECTOR, "#username"))
        QE_SystemDriver.my_clear(self.driver.find_element(By.CSS_SELECTOR, "#password"))
        # 正确的账号,正确的密码,点击"登录"
        self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("888888")
        self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("888888")
        self.driver.find_element(By.CSS_SELECTOR, "#root > div > div.content___2zk1- > div.main___x4OjT > div > form > button").click()
        # 如果出现个人昵称,这说明登录成功
        self.driver.find_element(By.CSS_SELECTOR, "#sk-layout > div > div > section > div.ant-pro-layout-container > header.ant-layout-header.ant-pro-layout-header.ant-pro-layout-header-fixed-header.ant-pro-layout-header-mix.ant-pro-layout-header-header > div > div.ant-pro-global-header-right-content > div > div > div > span > div")
        # 添加屏幕截图
        QE_SystemDriver.getScreenShot()
        print(f"登录成功!")
        # # 退出网站
        # self.driver.quit()

    # 登录失败测试用例
    def LoginFailTest(self):
        time.sleep(5)
        # 首先返回登录页面
        self.driver.back()
        # 先清空昵称输入框和密码输入框
        QE_SystemDriver.my_clear(self.driver.find_element(By.CSS_SELECTOR, "#username"))
        QE_SystemDriver.my_clear(self.driver.find_element(By.CSS_SELECTOR, "#password"))
        # 错误的账号,错误的密码,点击"登录"
        self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("ad")
        self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("12345")
        self.driver.find_element(By.CSS_SELECTOR,"#root > div > div.content___2zk1- > div.main___x4OjT > div > form > button").click()
        # 如果出现错误信息提示,这说明登录失败
        self.driver.find_element(By.CSS_SELECTOR,"#root > div > div.content___2zk1- > div.main___x4OjT > div > form > div.ant-alert.ant-alert-error > div > div")
        # 添加屏幕截图
        QE_SystemDriver.getScreenShot()
        print(f"登录失败1!")

        # 第二个情况
        # 先清空昵称输入框和密码输入框
        QE_SystemDriver.my_clear(self.driver.find_element(By.CSS_SELECTOR, "#username"))
        QE_SystemDriver.my_clear(self.driver.find_element(By.CSS_SELECTOR, "#password"))
        # 错误的账号,正确的密码,点击"登录"
        self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("ad")
        self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")
        self.driver.find_element(By.CSS_SELECTOR, "#root > div > div.content___2zk1- > div.main___x4OjT > div > form > button").click()
        # 如果出现错误信息提示,这说明登录失败
        self.driver.find_element(By.CSS_SELECTOR, "#root > div > div.content___2zk1- > div.main___x4OjT > div > form > div.ant-alert.ant-alert-error > div > div")
        # 添加屏幕截图
        QE_SystemDriver.getScreenShot()
        print(f"登录失败2!")

        #第三个情况
        # 先清空昵称输入框和密码输入框
        QE_SystemDriver.my_clear(self.driver.find_element(By.CSS_SELECTOR, "#username"))
        QE_SystemDriver.my_clear(self.driver.find_element(By.CSS_SELECTOR, "#password"))
        # 正确的账号,错误的密码,点击"登录"
        self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("admin")
        self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("12345")
        self.driver.find_element(By.CSS_SELECTOR,"#root > div > div.content___2zk1- > div.main___x4OjT > div > form > button").click()
        # 如果出现错误信息提示,这说明登录失败
        self.driver.find_element(By.CSS_SELECTOR, "#root > div > div.content___2zk1- > div.main___x4OjT > div > form > div.ant-alert.ant-alert-error > div > div")
        # 添加屏幕截图
        QE_SystemDriver.getScreenShot()
        print(f"登录失败3!")
        # # 退出网站
        # self.driver.quit()


# # 单个模块测试时可用下面代码
# Login=QE_SystemLogin()
# Login.LoginInterfaceTest()
# Login.LoginSucTest()
# Login.LoginFailTest()
# Login.LoginSucTest()

4.首页功能测试

python 复制代码
from selenium.webdriver.common.by import By
# import time
from common.Utils import QE_SystemDriver


class QE_SystemHome:
    url = ""
    driver = ""
    def __init__(self):
        self.url = "http://49.235.61.184:8080/home"
        self.driver = QE_SystemDriver.driver
        self.driver.get(self.url)
        # time.sleep(3)

    # 测试"首页"的页面元素
    def HomeInterfaceTest(self):

        # 检查首页标题元素
        self.driver.find_element(By.CSS_SELECTOR,"#sk-layout > div > div > section > div.ant-pro-layout-container > main > div > div.ant-page-header.ant-pro-page-container-warp-page-header.ant-pro-page-container-warp-page-header.ant-page-header-has-breadcrumb.ant-page-header-ghost > div.ant-page-header-heading > div")
        # 检查问卷数元素
        self.driver.find_element(By.CSS_SELECTOR,"#sk-layout > div > div > section > div.ant-pro-layout-container > main > div > div.ant-page-header.ant-pro-page-container-warp-page-header.ant-pro-page-container-warp-page-header.ant-page-header-has-breadcrumb.ant-page-header-ghost > div.ant-page-header-content > div > div > div > div > div > div.extraContent___3rMo7 > div:nth-child(1) > div > div.ant-statistic-title")
        # 检查考试数元素
        self.driver.find_element(By.CSS_SELECTOR,"#sk-layout > div > div > section > div.ant-pro-layout-container > main > div > div.ant-page-header.ant-pro-page-container-warp-page-header.ant-pro-page-container-warp-page-header.ant-page-header-has-breadcrumb.ant-page-header-ghost > div.ant-page-header-content > div > div > div > div > div > div.extraContent___3rMo7 > div:nth-child(2) > div > div.ant-statistic-title")
        # 检查我的考试按钮
        self.driver.find_element(By.CSS_SELECTOR, "#rc-tabs-0-tab-exam")
        # 检查我的问卷按钮
        self.driver.find_element(By.CSS_SELECTOR,"#rc-tabs-0-tab-survey")
        # 检查问卷记录按钮
        self.driver.find_element(By.CSS_SELECTOR,"#rc-tabs-0-tab-surveyHistory")
        # 检查考试记录按钮
        self.driver.find_element(By.CSS_SELECTOR,"#rc-tabs-0-tab-examHistory")
        # 检查创建问卷按钮
        self.driver.find_element(By.CSS_SELECTOR,"#sk-layout > div > div > section > div.ant-pro-layout-container > main > div > div.ant-pro-grid-content > div > div > div > div.ant-col.ant-col-xs-24.ant-col-sm-24.ant-col-md-24.ant-col-lg-24.ant-col-xl-8 > div > div.ant-card-body > div > a:nth-child(1)")
        # 检查创建考试按钮
        self.driver.find_element(By.CSS_SELECTOR,"#sk-layout > div > div > section > div.ant-pro-layout-container > main > div > div.ant-pro-grid-content > div > div > div > div.ant-col.ant-col-xs-24.ant-col-sm-24.ant-col-md-24.ant-col-lg-24.ant-col-xl-8 > div > div.ant-card-body > div > a:nth-child(2)")
        #添加屏幕截图
        QE_SystemDriver.getScreenShot()
        print(f"首页元素检测完毕!")

# # 单个模块测试时可用下面代码
# Home=QE_SystemHome()
# Home.HomeInterfaceTest()

5.我的项目页面功能测试

python 复制代码
# 测试问卷考试系统的"我的项目"页面及功能
from selenium.webdriver.common.by import By
import time
from common.Utils import QE_SystemDriver

#1.测试问卷考试系统我的项目页面
class QE_SystemProjectTest:
    url = ""
    driver = ""
    def __init__(self):
        self.url = "http://49.235.61.184:8080/project"
        self.driver = QE_SystemDriver.driver
        self.driver.get(self.url)

    #进行页面元素的查找检查
    def ProjectInterfaceTest(self):
        #检查页面标题元素
        self.driver.find_element(By.CSS_SELECTOR, "#sk-layout > div > div > section > div.ant-pro-layout-container > main > div > div.ant-page-header.ant-pro-page-container-warp-page-header.ant-pro-page-container-warp-page-header.ant-page-header-has-breadcrumb.ant-page-header-ghost > div.ant-page-header-heading > div > span")
        #检查新建按钮
        self.driver.find_element(By.CSS_SELECTOR, "#sk-layout > div > div > section > div.ant-pro-layout-container > main > div > div.ant-page-header.ant-pro-page-container-warp-page-header.ant-pro-page-container-warp-page-header.ant-page-header-has-breadcrumb.ant-page-header-ghost > div.ant-page-header-heading > span > div > div > button")
        #检查搜索框
        self.driver.find_element(By.CSS_SELECTOR, "#sk-layout > div > div > section > div.ant-pro-layout-container > main > div > div.ant-page-header.ant-pro-page-container-warp-page-header.ant-pro-page-container-warp-page-header.ant-page-header-has-breadcrumb.ant-page-header-ghost > div.ant-page-header-content > div > div > div > div > div > div > div > span > span > input")
        #检查搜索按钮
        self.driver.find_element(By.CSS_SELECTOR, "#sk-layout > div > div > section > div.ant-pro-layout-container > main > div > div.ant-page-header.ant-pro-page-container-warp-page-header.ant-pro-page-container-warp-page-header.ant-page-header-has-breadcrumb.ant-page-header-ghost > div.ant-page-header-content > div > div > div > div > div > div > div > span > span > span > button > span > svg")
        #添加屏幕截图
        QE_SystemDriver.getScreenShot()
        print(f""我的项目"元素检测完毕!")


    #2.测试"新建"功能及"项目查询"功能
    def ProjectFunctionTest(self):
        time.sleep(5)
        #测试用例一:2.1测试新建"问卷调查"功能
        # 2.1.1测试'新建'功能
        #点击新建"新建"
        self.driver.find_element(By.CSS_SELECTOR,
                                 "#sk-layout > div > div > section > div.ant-pro-layout-container > main > div > div.ant-page-header.ant-pro-page-container-warp-page-header.ant-pro-page-container-warp-page-header.ant-page-header-has-breadcrumb.ant-page-header-ghost > div.ant-page-header-heading > span > div > div > button").click()
        time.sleep(1)
        #点击新建"问卷调查"
        self.driver.find_element(By.CSS_SELECTOR,
                                 "body > div:nth-child(7) > div > div > ul > li:nth-child(2) > span").click()
        time.sleep(1)
        #点击保存按钮
        self.driver.find_element(By.CSS_SELECTOR, "#editor > div.survey-main-panel > div.survey-main-panel-toolbar > div:nth-child(2) > div > button.ant-btn.ant-btn-primary.ant-btn-sm").click()
        # 添加屏幕截图
        QE_SystemDriver.getScreenShot()
        #返回到项目页面
        self.driver.back()
        self.driver.back()
        time.sleep(1)
        #添加屏幕截图
        QE_SystemDriver.getScreenShot()

        #2.1.2测试"项目查询"功能
        self.driver.find_element(By.XPATH, "/html/body/div[1]/div/div/div/section/div[2]/main/div/div[1]/div[2]/div/div/div/div/div/div/div/span/span/input").send_keys("请输入标题")
        #添加屏幕截图
        QE_SystemDriver.getScreenShot()
        time.sleep(1)
        #点击查询按钮
        self.driver.find_element(By.XPATH, "/html/body/div[1]/div/div/div/section/div[2]/main/div/div[1]/div[2]/div/div/div/div/div/div/div/span/span/span/button").click()
        time.sleep(1)
        # 添加屏幕截图
        QE_SystemDriver.getScreenShot()
        #检查是否查询成功同时验证刚刚新建功能是否保存成功
        actual = self.driver.find_element(By.XPATH, "/html/body/div[1]/div/div/div/section/div[2]/main/div/div[2]/div/div/div/div[1]/div/div/div/div[1]/div/div/div/div/div/div[1]/span[1]").text
        print(f"提示信息: {actual}")
        #添加屏幕截图
        QE_SystemDriver.getScreenShot()
        #断言检测一下是否符合预期
        assert actual == "请输入标题"
        print(f""新建问卷调查"功能检测完毕!")


        #测试用例二:3.测试新建"在线考试"功能
        # 3.1点击新建"新建"
        self.driver.find_element(By.CSS_SELECTOR,
                                 "#sk-layout > div > div > section > div.ant-pro-layout-container > main > div > div.ant-page-header.ant-pro-page-container-warp-page-header.ant-pro-page-container-warp-page-header.ant-page-header-has-breadcrumb.ant-page-header-ghost > div.ant-page-header-heading > span > div > div > button").click()
        time.sleep(1)
        # 点击新建"在线考试"
        self.driver.find_element(By.CSS_SELECTOR,
                                 "body > div:nth-child(9) > div > div > ul > li:nth-child(3) > span").click()
        time.sleep(5)
        # 点击保存按钮
        self.driver.find_element(By.XPATH, "/html/body/div[1]/div/div[2]/div/div[2]/div[1]/div[2]/div/button[5]").click()
        time.sleep(5)
        #添加屏幕截图
        QE_SystemDriver.getScreenShot()
        #返回到项目页面
        self.driver.back()
        self.driver.back()
        time.sleep(2)
        #添加屏幕截图
        QE_SystemDriver.getScreenShot()

        #3.2测试"项目查询"功能
        self.driver.find_element(By.CSS_SELECTOR, "#sk-layout > div > div > section > div.ant-pro-layout-container > main > div > div.ant-page-header.ant-pro-page-container-warp-page-header.ant-pro-page-container-warp-page-header.ant-page-header-has-breadcrumb.ant-page-header-ghost > div.ant-page-header-content > div > div > div > div > div > div > div > span > span > input").send_keys("考试名称")
        #添加屏幕截图
        QE_SystemDriver.getScreenShot()
        #点击查询按钮
        self.driver.find_element(By.CSS_SELECTOR, "#sk-layout > div > div > section > div.ant-pro-layout-container > main > div > div.ant-page-header.ant-pro-page-container-warp-page-header.ant-pro-page-container-warp-page-header.ant-page-header-has-breadcrumb.ant-page-header-ghost > div.ant-page-header-content > div > div > div > div > div > div > div > span > span > span > button > span > svg").click()
        # 添加屏幕截图
        QE_SystemDriver.getScreenShot()
        #检查是否查询成功同时验证刚刚新建功能是否保存成功
        actual = self.driver.find_element(By.CSS_SELECTOR, "#sk-layout > div > div > section > div.ant-pro-layout-container > main > div > div.ant-pro-grid-content > div > div > div > div.ant-list.ant-list-split.ant-list-grid.survey-home-content > div > div > div > div > div > div > div > div > div > div.card-header > span.survey-title").text
        print(f"项目名称: {actual}")
        #添加屏幕截图
        QE_SystemDriver.getScreenShot()
        #断言检测一下是否符合预期
        assert actual == "考试名称"
        print(f""在线考试"功能检测完毕!")

# project = QE_SystemProjectTest()
# project.ProjectInterfaceTest()
# project.ProjectFunctionTest()
#
# # 指定浏览器的退出
# QE_SystemDriver.driver.quit()

6.我的题库页面功能测试

python 复制代码
import time
from selenium.webdriver.common.by import By

from common.Utils import QE_SystemDriver

#测试问卷考试系统"我的题库"页面

class QE_SystemQuestionTest:
    url = ""
    driver = ""
    def __init__(self):
        self.url = "http://49.235.61.184:8080/repo/index"
        self.driver = QE_SystemDriver.driver
        self.driver.get(self.url)

    #1.进行页面元素的查找检查
    def QuestionCheckElement(self):
        #检查名称输入标签
        self.driver.find_element(By.CSS_SELECTOR, "#sk-layout > div > div > section > div.ant-pro-layout-container > main > div > div.ant-pro-grid-content > div > div > div > div.ant-pro-card.ant-pro-table-search.ant-pro-table-search-query-filter > form > div > div:nth-child(1) > div > div > div.ant-col.ant-form-item-label > label")
        #检查名称输入框
        self.driver.find_element(By.CSS_SELECTOR, "#sk-layout > div > div > section > div.ant-pro-layout-container > main > div > div.ant-pro-grid-content > div > div > div > div.ant-pro-card.ant-pro-table-search.ant-pro-table-search-query-filter > form > div > div:nth-child(1) > div > div > div.ant-col.ant-form-item-control > div > div > span")
        #检查类型选择框标签
        self.driver.find_element(By.CSS_SELECTOR, "#sk-layout > div > div > section > div.ant-pro-layout-container > main > div > div.ant-pro-grid-content > div > div > div > div.ant-pro-card.ant-pro-table-search.ant-pro-table-search-query-filter > form > div > div:nth-child(2)")
        #检查重置按钮
        self.driver.find_element(By.CSS_SELECTOR, "#sk-layout > div > div > section > div.ant-pro-layout-container > main > div > div.ant-pro-grid-content > div > div > div > div.ant-pro-card.ant-pro-table-search.ant-pro-table-search-query-filter > form > div > div:nth-child(3) > div > div > div.ant-col.ant-form-item-control > div > div > div > div > div > div:nth-child(1) > button")
        #检查查询按钮
        self.driver.find_element(By.CSS_SELECTOR, "#sk-layout > div > div > section > div.ant-pro-layout-container > main > div > div.ant-pro-grid-content > div > div > div > div.ant-pro-card.ant-pro-table-search.ant-pro-table-search-query-filter > form > div > div:nth-child(3) > div > div > div.ant-col.ant-form-item-control > div > div > div > div > div > div:nth-child(2) > button")
        #检查新建按钮
        self.driver.find_element(By.CSS_SELECTOR, "#sk-layout > div > div > section > div.ant-pro-layout-container > main > div > div.ant-pro-grid-content > div > div > div > div:nth-child(2) > div > div.ant-pro-table-list-toolbar > div > div.ant-space.ant-space-horizontal.ant-space-align-center.ant-pro-table-list-toolbar-right > div:nth-child(1) > div > div:nth-child(1) > button")
        #检查导出按钮
        # self.driver.find_element(By.CSS_SELECTOR, "#sk-layout > div > div > section > div.ant-pro-layout-container > main > div > div.ant-pro-grid-content > div > div > div > div:nth-child(2) > div > div.ant-pro-table-list-toolbar > div > div.ant-space.ant-space-horizontal.ant-space-align-center.ant-pro-table-list-toolbar-right > div:nth-child(1) > div > div:nth-child(2) > button")
        #检查题库列表
        self.driver.find_element(By.CSS_SELECTOR, "#sk-layout > div > div > section > div.ant-pro-layout-container > main > div > div.ant-pro-grid-content > div > div > div > div:nth-child(2) > div > div.ant-pro-table-list-toolbar > div > div.ant-pro-table-list-toolbar-left > div")
        #检查文本导入按钮
        self.driver.find_element(By.CSS_SELECTOR, "#sk-layout > div > div > section > div.ant-pro-layout-container > main > div > div.ant-pro-grid-content > div > div > div > div:nth-child(2) > div > div.ant-table-wrapper > div > div > div > div > div > table > tbody > tr:nth-child(2) > td:nth-child(9) > div > div:nth-child(1) > a")
        #检查试题管理按钮
        self.driver.find_element(By.CSS_SELECTOR, "#sk-layout > div > div > section > div.ant-pro-layout-container > main > div > div.ant-pro-grid-content > div > div > div > div:nth-child(2) > div > div.ant-table-wrapper > div > div > div > div > div > table > tbody > tr:nth-child(2) > td:nth-child(9) > div > div:nth-child(3) > a")

        #添加屏幕截图
        QE_SystemDriver.getScreenShot()
        print(f"题库1检测完毕!")



    #2.功能测试
    def QuestionFunctionTest(self):

        #2.1测试新建功能

        #点击新建按钮
        self.driver.find_element(By.CSS_SELECTOR, "#sk-layout > div > div > section > div.ant-pro-layout-container > main > div > div.ant-pro-grid-content > div > div > div > div:nth-child(2) > div > div.ant-pro-table-list-toolbar > div > div.ant-space.ant-space-horizontal.ant-space-align-center.ant-pro-table-list-toolbar-right > div:nth-child(1) > div > div:nth-child(1) > button").click()
        # 添加屏幕截图
        QE_SystemDriver.getScreenShot()
        #输入题库名称

        # 切换到点击新建之后的页面之中,因为新建之后的页面里面的元素的id和没点击新建的时候的元素是一样的,所以要限制一下查找元素的范围
        drawer = self.driver.find_element(By.CLASS_NAME,"ant-drawer-wrapper-body")
        #后续使用drawer 进行查找元素操作,意思就是在ant-drawer-body元素范围内进行查找元素
        drawer.find_element(By.CSS_SELECTOR, "#name").send_keys("测试新增题库功能")
        # 添加屏幕截图
        QE_SystemDriver.getScreenShot()
        time.sleep(3)
        #选择题库类型
        drawer.find_element(By.CSS_SELECTOR, "#mode").click()
        time.sleep(1)
        # 添加屏幕截图
        QE_SystemDriver.getScreenShot()
        #选择问卷
        select_option= drawer.find_element(By.CLASS_NAME,"rc-virtual-list-holder-inner")
        option = select_option.find_element(By.XPATH,f'.//div[@title="问卷"]')
        self.driver.execute_script("arguments[0].scrollIntoView(true);",option)
        self.driver.execute_script("arguments[0].click();", option)
        # 这里并不是一个select组件,不能直接使用Select
        time.sleep(2)
        # 添加屏幕截图
        QE_SystemDriver.getScreenShot()
        time.sleep(1)
        #点击确定按钮
        drawer.find_element(By.XPATH, "/html/body/div[4]/div/div[3]/div/div/div[3]/div/div/div[2]/button").click()
        # 添加屏幕截图
        QE_SystemDriver.getScreenShot()
        #检查是否回到题库列表页面,如果是则创建题库成功,否则创建失败
        self.driver.find_element(By.CSS_SELECTOR, "#sk-layout > div > div > section > div.ant-pro-layout-container > main > div > div.ant-pro-grid-content > div > div > div > div.ant-pro-card.ant-pro-table-search.ant-pro-table-search-query-filter > form > div > div:nth-child(3) > div > div > div.ant-col.ant-form-item-control > div > div > div > div > div > div:nth-child(2) > button")
        # 添加屏幕截图
        QE_SystemDriver.getScreenShot()
        print(f"题库2检测完毕!")


        #2.2测试查询功能

        #名称输入框输入题库名称"测试新增题库功能"
        self.driver.find_element(By.CSS_SELECTOR, "#name").send_keys("测试新增题库功能")
        # 添加屏幕截图
        QE_SystemDriver.getScreenShot()
        #点击查询按钮
        self.driver.find_element(By.CSS_SELECTOR, "#sk-layout > div > div > section > div.ant-pro-layout-container > main > div > div.ant-pro-grid-content > div > div > div > div.ant-pro-card.ant-pro-table-search.ant-pro-table-search-query-filter > form > div > div:nth-child(3) > div > div > div.ant-col.ant-form-item-control > div > div > div > div > div > div:nth-child(2) > button").click()
        time.sleep(1)
        # 添加屏幕截图
        QE_SystemDriver.getScreenShot()
        #验证是否查询到,如果题库列表有输出则查询成功,否则查询失败
        self.driver.find_element(By.CSS_SELECTOR, "#sk-layout > div > div > section > div.ant-pro-layout-container > main > div > div.ant-pro-grid-content > div > div > div > div:nth-child(2) > div > div.ant-table-wrapper > div > div > div > div > div > table > tbody > tr.ant-table-row.ant-table-row-level-0 > td:nth-child(1) > div")
        time.sleep(1)
        # 添加屏幕截图
        QE_SystemDriver.getScreenShot()
        print(f"题库3检测完毕!")

        #2.3测试重置功能

        #点击重置按钮
        self.driver.find_element(By.CSS_SELECTOR, "#sk-layout > div > div > section > div.ant-pro-layout-container > main > div > div.ant-pro-grid-content > div > div > div > div.ant-pro-card.ant-pro-table-search.ant-pro-table-search-query-filter > form > div > div:nth-child(3) > div > div > div.ant-col.ant-form-item-control > div > div > div > div > div > div:nth-child(1) > button").click()
        time.sleep(1)
        # 添加屏幕截图
        QE_SystemDriver.getScreenShot()
        #验证是否重置成功,如果名称输入框为空则代表重置成功,否则重置失败
        actual = self.driver.find_element(By.CSS_SELECTOR, "#name").text
        # 添加屏幕截图
        QE_SystemDriver.getScreenShot()
        # 断言检测一下是否符合预期
        assert actual == ""
        print(f"题库4检测完毕!")

# question = QE_QuestionTest()
# question.QuestionCheckElement()
# question.QuestionFunctionTest()

# 指定浏览器的退出
# QE_SystemDriver.driver.quit()

7.个人设置页面功能测试

python 复制代码
import time
from selenium.webdriver.common.by import By

from common.Utils import QE_SystemDriver

#测试问卷考试系统"个人设置"页面

class QE_SystemPersonalTest:
    url = ""
    driver = ""
    def __init__(self):
        self.url = "http://49.235.61.184:8080/system/setting"
        self.driver = QE_SystemDriver.driver
        self.driver.get(self.url)

    #1.进行页面元素的查找检查
    def PersonalCheckElement(self):
        # 检查页面标题
        self.driver.find_element(By.CSS_SELECTOR, "#sk-layout > div > div > section > div.ant-pro-layout-container > main > div > div > div > div.right___2jdGg > div.title___3cGwa")
        # 检查更换头像按钮
        self.driver.find_element(By.CSS_SELECTOR, "#sk-layout > div > div > section > div.ant-pro-layout-container > main > div > div > div > div.right___2jdGg > div.baseView___3sRG3 > div.right___3-EXe > span > div > span > div > button")
        # 检查姓名标签
        self.driver.find_element(By.CSS_SELECTOR, "#sk-layout > div > div > section > div.ant-pro-layout-container > main > div > div > div > div.right___2jdGg > div.baseView___3sRG3 > div.left___GavW0 > form > div:nth-child(2) > div > div.ant-col.ant-form-item-label > label")
        # 检查姓名输入框
        self.driver.find_element(By.CSS_SELECTOR, "#sk-layout > div > div > section > div.ant-pro-layout-container > main > div > div > div > div.right___2jdGg > div.baseView___3sRG3 > div.left___GavW0 > form > div:nth-child(2) > div > div.ant-col.ant-form-item-control > div > div > span")
        # 检查手机号标签
        self.driver.find_element(By.CSS_SELECTOR, "#sk-layout > div > div > section > div.ant-pro-layout-container > main > div > div > div > div.right___2jdGg > div.baseView___3sRG3 > div.left___GavW0 > form > div:nth-child(3) > div > div.ant-col.ant-form-item-label > label")
        # 检查手机号输入框
        self.driver.find_element(By.CSS_SELECTOR, "#sk-layout > div > div > section > div.ant-pro-layout-container > main > div > div > div > div.right___2jdGg > div.baseView___3sRG3 > div.left___GavW0 > form > div:nth-child(3) > div > div.ant-col.ant-form-item-control > div > div > span")
        # 检查邮箱标签
        self.driver.find_element(By.CSS_SELECTOR, "#sk-layout > div > div > section > div.ant-pro-layout-container > main > div > div > div > div.right___2jdGg > div.baseView___3sRG3 > div.left___GavW0 > form > div:nth-child(4) > div > div.ant-col.ant-form-item-label > label")
        # 检查邮箱输入框
        self.driver.find_element(By.CSS_SELECTOR, "#sk-layout > div > div > section > div.ant-pro-layout-container > main > div > div > div > div.right___2jdGg > div.baseView___3sRG3 > div.left___GavW0 > form > div:nth-child(4) > div > div.ant-col.ant-form-item-control > div > div > span")
        # 检查个人简介标签
        self.driver.find_element(By.CSS_SELECTOR, "#sk-layout > div > div > section > div.ant-pro-layout-container > main > div > div > div > div.right___2jdGg > div.baseView___3sRG3 > div.left___GavW0 > form > div:nth-child(5) > div > div.ant-col.ant-form-item-label > label")
        # 检查个人简介输入框
        self.driver.find_element(By.CSS_SELECTOR, "#profile")
        # 检查提交按钮
        self.driver.find_element(By.CSS_SELECTOR, "#sk-layout > div > div > section > div.ant-pro-layout-container > main > div > div > div > div.right___2jdGg > div.baseView___3sRG3 > div.left___GavW0 > form > div.ant-space.ant-space-horizontal.ant-space-align-center > div:nth-child(2) > button")

        # 添加屏幕截图
        QE_SystemDriver.getScreenShot()


    #2.1更新信息成功的测试用例
    def PersonalSuccessTest(self):
        #清空姓名输入框
        QE_SystemDriver.my_clear(self.driver.find_element(By.CSS_SELECTOR, "#name"))
        #清空手机号输入框
        QE_SystemDriver.my_clear(self.driver.find_element(By.CSS_SELECTOR, "#phone"))
        #清空邮箱输入框
        QE_SystemDriver.my_clear(self.driver.find_element(By.CSS_SELECTOR, "#email"))
        #清空个人简介输入框
        self.driver.find_element(By.CSS_SELECTOR, "#profile").clear()
        # 添加屏幕截图
        QE_SystemDriver.getScreenShot()

        #输入姓名
        self.driver.find_element(By.CSS_SELECTOR, "#name").send_keys("Admin123")
        #输入手机号
        self.driver.find_element(By.CSS_SELECTOR, "#phone").send_keys("14745667235")
        #输入邮箱
        self.driver.find_element(By.CSS_SELECTOR, "#email").send_keys("123456@163.com")
        #输入个人简介
        self.driver.find_element(By.CSS_SELECTOR, "#profile").send_keys("这是更新个人基本信息功能测试")
        #点击提交按钮
        self.driver.find_element(By.CSS_SELECTOR, "#sk-layout > div > div > section > div.ant-pro-layout-container > main > div > div > div > div.right___2jdGg > div.baseView___3sRG3 > div.left___GavW0 > form > div.ant-space.ant-space-horizontal.ant-space-align-center > div:nth-child(2) > button").click()
        # 添加屏幕截图
        QE_SystemDriver.getScreenShot()


        #验证是否更新成功

        #通过页面右上角的用户名来验证
        actual = self.driver.find_element(By.CSS_SELECTOR, "#sk-layout > div > div > section > div.ant-pro-layout-container > header.ant-layout-header.ant-pro-layout-header.ant-pro-layout-header-fixed-header.ant-pro-layout-header-mix.ant-pro-layout-header-fixed-header-action.ant-pro-layout-header-header > div > div.ant-pro-global-header-right-content > div > div > div > span > div > span:nth-child(2)").text
        print(f"姓名: {actual}")
        #添加屏幕截图
        QE_SystemDriver.getScreenShot()
        #断言检测一下是否符合预期
        assert actual == "Admin123"



    # 2.2更新信息失败的测试用例
    def PersonalFailTest(self):

        #2.2.1测试用例一:不输入姓名,其他信息正常输入

        #清空姓名输入框
        QE_SystemDriver.my_clear(self.driver.find_element(By.CSS_SELECTOR, "#name"))
        #清空手机号输入框
        QE_SystemDriver.my_clear(self.driver.find_element(By.CSS_SELECTOR, "#phone"))
        #清空邮箱输入框
        QE_SystemDriver.my_clear(self.driver.find_element(By.CSS_SELECTOR, "#email"))
        #清空个人简介输入框
        self.driver.find_element(By.CSS_SELECTOR, "#profile").clear()
        # 添加屏幕截图
        QE_SystemDriver.getScreenShot()

        #输入手机号
        self.driver.find_element(By.CSS_SELECTOR, "#phone").send_keys("14745667235")
        #输入邮箱
        self.driver.find_element(By.CSS_SELECTOR, "#email").send_keys("123456@163.com")
        #输入个人简介
        self.driver.find_element(By.CSS_SELECTOR, "#profile").send_keys("这是更新个人基本信息功能测试")
        #点击提交按钮
        self.driver.find_element(By.CSS_SELECTOR, "#sk-layout > div > div > section > div.ant-pro-layout-container > main > div > div > div > div.right___2jdGg > div.baseView___3sRG3 > div.left___GavW0 > form > div.ant-space.ant-space-horizontal.ant-space-align-center > div:nth-child(2) > button").click()
        time.sleep(1)
        # 添加屏幕截图
        QE_SystemDriver.getScreenShot()
        #验证是否更新失败
        actual = self.driver.find_element(By.CSS_SELECTOR, "#name_help > div").text
        print(f"提示信息: {actual}")
        # 添加屏幕截图
        QE_SystemDriver.getScreenShot()
        # 断言检测一下是否符合预期
        assert actual == "请输入您的昵称!"


        # 2.2.2测试用例二:不输入手机号,其他信息正常输入

        #清空姓名输入框
        QE_SystemDriver.my_clear(self.driver.find_element(By.CSS_SELECTOR, "#name"))
        #清空手机号输入框
        QE_SystemDriver.my_clear(self.driver.find_element(By.CSS_SELECTOR, "#phone"))
        #清空邮箱输入框
        QE_SystemDriver.my_clear(self.driver.find_element(By.CSS_SELECTOR, "#email"))
        # 清空个人简介输入框
        self.driver.find_element(By.CSS_SELECTOR, "#profile").clear()
        # 添加屏幕截图
        QE_SystemDriver.getScreenShot()

        # 输入姓名
        self.driver.find_element(By.CSS_SELECTOR, "#name").send_keys("Admin123")
        # 输入邮箱
        self.driver.find_element(By.CSS_SELECTOR, "#email").send_keys("lvdongrui2023@163.com")
        # 输入个人简介
        self.driver.find_element(By.CSS_SELECTOR, "#profile").send_keys("这是更新个人基本信息功能测试")
        # 点击提交按钮
        self.driver.find_element(By.CSS_SELECTOR, "#sk-layout > div > div > section > div.ant-pro-layout-container > main > div > div > div > div.right___2jdGg > div.baseView___3sRG3 > div.left___GavW0 > form > div.ant-space.ant-space-horizontal.ant-space-align-center > div:nth-child(2) > button").click()
        time.sleep(1)
        # 添加屏幕截图
        QE_SystemDriver.getScreenShot()
        # 验证是否更新失败
        actual = self.driver.find_element(By.CSS_SELECTOR, "#phone_help > div").text
        print(f"提示信息: {actual}")
        # 添加屏幕截图
        QE_SystemDriver.getScreenShot()
        # 断言检测一下是否符合预期
        assert actual == "请输入您的联系电话!"


        # 2.2.3测试用例三:不输入邮箱,其他信息正常输入

        #清空姓名输入框
        QE_SystemDriver.my_clear(self.driver.find_element(By.CSS_SELECTOR, "#name"))
        #清空手机号输入框
        QE_SystemDriver.my_clear(self.driver.find_element(By.CSS_SELECTOR, "#phone"))
        #清空邮箱输入框
        QE_SystemDriver.my_clear(self.driver.find_element(By.CSS_SELECTOR, "#email"))
        # 清空个人简介输入框
        self.driver.find_element(By.CSS_SELECTOR, "#profile").clear()
        # 添加屏幕截图
        QE_SystemDriver.getScreenShot()

        # 输入姓名
        self.driver.find_element(By.CSS_SELECTOR, "#name").send_keys("Admin123")
        #输入手机号
        self.driver.find_element(By.CSS_SELECTOR, "#phone").send_keys("14745667235")
        # 输入个人简介
        self.driver.find_element(By.CSS_SELECTOR, "#profile").send_keys("这是更新个人基本信息功能测试")
        # 点击提交按钮
        self.driver.find_element(By.CSS_SELECTOR, "#sk-layout > div > div > section > div.ant-pro-layout-container > main > div > div > div > div.right___2jdGg > div.baseView___3sRG3 > div.left___GavW0 > form > div.ant-space.ant-space-horizontal.ant-space-align-center > div:nth-child(2) > button").click()
        time.sleep(1)
        # 添加屏幕截图
        QE_SystemDriver.getScreenShot()
        # 验证是否更新失败
        actual = self.driver.find_element(By.CSS_SELECTOR, "#email_help > div").text
        print(f"提示信息: {actual}")
        # 添加屏幕截图
        QE_SystemDriver.getScreenShot()
        # 断言检测一下是否符合预期
        assert actual == "请输入您的邮箱!"




# personal = QE_PersonalTest()
# personal.PersonalCheckElement()
# personal.PersonalFailTest()
# personal.PersonalSuccessTest()

# 指定浏览器的退出
# QE_SystemDriver.driver.quit()

8.启动文件

python 复制代码
from common.Utils import QE_SystemDriver
from tests.QE_SystemHome import QE_SystemHome
from tests.QE_SystemLogin import QE_SystemLogin
from tests.QE_SystemPersonal import QE_SystemPersonalTest
from tests.QE_SystemProject import QE_SystemProjectTest
from tests.QE_SystemQuestionBank import QE_SystemQuestionTest



# 总测试模块
if __name__ == "__main__":
    # #注册
    # Register=QE_SystemRegister()
    # Register.RegisterInterface()
    # Register.RegisterSucTest()
    # Register.RegisterFailTest()

    #登录
    Login=QE_SystemLogin()
    Login.LoginInterfaceTest()
    Login.LoginSucTest()
    Login.LoginFailTest()
    Login.LoginSucTest()

    #首页
    Home=QE_SystemHome()
    Home.HomeInterfaceTest()

    #我的项目
    project = QE_SystemProjectTest()
    project.ProjectInterfaceTest()
    project.ProjectFunctionTest()


    # 我的题库
    question = QE_SystemQuestionTest()
    question.QuestionCheckElement()
    question.QuestionFunctionTest()


    # 个人设置
    personal = QE_SystemPersonalTest()
    personal.PersonalCheckElement()
    personal.PersonalFailTest()
    personal.PersonalSuccessTest()

    # 指定浏览器退出
    QE_SystemDriver.driver.quit()

五、兼容性测试

1.测试场景一:在Edge浏览器下进入问卷考试系统

预期结果:无异常且一切布局显示功能等与其一致


2.测试场景二:在Chrome浏览器下进入问卷考试系统

预期结果:无异常且一切布局显示功能等与其一致



3.测试场景三:在手机浏览器下进入问卷考试系统

预期结果:无异常且一切布局显示功能等与其一致

实际结果:界面不美观,功能正常。


六、测试总结

1.Bug描述

1.1模板广场页面

1.1.1"搜模板"按钮异常

搜索已经创建好的"test_5"模板,点击"搜模板"按钮后,搜索结果显示"暂无数据",什么也没有搜索出来,搜模板功能失效。

1.2用户管理页面

1.2.1新建用户页面

必选项状态栏未选也正常创建用户成功了。

成功创建了新用户aa,并且状态为激活。

1.2.2修改用户信息页面

用户名已存在不进行提示而且还可以正常创建

成功创建出了用户名为admin的用户

1.2.3用户重置密码页面

当新密码与旧密码相同时不进行提示并且也可以修改成功

1.3个人设置页面

1.3.1修改密码页面

旧密码与新密码一致时没有提示和修改失败,反而修改成功

2.总结

博客系统的测试涵盖功能测试和自动化测试:

  • 功能测试验证了用户管理、问卷/考试管理、题库管理、练习系统、模板管理、系统设置等核心模块,正常场景和异常场景处理基本符合预期。
  • 自动化测试基于 Selenium 框架与 Edge 浏览器/Chrome浏览器实现全流程脚本执行,关键节点截图留存,测试效率与可追溯性良好
  • 问卷考试系统整体运行稳定,核心业务流程均能顺畅运转。交互体验上所有按钮点击响应迅速,页面渲染正常,无错别字、元素遮挡或显示异常等问题。虽然存在些许bug,但是不是很严重,基本不影响日常使用需求。
相关推荐
chushiyunen2 小时前
django数据库配置
数据库·python·django
全栈凯哥2 小时前
01.Python 和 PyCharm 安装与运行完全指南
python·pycharm
java1234_小锋2 小时前
Python常见面试题:请解释或描述一下Django的架构?
python·架构·django
青瓷程序设计2 小时前
【蝴蝶识别系统】~Python+深度学习+人工智能+算法模型+图像识别+2026原创
人工智能·python·深度学习
所谓伊人,在水一方3332 小时前
【Python零基础到精通】第13讲 | TensorFlow深度学习:从神经网络原理到实战
python·深度学习·神经网络·信息可视化·tensorflow
Fuxiao___2 小时前
RoboTwin2.0中训练OpenVLA-oft 全流程(bell + alarmclock)
人工智能·python·深度学习
justtoomuchforyou2 小时前
deepseek- 上千种类别如何image classification
python
甲枫叶2 小时前
【openclaw】我用 OpenClaw 自动化了这些工作
java·python·自动化·ai编程
ding_zhikai2 小时前
【Web应用开发笔记】Django笔记11:Django使用Google邮箱功能
笔记·后端·python·django