问卷系统调查博客项目测试报告

一.项目背景

问卷系统调查是一款基于web的在线测评平台,主要用于创建问卷,编辑问卷题目,创建考试问卷,系统自动收集填写数据,支持基础数据查看和统计。

系统包含以下模块:

  • 用户管理:注册,登录,权限控制
  • 问卷/考试管理:创建,编辑,发布,
  • 题库管理:试题管理,导入/导出
  • 练习系统:错题管理
  • 模块管理:问卷/考试模板的创建和添加
  • 系统设置:界面风格,安全设置

二.测试环境

三.测试目的

1.功能验证

  • 确保所有核心功能符合需求规格说明书要求
  • 验证用户注册/登录流程的正确性
  • 确认问卷/考试创建,编辑等核心流程是否符合需求
  • 确认页面操作流畅,数据保存,展示准确无误

2.用户体验优化

  • 页面布局:不同浏览器窗口下页面元素不乱码,不遮挡
  • 操作引导:按钮文字,弹窗提示通俗易懂,新手不用看教程也能上手
  • 交互反馈,输入错误时有清晰提示,填写问卷过程中不会无辜丢内容
  • 页面加载:页面打开,切换速度正常,不会长时间空白

四.测试用例

五.手动测试

注册页面功能

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

预期结果:能够跳转到登录页面并成功进入到首页

测试场景二:不输入用户名进行注册

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

测试场景三:输入已经存在的账号

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

场景四:输入的密码和确认的密码不一致

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

登录页面功能

测试场景一:输入正确的用户名和密码

预期结果:成功跳转到首页

测试场景二:输入错误的用户名和正确的密码

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

测试场景三:输入错误的用户名和错误的密码

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

测试场景四:不输入用户名和密码

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

系统首页功能

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

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


测试场景二:点击创建考试

预期结果:能够跳转到考试页面

测试场景三:编辑好问卷后,点击保存按钮

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

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

预期结果:提示保存成功,首页考试数+1,可以在我的项目中查看到名称为英语的考试

页面设置功能

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

预期结果:弹出选项栏

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

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

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

预期结果:可以跳转到登录页面

我的项目页面功能

测试场景一:搜索已经存在的项目名称,点击搜索按钮

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

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

预期结果:弹出选项栏

场景三:点击问卷调查选项

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

场景四:点击回收站按钮,

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

场景五:在弹出的回收站页面,选择一个项目,点击彻底删除按钮

预期结果:弹出提示弹窗

场景六:点击一个项目

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

场景七:开启问卷后,点击打开按钮

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

我的练习页面功能

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

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

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

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

测试场景3:点击重置按钮

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

我的题库页面功能

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

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

测试场景2:点击重置按钮

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

测试场景3:点击新建按钮

预期结果:弹出新增题库编辑按钮

测试场景4:编辑好题库点击确定按钮

预期结果:我的题库列表会新增一个刚刚新建的题库

测试场景5:编辑新增题库的时候,未输入题库名称

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

测试场景6:编辑新增题库的时候,未选择题库类型

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

测试场景7:点击导出按钮

预期结果:可以导出题库

问题管理页面功能

测试场景1:选择好类型和题型,点击查询按钮

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

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

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

测试场景3:输入不存在的问题名称,点击查询

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

测试场景4:点击重置按钮

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

模板广场页面功能

测试场景一:点击添加模板

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

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

预期结果:可以在模板广场共有库看到刚添加的名为test测试的模板

测试场景3:点击模板搜索框,输入已有的模板名字,点击搜模板按钮

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

实际结果:点击模板搜索框后输入test测试,什么也没有搜索出来

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

个人设置页面功能

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

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

测试场景2:基本信息不输入昵称

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

测试场景3:基本信息不输入个人简介

预期结果:提示请输入个人简介

测试场景4:基本信息不输入邮箱

预期结果:提示请输入您的邮箱

测试场景5:安全设置界面,点击修改按钮

预期结果:弹出修改密码对话框

测试场景6:旧密码未输入,

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

测试场景7:新密码未输入

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

测试场景8:新密码和旧密码输入的不一样
预期结果:提示两次密码输入不一致

测试场景9:旧密码和新密码相同

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

**实际结果:**当新密码和旧密码一致的时候,修改成功了

**bug:**新密码和旧密码一致的时候没有提示和修改失败

六. 兼容性测试

测试场景一:在夸克浏览器下进入问卷考试系统

预期结果:无异常,一切布局显示功能都正常

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

预期结果:无异常,一切布局显示功能正常

七.自动化测试

驱动类

python 复制代码
#创建一个浏览器对象
import datetime
import os
import sys
from selenium import webdriver
from selenium.webdriver import ActionChains, Keys
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager


class Driver:
    driver = ""
    def __init__(self):
        options = webdriver.ChromeOptions()
        self.driver = webdriver.Chrome(service = Service(ChromeDriverManager().install()),options = options)
        #添加隐式等待:因为隐式等待的作用域在driver的整个生命周期
        self.driver.implicitly_wait(3)
    def getScreenshot(self):
        #创建屏幕截图
        #图片文件名称:年-月-日-时分秒.png
        #根据每天的日期进行分类,当天运行的自动化图片文件放到当天的文件夹下
        #图片路径:../images/日期/图片名称.png
        dirname = datetime.datetime.now().strftime("%Y-%m-%d")
        #判断dirname文件夹是否已经存在,若不存在则创建文件夹
        # ../images/日期
        if not os.path.exists("../images/" + dirname):
            os.mkdir("../images/" + dirname)
        #图片名称:方法名-日期-时分秒.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/"+dirname+"/"+filename)


    #由于项目外层不是一个单纯的input标签,而是组件封装之后的,所以不能使用selenium中的clear()
    #清空指定输入框的内容
    def 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_Driver = Driver()

注册模块

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

#测试问卷考试系统注册页面

class QE_RegisterTest:
    url = ""
    driver = ""
    def __init__(self):
        self.url = "http://8.155.1.153:8081/user/register"
        self.driver = QE_Driver.driver
        self.driver.get(self.url)

    #注册成功的测试用例
    def RegisterSuccessTest(self):

        #清空输入框
        QE_Driver.clear(self.driver.find_element(By.CSS_SELECTOR, "#name"))
        QE_Driver.clear(self.driver.find_element(By.CSS_SELECTOR, "#username"))
        QE_Driver.clear(self.driver.find_element(By.CSS_SELECTOR, "#password"))
        QE_Driver.clear(self.driver.find_element(By.CSS_SELECTOR, "#rePassword"))

        self.driver.find_element(By.CSS_SELECTOR, "#name").send_keys("test")
        self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("test")
        self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")
        self.driver.find_element(By.CSS_SELECTOR, "#rePassword").send_keys("123456")
        self.driver.find_element(By.CSS_SELECTOR, "#root > div > div.content___1k5Ro > div.main___19HXK > div > form > button > span").click()
        time.sleep(1)
        #如果能跳转到登录页面,说明注册成功,否则注册失败
        self.driver.find_element(By.CSS_SELECTOR, "#root > div > div.content___2zk1- > div.main___x4OjT > div > form > button > span")
        # 添加屏幕截图
        QE_Driver.getScreenshot()

##########################################################################################################################

    # 注册失败的测试用例

    def RegisterFailTest(self):

        # 测试用例一:不输入用户名、但输入登陆账号、密码、确认密码后进行注册

        #清空输入框
        QE_Driver.clear(self.driver.find_element(By.CSS_SELECTOR, "#name"))
        QE_Driver.clear(self.driver.find_element(By.CSS_SELECTOR, "#username"))
        QE_Driver.clear(self.driver.find_element(By.CSS_SELECTOR, "#password"))
        QE_Driver.clear(self.driver.find_element(By.CSS_SELECTOR, "#rePassword"))

        QE_Driver.clear(self.driver.find_element(By.CSS_SELECTOR, "#name"))
        self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("test")
        self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")
        self.driver.find_element(By.CSS_SELECTOR, "#rePassword").send_keys("123456")
        self.driver.find_element(By.CSS_SELECTOR, "#root > div > div.content___1k5Ro > div.main___19HXK > div > form > button > span").click()
        time.sleep(1)
        #检查是否注册失败
        actual = self.driver.find_element(By.CSS_SELECTOR, "#name_help > div").text
        #添加屏幕截图
        QE_Driver.getScreenshot()
        #断言检测一下是否符合预期
        assert actual == "用户名是必填项!"

##########################################################################################################################

        #测试用例二:输入了已经存在的账号进行注册

        #清空输入框
        QE_Driver.clear(self.driver.find_element(By.CSS_SELECTOR, "#name"))
        QE_Driver.clear(self.driver.find_element(By.CSS_SELECTOR, "#username"))
        QE_Driver.clear(self.driver.find_element(By.CSS_SELECTOR, "#password"))
        QE_Driver.clear(self.driver.find_element(By.CSS_SELECTOR, "#rePassword"))

        self.driver.find_element(By.CSS_SELECTOR, "#name").send_keys("admin")
        self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("admin")
        self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")
        self.driver.find_element(By.CSS_SELECTOR, "#rePassword").send_keys("123456")
        self.driver.find_element(By.CSS_SELECTOR, "#root > div > div.content___1k5Ro > div.main___19HXK > div > form > button > span").click()
        time.sleep(1)
        #检查是否注册失败
        actual = self.driver.find_element(By.CSS_SELECTOR, "#root > div > div.content___1k5Ro > div.main___19HXK > div > form > div.ant-alert.ant-alert-error > div > div").text
        #添加屏幕截图
        QE_Driver.getScreenshot()
        #断言检测一下是否符合预期
        assert actual == "账号已存在"

##########################################################################################################################

        # 测试用例三:密码和密码确认时输入的不一致

        #清空输入框
        QE_Driver.clear(self.driver.find_element(By.CSS_SELECTOR, "#name"))
        QE_Driver.clear(self.driver.find_element(By.CSS_SELECTOR, "#username"))
        QE_Driver.clear(self.driver.find_element(By.CSS_SELECTOR, "#password"))
        QE_Driver.clear(self.driver.find_element(By.CSS_SELECTOR, "#rePassword"))

        self.driver.find_element(By.CSS_SELECTOR, "#name").send_keys("test")
        self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("test")
        self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")
        self.driver.find_element(By.CSS_SELECTOR, "#rePassword").send_keys("123123")
        self.driver.find_element(By.CSS_SELECTOR, "#root > div > div.content___1k5Ro > div.main___19HXK > div > form > button > span").click()
        time.sleep(1)
        #检查是否注册失败
        actual = self.driver.find_element(By.CSS_SELECTOR, "#rePassword_help > div").text
        #添加屏幕截图
        QE_Driver.getScreenshot()
        #断言检测一下是否符合预期
        assert actual == "两次密码不一致!"


#测试
# register = QE_RegisterTest()
# register.RegisterFailTest()
# register.RegisterSuccessTest()

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

登录模块

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

#测试问卷考试系统登录页面

class QE_LoginTest:
    url = ""
    driver = ""
    def __init__(self):
        self.url = "http://8.155.1.153:8081/user/login"
        self.driver = QE_Driver.driver
        self.driver.get(self.url)

    #登录成功的测试用例
    def LoginSuccessTest(self):
        #清空输入框
        QE_Driver.clear(self.driver.find_element(By.CSS_SELECTOR, "#username"))
        QE_Driver.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("123456")
        self.driver.find_element(By.CSS_SELECTOR, "#root > div > div.content___2zk1- > div.main___x4OjT > div > form > button > span").click()
        #如果能够找到问卷考试系统首页用户的昵称,说明登录成功,否则登陆失败
        self.driver.find_element(By.XPATH, "/html/body/div[1]/div/div/div/section/div[2]/header[2]/div/div[3]/div/div/div/span/div/span[2]")
        # 添加屏幕截图
        QE_Driver.getScreenshot()

##########################################################################################################################

    #登录异常的测试用例
    def LoginFailTest(self):

        #测试用例一:输入错误的用户名和错误的密码

        #清空输入框
        QE_Driver.clear(self.driver.find_element(By.CSS_SELECTOR, "#username"))
        QE_Driver.clear(self.driver.find_element(By.CSS_SELECTOR, "#password"))

        self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("error")
        self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("1234")
        self.driver.find_element(By.CSS_SELECTOR, "#root > div > div.content___2zk1- > div.main___x4OjT > div > form > button > span").click()
        #验证是否登陆失败
        actual = 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").text
        print(f"提示信息: {actual}")
        #添加屏幕截图
        QE_Driver.getScreenshot()
        #断言检测一下是否符合预期
        assert actual == "错误的用户名和密码"

##########################################################################################################################

        # 测试用例二:输入错误的用户名和正确的密码

        #清空输入框
        QE_Driver.clear(self.driver.find_element(By.CSS_SELECTOR, "#username"))
        QE_Driver.clear(self.driver.find_element(By.CSS_SELECTOR, "#password"))

        self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("error")
        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 > span").click()
        #验证是否登陆失败
        actual = self.driver.find_element(By.CSS_SELECTOR, "body > #root > div > div.content___2zk1- > div.main___x4OjT > div > form > div.ant-alert.ant-alert-error > div > div").text
        print(f"提示信息: {actual}")
        #添加屏幕截图
        QE_Driver.getScreenshot()
        #断言检测一下是否符合预期
        assert actual == "错误的用户名和密码"

        ##########################################################################################################################

        # 测试用例三:输入正确的用户名和错误的密码

        #清空输入框
        QE_Driver.clear(self.driver.find_element(By.CSS_SELECTOR, "#username"))
        QE_Driver.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("1234")
        self.driver.find_element(By.CSS_SELECTOR, "#root > div > div.content___2zk1- > div.main___x4OjT > div > form > button > span").click()
        #验证是否登陆失败
        actual = 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").text
        print(f"提示信息: {actual}")
        #添加屏幕截图
        QE_Driver.getScreenshot()
        #断言检测一下是否符合预期
        assert actual == "错误的用户名和密码"

        ##########################################################################################################################

        # 测试用例四:不输入用户名但输入密码

        #清空输入框
        QE_Driver.clear(self.driver.find_element(By.CSS_SELECTOR, "#username"))
        QE_Driver.clear(self.driver.find_element(By.CSS_SELECTOR, "#password"))

        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 > span").click()
        #验证是否登陆失败
        actual = self.driver.find_element(By.CSS_SELECTOR, "#username_help > div").text
        print(f"提示信息: {actual}")
        #添加屏幕截图
        QE_Driver.getScreenshot()
        #断言检测一下是否符合预期
        assert actual == "用户名是必填项!"

        ##########################################################################################################################

        # 测试用例五:输入用户名但不输入密码

        #清空输入框
        QE_Driver.clear(self.driver.find_element(By.CSS_SELECTOR, "#username"))
        QE_Driver.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, "#root > div > div.content___2zk1- > div.main___x4OjT > div > form > button > span").click()
        #验证是否登陆失败
        actual = self.driver.find_element(By.CSS_SELECTOR, "#password_help > div").text
        print(f"提示信息: {actual}")
        #添加屏幕截图
        QE_Driver.getScreenshot()
        #断言检测一下是否符合预期
        assert actual == "密码是必填项!"



#测试
# login = QE_LoginTest()
# login.LoginFailTest()
# login.LoginSuccessTest()

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

首页功能测试

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

#测试问卷考试系统登录页面

class QE_LoginTest:
    url = ""
    driver = ""
    def __init__(self):
        self.url = "http://8.155.1.153:8081/user/login"
        self.driver = QE_Driver.driver
        self.driver.get(self.url)

    #登录成功的测试用例
    def LoginSuccessTest(self):
        #清空输入框
        QE_Driver.clear(self.driver.find_element(By.CSS_SELECTOR, "#username"))
        QE_Driver.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("123456")
        self.driver.find_element(By.CSS_SELECTOR, "#root > div > div.content___2zk1- > div.main___x4OjT > div > form > button > span").click()
        #如果能够找到问卷考试系统首页用户的昵称,说明登录成功,否则登陆失败
        self.driver.find_element(By.XPATH, "/html/body/div[1]/div/div/div/section/div[2]/header[2]/div/div[3]/div/div/div/span/div/span[2]")
        # 添加屏幕截图
        QE_Driver.getScreenshot()

##########################################################################################################################

    #登录异常的测试用例
    def LoginFailTest(self):

        #测试用例一:输入错误的用户名和错误的密码

        #清空输入框
        QE_Driver.clear(self.driver.find_element(By.CSS_SELECTOR, "#username"))
        QE_Driver.clear(self.driver.find_element(By.CSS_SELECTOR, "#password"))

        self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("error")
        self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("1234")
        self.driver.find_element(By.CSS_SELECTOR, "#root > div > div.content___2zk1- > div.main___x4OjT > div > form > button > span").click()
        #验证是否登陆失败
        actual = 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").text
        print(f"提示信息: {actual}")
        #添加屏幕截图
        QE_Driver.getScreenshot()
        #断言检测一下是否符合预期
        assert actual == "错误的用户名和密码"

##########################################################################################################################

        # 测试用例二:输入错误的用户名和正确的密码

        #清空输入框
        QE_Driver.clear(self.driver.find_element(By.CSS_SELECTOR, "#username"))
        QE_Driver.clear(self.driver.find_element(By.CSS_SELECTOR, "#password"))

        self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("error")
        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 > span").click()
        #验证是否登陆失败
        actual = self.driver.find_element(By.CSS_SELECTOR, "body > #root > div > div.content___2zk1- > div.main___x4OjT > div > form > div.ant-alert.ant-alert-error > div > div").text
        print(f"提示信息: {actual}")
        #添加屏幕截图
        QE_Driver.getScreenshot()
        #断言检测一下是否符合预期
        assert actual == "错误的用户名和密码"

        ##########################################################################################################################

        # 测试用例三:输入正确的用户名和错误的密码

        #清空输入框
        QE_Driver.clear(self.driver.find_element(By.CSS_SELECTOR, "#username"))
        QE_Driver.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("1234")
        self.driver.find_element(By.CSS_SELECTOR, "#root > div > div.content___2zk1- > div.main___x4OjT > div > form > button > span").click()
        #验证是否登陆失败
        actual = 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").text
        print(f"提示信息: {actual}")
        #添加屏幕截图
        QE_Driver.getScreenshot()
        #断言检测一下是否符合预期
        assert actual == "错误的用户名和密码"

        ##########################################################################################################################

        # 测试用例四:不输入用户名但输入密码

        #清空输入框
        QE_Driver.clear(self.driver.find_element(By.CSS_SELECTOR, "#username"))
        QE_Driver.clear(self.driver.find_element(By.CSS_SELECTOR, "#password"))

        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 > span").click()
        #验证是否登陆失败
        actual = self.driver.find_element(By.CSS_SELECTOR, "#username_help > div").text
        print(f"提示信息: {actual}")
        #添加屏幕截图
        QE_Driver.getScreenshot()
        #断言检测一下是否符合预期
        assert actual == "用户名是必填项!"

        ##########################################################################################################################

        # 测试用例五:输入用户名但不输入密码

        #清空输入框
        QE_Driver.clear(self.driver.find_element(By.CSS_SELECTOR, "#username"))
        QE_Driver.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, "#root > div > div.content___2zk1- > div.main___x4OjT > div > form > button > span").click()
        #验证是否登陆失败
        actual = self.driver.find_element(By.CSS_SELECTOR, "#password_help > div").text
        print(f"提示信息: {actual}")
        #添加屏幕截图
        QE_Driver.getScreenshot()
        #断言检测一下是否符合预期
        assert actual == "密码是必填项!"



#测试
# login = QE_LoginTest()
# login.LoginFailTest()
# login.LoginSuccessTest()

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

我的项目页面功能测试类

python 复制代码
import time

from selenium.webdriver import Keys
from selenium.webdriver.common.by import By
from common.Utils import QE_Driver

#测试问卷考试系统我的项目页面

class QE_ProjectTest:
    url = ""
    driver = ""
    def __init__(self):
        self.url = "http://8.155.1.153:8081/project"
        self.driver = QE_Driver.driver
        self.driver.get(self.url)

    #进行页面元素的查找检查
    def ProjectCheckElement(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_Driver.getScreenshot()

##########################################################################################################################

    #功能测试
    def ProjectFunctionTest(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 > span > div > div > button").click()

        #测试用例一:测试新建问卷调查功能

        #选择新建问卷调查
        self.driver.find_element(By.CSS_SELECTOR, "body > div:nth-child(7) > div > div > ul > li:nth-child(1)").click()
        time.sleep(1)
        #添加屏幕截图
        QE_Driver.getScreenshot()
        #点击保存按钮
        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_Driver.getScreenshot()
        #返回到项目页面
        self.driver.back()
        self.driver.back()
        time.sleep(1)
        #添加屏幕截图
        QE_Driver.getScreenshot()

        #测试项目查询功能
        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_Driver.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_Driver.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_Driver.getScreenshot()
        #断言检测一下是否符合预期
        assert actual == "请输入标题"

##########################################################################################################################

        #测试用例二:测试新建在线考试功能

        #点击新建按钮
        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()
        # 添加屏幕截图
        QE_Driver.getScreenshot()
        #选择新建在线考试
        self.driver.find_element(By.XPATH, "/html/body/div[5]/div/div/ul/li[2]").click()
        time.sleep(1)
        #添加屏幕截图
        QE_Driver.getScreenshot()
        #点击保存按钮
        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(1)
        #添加屏幕截图
        QE_Driver.getScreenshot()
        #返回到项目页面
        self.driver.back()
        self.driver.back()
        #添加屏幕截图
        QE_Driver.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 > input").send_keys("考试名称")
        #添加屏幕截图
        QE_Driver.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_Driver.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_Driver.getScreenshot()
        #断言检测一下是否符合预期
        assert actual == "考试名称"



# project = QE_ProjectTest()
# project.ProjectCheckElement()
# project.ProjectFunctionTest()

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

模板广场测试类

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

from common.Utils import QE_Driver

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

class QE_QuestionTest:
    url = ""
    driver = ""
    def __init__(self):
        self.url = "http://8.155.1.153:8081/repo/index"
        self.driver = QE_Driver.driver
        self.driver.get(self.url)

    #进行页面元素的查找检查
    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_Driver.getScreenshot()

##########################################################################################################################

    #功能测试
    def QuestionFunctionTest(self):
        type ="考试"

        #测试新建功能

        #点击新建按钮
        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_Driver.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_Driver.getScreenshot()
        time.sleep(3)
        #选择题库类型
        drawer.find_element(By.CSS_SELECTOR, "#mode").click()
        time.sleep(1)
        # 添加屏幕截图
        QE_Driver.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_Driver.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_Driver.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_Driver.getScreenshot()

##########################################################################################################################

        #测试查询功能

        #名称输入框输入题库名称"测试新增题库功能"
        self.driver.find_element(By.CSS_SELECTOR, "#name").send_keys("测试新增题库功能")
        # 添加屏幕截图
        QE_Driver.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_Driver.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_Driver.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(1) > button").click()
        time.sleep(1)
        # 添加屏幕截图
        QE_Driver.getScreenshot()
        #验证是否重置成功,如果名称输入框为空则代表重置成功,否则重置失败
        actual = self.driver.find_element(By.CSS_SELECTOR, "#name").text
        # 添加屏幕截图
        QE_Driver.getScreenshot()
        # 断言检测一下是否符合预期
        assert actual == ""



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

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

个人设置页面测试

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

from common.Utils import QE_Driver

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

class QE_PersonalTest:
    url = ""
    driver = ""
    def __init__(self):
        self.url = "http://8.155.1.153:8081/system/setting"
        self.driver = QE_Driver.driver
        self.driver.get(self.url)

    #进行页面元素的查找检查
    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_Driver.getScreenshot()

##########################################################################################################################

    #更新信息成功的测试用例
    def PersonalSuccessTest(self):
        #清空姓名输入框
        QE_Driver.clear(self.driver.find_element(By.CSS_SELECTOR, "#name"))
        #清空手机号输入框
        QE_Driver.clear(self.driver.find_element(By.CSS_SELECTOR, "#phone"))
        #清空邮箱输入框
        QE_Driver.clear(self.driver.find_element(By.CSS_SELECTOR, "#email"))
        #清空个人简介输入框
        self.driver.find_element(By.CSS_SELECTOR, "#profile").clear()
        # 添加屏幕截图
        QE_Driver.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("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()
        # 添加屏幕截图
        QE_Driver.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_Driver.getScreenshot()
        #断言检测一下是否符合预期
        assert actual == "Admin123"


##########################################################################################################################

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

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

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

        #输入手机号
        self.driver.find_element(By.CSS_SELECTOR, "#phone").send_keys("14745667235")
        #输入邮箱
        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_Driver.getScreenshot()
        #验证是否更新失败
        actual = self.driver.find_element(By.CSS_SELECTOR, "#name_help > div").text
        print(f"提示信息: {actual}")
        # 添加屏幕截图
        QE_Driver.getScreenshot()
        # 断言检测一下是否符合预期
        assert actual == "请输入您的昵称!"

##########################################################################################################################

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

        #清空姓名输入框
        QE_Driver.clear(self.driver.find_element(By.CSS_SELECTOR, "#name"))
        #清空手机号输入框
        QE_Driver.clear(self.driver.find_element(By.CSS_SELECTOR, "#phone"))
        #清空邮箱输入框
        QE_Driver.clear(self.driver.find_element(By.CSS_SELECTOR, "#email"))
        # 清空个人简介输入框
        self.driver.find_element(By.CSS_SELECTOR, "#profile").clear()
        # 添加屏幕截图
        QE_Driver.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_Driver.getScreenshot()
        # 验证是否更新失败
        actual = self.driver.find_element(By.CSS_SELECTOR, "#phone_help > div").text
        print(f"提示信息: {actual}")
        # 添加屏幕截图
        QE_Driver.getScreenshot()
        # 断言检测一下是否符合预期
        assert actual == "请输入您的联系电话!"

##########################################################################################################################

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

        #清空姓名输入框
        QE_Driver.clear(self.driver.find_element(By.CSS_SELECTOR, "#name"))
        #清空手机号输入框
        QE_Driver.clear(self.driver.find_element(By.CSS_SELECTOR, "#phone"))
        #清空邮箱输入框
        QE_Driver.clear(self.driver.find_element(By.CSS_SELECTOR, "#email"))
        # 清空个人简介输入框
        self.driver.find_element(By.CSS_SELECTOR, "#profile").clear()
        # 添加屏幕截图
        QE_Driver.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_Driver.getScreenshot()
        # 验证是否更新失败
        actual = self.driver.find_element(By.CSS_SELECTOR, "#email_help > div").text
        print(f"提示信息: {actual}")
        # 添加屏幕截图
        QE_Driver.getScreenshot()
        # 断言检测一下是否符合预期
        assert actual == "请输入您的邮箱!"




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

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

启动文件

python 复制代码
​
from tests import QE_RegisterTest
from tests import QE_LoginTest
from tests import QE_HomeTest
from tests import QE_ProjectTest
from tests import QE_QuestionTest
from tests import QE_TemplateTest
from tests import QE_PersonalTest
from common.Utils import QE_Driver

if __name__ == '__main__':
    QE_RegisterTest.QE_RegisterTest().RegisterFailTest()
    QE_RegisterTest.QE_RegisterTest().RegisterSuccessTest()
    QE_LoginTest.QE_LoginTest().LoginFailTest()
    QE_LoginTest.QE_LoginTest().LoginSuccessTest()
    QE_HomeTest.QE_HomeTest().HomeCheckElement()
    QE_ProjectTest.QE_ProjectTest().ProjectCheckElement()
    QE_ProjectTest.QE_ProjectTest().ProjectFunctionTest()
    QE_QuestionTest.QE_QuestionTest().QuestionCheckElement()
    QE_QuestionTest.QE_QuestionTest().QuestionFunctionTest()
    QE_TemplateTest.QE_TemplateTest().TemplateCheckElement()
    QE_TemplateTest.QE_TemplateTest().TemplateFunctionTest()
    QE_PersonalTest.QE_PersonalTest().PersonalCheckElement()
    QE_PersonalTest.QE_PersonalTest().PersonalFailTest()
    QE_PersonalTest.QE_PersonalTest().PersonalSuccessTest()


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

​

八.Bug描述

1.模板广场页面

搜模板按钮异常:输入已存在的模板,点击搜索按钮后,什么也没有搜索出来,搜模板功能失效

2.用户管理页面

新建用户页面:必选项状态栏未选也正常创建用户成功了

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

4.个人设置页面

九.测试总结

一.测试范围

本次测试主要覆盖 3 个核心页面:模板广场页面、用户管理页面、个人设置页面。 测试类型包含功能测试、界面 UI 测试、异常场景测试,使用等价类划分、边界值、场景法设计测试用例。

二.测试执行情况

  • 缺陷分布:
    • 用户管理页面:BUG 相对较多,集中在新增、编辑、删除用户权限校验;
    • 模板广场页面:问题多为展示、样式、跳转类缺陷;
    • 个人设置页面:少量参数保存、表单校验类问题。

三.主要发现的问题

  1. 功能问题:部分表单没有做非空校验、输入特殊字符没有拦截;删除用户后页面数据没有实时刷新。
  2. 界面 UI 问题:部分页面文字排版错位、按钮样式不统一,不同窗口下页面展示效果不一致。
  3. 体验类问题:部分操作后缺少成功 / 失败提示,用户无法判断操作是否生效

四.遗留问题

经过一轮回归测试,大部分提交的缺陷已经开发修复并验证通过;剩余少量低优先级优化建议,可放在后续迭代版本优化。

五.测试结论

当前问卷系统的模板广场、用户管理、个人设置模块主流程功能可以正常使用,核心业务无阻断性严重 bug,版本达到上线测试标准,可以交付。

六.后续改进建议

  1. 加强表单输入框的校验,完善异常输入拦截;
  2. 统一各个页面 UI 样式,优化操作后的弹窗提示;
  3. 后续版本迭代,建议增加兼容性测试,覆盖不同浏览器。
相关推荐
疯狂打码的少年1 小时前
【数据结构】板块总结 + 下期预告(数据库技术)
数据结构·笔记·算法
zQ.ii1 小时前
WPF 触发器学习笔记
笔记·学习·wpf
乐橙开放平台1 小时前
老旧社区双通道笔记:周界 hoveringAlarm / aiPerArea + 电梯 aiNonVehDetect,一套 callback 做 24h 防护
笔记·物联网·音视频·智能家居
想要成为老金高手2 小时前
Kubernetes 实战笔记(一):Pod 管理与 kubectl 核心命令全解
笔记·容器·kubernetes
程序员麻辣烫2 小时前
反曲弓射箭笔记
笔记·生活
摇滚侠2 小时前
《SpringBoot 3:入门与应用实战》第 7 章 AOP 思想与实现 阅读笔记 13
java·spring boot·笔记
摇滚侠3 小时前
《SpringBoot 3:入门与应用实战》第 6 章 Spring Boot 最佳实践 阅读笔记 12
android·spring boot·笔记
金立基包装胶水3 小时前
格拉辛纸热封后容易开胶怎么办?
大数据·笔记·其他
金立基包装胶水4 小时前
牛皮纸袋用什么热封胶最好?
大数据·笔记·其他