学评一体化平台测试报告
- 一、报告概述
- 二、测试用例
- 三、手动功能测试系统
-
- 1.注册页面
- 2.登录页面
- 3.系统首页
- 4.页面设置
- 5.我的项目页面
- 6.我的练习页面
- 7.我的题库页面
- 8.问题管理页面
- 9.模板广场页面
- 10.用户管理页面
-
- 10.1测试场景一:姓名输入框输入用户姓名后,点击"查询"按钮
- 10.2测试场景二:点击"重置"按钮
- 10.3测试场景三:点击"新建"按钮
- 10.4测试场景四:编辑好新建用户信息,点击"确定"按钮
- 10.5测试场景五:编辑新建用户信息时,登录名输入的是已存在的用户登录名
- 10.6测试场景六:编辑新建用户信息时,输入密码和确认密码两次输入的不一致
- 10.7测试场景七:编辑新建用户信息时,未输入用户名
- 10.8测试场景八:编辑新建用户信息时,必选项状态未选择,点击"确定"按钮
- 10.9测试场景九:点击"编辑"按钮
- 10.10测试场景十:用户名修改为已存在的用户名admin
- 10.11测试场景十一:点击"重置密码"按钮进行重置密码
- 10.12测试场景十二:再次点击"重置密码"按钮进行重置密码,重置的新密码与旧密码相同
- 11.个人设置页面
- 四、自动化测试
- 五、兼容性测试
- 六、测试总结
一、报告概述
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,但是不是很严重,基本不影响日常使用需求。