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

论坛测试报告

一、项目介绍

本项目旨在通过 Selenium 自动化测试工具对某论坛系统进行全面测试,以确保其功能的完整性和稳定性。测试范围涵盖用户注册登录、发帖回帖、权限管理等核心功能。使用 Selenium WebDriver 模拟用户操作,结合 Python 编写测试脚本,实现对论坛各模块的自动化测试

二、项目测试

2.1思维导图

 

2.2测试用例

展示部分测试用例

 (1)登陆测试

正常登录

登陆结果

登陆成功

异常登录

登陆结果

登陆失败

 (2)注册测试

正常注册

注册成功

 异常注册

注册失败

(3) 功能栏测试

搜索功能

可以看到分类栏缺少文字,这是一个bug

搜索结果

搜索不了对应内容,搜索出现了Bug

 消息查看及回复

消息查看

消息回复

回复结果

(4)论坛主页测试

主页面点击帖子

进入帖子详情页

 (5)个人帖子集合页面测试

点击帖子

进入帖子详情页

 (6)个人中心功能测试

正常传输头像结果

头像并未改变,发现bug

修改邮箱、电话结果

邮箱和电话都不是标准格式,但依旧可修改,发现bug

(7)发布帖子测试

正常发布

发布成功

异常发布

发布失败

 (8)帖子详情页测试

点赞、发评论

可以看到评论信息为空(纯空白字符),这是不好的,测试为bug

(9)退出测试

点击退出

退出成功

三、测试代码

3.1创建驱动类

import datetime
import os.path
import sys


from selenium import webdriver
from selenium.webdriver.ie.service import Service
from webdriver_manager.microsoft import EdgeChromiumDriverManager


class Driver:
    driver=''
    options=''
    def __init__(self):
        self.options=webdriver.EdgeOptions()
        self.options.page_load_strategy="normal"
        self.driver=webdriver.Edge(service=Service(EdgeChromiumDriverManager().install()),options=self.options)
        self.driver.implicitly_wait(10)
    def photo(self):
        dirname=datetime.datetime.now().strftime("%Y-%m-%d")
        if not os.path.exists("../photo/"+dirname):
            os.mkdir("../photo/"+dirname)
        filename=sys._getframe().f_back.f_code.co_name+'-'+datetime.datetime.now().strftime("%Y-%m-%d-%H%M%S")+".png"
        self.driver.save_screenshot("../photo/"+dirname+"/"+filename)
MDriver=Driver()

3.2登陆测试

(1)基本功能

from selenium.webdriver.common.by import By


from Driver.Driver import MDriver

class LogInFace:
    driver=''
    alert=''
    url=''
    def __init__(self):
        self.driver=MDriver.driver
        self.url="http://127.0.0.1:9580/sign-in.html"

    # 进入登陆界面
    def Come(self):
        self.driver.get(self.url)
    # 检测界面元素
    def QFind(self,str):
        self.driver.find_element(By.CSS_SELECTOR,str)
    def Face(self):
        # 检测图标
        self.QFind("body > div.page.page-center > div > div > div:nth-child(1) > div > div.text-center.mb-4 > img")
        # 检测用户登录文字
        self.QFind("body > div.page.page-center > div > div > div:nth-child(1) > div > div.card.card-md > div > h2")
        # 检测用户名、输入框、提示灯等登陆元素
        self.QFind("#signInForm > div.mb-3 > label")
        self.QFind("#username")
        self.QFind("#signInForm > div.mb-2 > label")
        self.QFind("#password")
        # 检测查看密码按钮
        self.QFind("#password_a > svg")
        # 检测登陆按钮
        self.QFind("#submit")
        # 检测注册按钮
        self.QFind("body > div.page.page-center > div > div > div:nth-child(1) > div > div.text-center.text-muted.mt-3 > a")
        # 检测图画
        self.QFind("body > div.page.page-center > div > div > div.col-lg.d-none.d-lg-block > img")


    # 输入用户名
    def LogInScanfName(self,name):
        self.driver.find_element(By.CSS_SELECTOR,"#username").send_keys(name)
    # 输入密码
    def LogInScanfPass(self,Pass):
        self.driver.find_element(By.CSS_SELECTOR,"#password").send_keys(Pass)
    # 清空用户名
    def DeleteName(self):
        self.driver.find_element(By.CSS_SELECTOR,"#username").clear()
    # 清空密码
    def DeletePass(self):
        self.driver.find_element(By.CSS_SELECTOR,"#password").clear()
    # 点击登录
    def LogInTake(self):
        self.driver.find_element(By.CSS_SELECTOR,"#submit").click()
    # 跳转到注册界面
    def LogInGoToRego(self):
        self.driver.find_element(By.CSS_SELECTOR,"body > div.page.page-center > div > div > div:nth-child(1) > div > div.text-center.text-muted.mt-3 > a").click()

(2)测试类封装

from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait

from part import LogInFace
from Driver.Driver import MDriver
class test1:
    Log=''
    def __init__(self):
        self.Log=LogInFace.LogInFace()
    # 检测界面元素
    def LogFace(self):
        self.Log.Come()
        self.Log.Face()
        MDriver.photo()


    # 登陆函数
    def LogIn(self,name,Pass):
        self.Log.LogInScanfName(name)
        self.Log.LogInScanfPass(Pass)
        self.Log.LogInTake()
        MDriver.photo()
    # 清空函数
    def Delete(self):
        self.Log.DeleteName()
        self.Log.DeletePass()
    # 正常登陆
    def LogInSccess(self):
        self.LogIn("zhang","12345")
        WebDriverWait(MDriver.driver,3).until(expected_conditions.presence_of_element_located((By.CSS_SELECTOR,"#article_list_board_title")))
        MDriver.photo()



    # 可能正常登陆
    def LogInMaybeSccess(self):
        # 正确的用户名后有空白字符,正确的密码
        self.LogIn("zhang ", "12345")
        WebDriverWait(MDriver.driver,3).until(expected_conditions.presence_of_element_located((By.CSS_SELECTOR,"#article_list_board_title")))
        MDriver.photo()



    # 异常登陆
    def LogInMaybeFalse(self):
        # 正确的用户名,错误的密码
        self.LogIn("zhangsan","12345678")
        self.Delete()
        # 正确的用户名,无密码
        self.LogIn("zhangsan","")
        self.Delete()
        # 错误的用户名,正确的密码
        self.LogIn("zhan","1234")
        self.Delete()
        # 错误的用户名,错误的密码
        self.LogIn("zhan","1234567")
        self.Delete()
        # 错误的用户名,无密码
        self.LogIn("zhan","")
        self.Delete()
        # 无用户名,正确的密码
        self.LogIn("","1234")
        self.Delete()
        # 无用户名,错误的密码
        self.LogIn("","123")
        self.Delete()
        # 无用户名,无密码
        self.LogIn("","")
        self.Delete()
        # 正确的用户名后有空白字符,无密码
        self.LogIn("zhangsan    ","")
        self.Delete()
        # 正确的用户名后有空白字符,错误的密码
        self.LogIn("zhangsan  ", "1234567")
        self.Delete()

(3)测试实现

from Driver.Driver import MDriver
from test import onetestclass
def test():
    # 检测登陆界面
    onetestclass.test1().LogFace()
    # 异常登录
    onetestclass.test1().LogInMaybeFalse()
    # 可能正常登陆
    onetestclass.test1().LogInMaybeSccess()
    MDriver.driver.back()
    onetestclass.test1().Delete()
    # 正常登陆
    onetestclass.test1().LogInSccess()

3.注册测试

(1)基本功能

from selenium.webdriver.common.by import By

from Driver.Driver import MDriver
from part import LogInFace
class RegoFace:
    driver=''
    def __init__(self):
        self.driver=MDriver.driver
    # 进入界面
    def Come(self):
        LogInFace.LogInFace().Come()
        LogInFace.LogInFace().LogInGoToRego()


    # 辅助写代码
    def QFind(self,name):
        self.driver.find_element(By.CSS_SELECTOR,name)
    # 检测界面元素
    def RegoFace(self):
        # 检测图标
        self.QFind("body > div.page.page-center > div > div.text-center.mb-4 > img")
        # 检测用户名输入框
        self.QFind("#username")
        # 检测昵称输入框
        self.QFind("#nickname")
        # 检测密码输入框
        self.QFind("#password")
        # 检测显示密码按钮
        self.QFind("#password_a > svg")
        # 检测去让人密码输入框
        self.QFind("#passwordRepeat")
        # 检测同意条款方框
        self.QFind("#policy")
        # 检测条框文字链接
        self.QFind("#signUpForm > div > div:nth-child(6) > label > span > a")
        # 检测注册按钮
        self.QFind("#submit")
        # 检测登录入口
        self.QFind("body > div.page.page-center > div > div.text-center.text-muted.mt-3 > a")
        # 检测文字及提示*号
        self.QFind("#signUpForm > div > div:nth-child(2) > label")
        self.QFind("#signUpForm > div > div:nth-child(3) > label")
        self.QFind("#signUpForm > div > div:nth-child(4) > label")
        self.QFind("#signUpForm > div > div:nth-child(5) > label")
        MDriver.photo()
    # 输入用户名
    def RegoScanfName(self,name):
        self.driver.find_element(By.CSS_SELECTOR,"#username").send_keys(name)
    # 输入昵称
    def RegoScanfFName(self,fname):
        self.driver.find_element(By.CSS_SELECTOR,"#nickname").send_keys(fname)
    # 输入密码
    def RegoScanfPass(self,Pass):
        self.driver.find_element(By.CSS_SELECTOR,"#password").send_keys(Pass)
    # 输入确认密码
    def RegoScanfAgainPass(self,Pass):
        self.driver.find_element(By.CSS_SELECTOR,"#passwordRepeat").send_keys(Pass)

    # 清空用户名输入框
    def RegoDeleteName(self):
        self.driver.find_element(By.CSS_SELECTOR,"#username").clear()
    # 清空昵称输入框
    def RegoDeleteFName(self):
        self.driver.find_element(By.CSS_SELECTOR,"#nickname").clear()
    # 清空密码输入框
    def RegoDeletePass(self):
        self.driver.find_element(By.CSS_SELECTOR,"#password").clear()
    # 清空确认密码输入框
    def RegoDeleteAgianPass(self):
        self.driver.find_element(By.CSS_SELECTOR,"#passwordRepeat").clear()


    # 勾选确认框
    def RegoCheckBox(self):
        self.driver.find_element(By.CSS_SELECTOR,"#policy").click()
    # 点及文字链接
    def RegoClickWordLink(self):
        self.driver.find_element(By.CSS_SELECTOR,"#signUpForm > div > div:nth-child(6) > label > span > a").click()
    # 点击注册按钮
    def Rego(self):
        self.driver.find_element(By.CSS_SELECTOR,"#submit").click()
    # 点击登陆按钮
    def RegoGotoLogIn(self):
        self.driver.find_element(By.CSS_SELECTOR,"body > div.page.page-center > div > div.text-center.text-muted.mt-3 > a").click()

(2)测试类封装

from Driver.Driver import MDriver
from part import RegoFace
class test2:
    Rego=''
    def __init__(self):
        self.Rego=RegoFace.RegoFace()
    # 注册界面
    def RegoFace(self):
        self.Rego.Come()
        self.Rego.RegoFace()

    # 方便写代码
    def QScanf(self,name,fname,Pass,rPass):
        self.Rego.RegoScanfName(name)
        self.Rego.RegoScanfFName(fname)
        self.Rego.RegoScanfPass(Pass)
        self.Rego.RegoScanfAgainPass(rPass)
    # 清空输入框
    def QDelete(self):
        self.Rego.RegoDeleteName()
        self.Rego.RegoDeleteFName()
        self.Rego.RegoDeletePass()
        self.Rego.RegoDeleteAgianPass()
    # 正常注册
    def RegoSccess(self):
        self.QScanf("zhan","战","12345","12345")
        self.Rego.RegoCheckBox()
        self.Rego.Rego()
        MDriver.photo()
    # 异常注册
    def RegoFalse(self):
        # 填写用户名,填写昵称,填写密码,不填写确认密码,不勾选同意方案方框
        self.QScanf("zhan","战","","12345")
        self.Rego.Rego()
        MDriver.photo()
        self.QDelete()

        # 填写用户名,不填写昵称,不填写密码,填写确认密码,勾选同意方案方框
        self.QScanf("zhan","","","12345")
        self.Rego.RegoCheckBox()
        self.Rego.Rego()
        self.Rego.RegoCheckBox()
        MDriver.photo()
        self.QDelete()

        # 不填写用户名,填写昵称,不填写密码,不填写确认密码,勾选同意方案方框
        self.QScanf("","战","","")
        self.Rego.RegoCheckBox()
        self.Rego.Rego()
        self.Rego.RegoCheckBox()
        MDriver.photo()
        self.QDelete()

        # 不填写用户名,不填写昵称,填写密码,填写确认密码,不勾选同意方案方框
        self.QScanf("","","12345","12345")
        self.Rego.Rego()
        MDriver.photo()
        self.QDelete()

        # 不填写用户名,填写昵称,填写密码,填写确认密码,勾选同意方案方框
        self.QScanf("","战","12345","12345")
        self.Rego.RegoCheckBox()
        self.Rego.Rego()
        self.Rego.RegoCheckBox()
        MDriver.photo()
        self.QDelete()

        # 填写用户名,不填写昵称,不填写密码,不填写确认密码,勾选同意方案方框
        self.QScanf("zhan","","","")
        self.Rego.RegoCheckBox()
        self.Rego.Rego()
        self.Rego.RegoCheckBox()
        MDriver.photo()
        self.QDelete()

        # 不填写用户名,不填写昵称,不填写密码,不填写确认密码,不勾选同意方案方框
        self.QScanf("","","","")
        self.Rego.Rego()
        MDriver.photo()
        self.QDelete()

        # 填写用户名,填写昵称,填写密码,填写确认密码但与密码不相同,勾选同意方案方框
        self.QScanf("zhan","战","12345","12344355")
        self.Rego.RegoCheckBox()
        self.Rego.Rego()
        self.Rego.RegoCheckBox()
        MDriver.photo()
        self.QDelete()

        # 查看条款
    def RegoCheckWordLink(self):
        self.Rego.RegoClickWordLink()
        MDriver.photo()

(3)测试实现

from test import twotestclass
def test():
    # 检测界面
    twotestclass.test2().RegoFace()
    # 非正常注册
    twotestclass.test2().RegoFalse()
    # 点击查看条款
    twotestclass.test2().RegoCheckWordLink()
    # 正常注册
    twotestclass.test2().RegoSccess()

3.4功能栏测试

(1)基本功能

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


from Driver.Driver import MDriver
from part import LogInFace
class BarFace:
    driver=''
    def __init__(self):
        self.driver=MDriver.driver
    # 进入首页查看功能栏
    def Come(self):
        LogInFace.LogInFace().Come()
        LogInFace.LogInFace().LogInScanfName("zhang")
        LogInFace.LogInFace().LogInScanfPass("12345")
        LogInFace.LogInFace().LogInTake()
    # 方便写代码
    def Qfind(self,name):
        self.driver.find_element(By.CSS_SELECTOR,name)
    # 检测界面元素
    def BarFace(self):
        # 检测图标
        self.Qfind("body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > h1 > a > img")
        # 检测搜素框
        self.Qfind("body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > div > div.nav-item.d-none.d-md-flex.me-3 > div > form > div > input")
        # 检测夜间模式
        self.Qfind("body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > div > div:nth-child(2) > a.nav-link.px-0.hide-theme-dark > svg")

        # 检测消息
        self.driver.find_element(By.CSS_SELECTOR,"body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > div > div:nth-child(2) > div > a").click()
        # 检测消息信息
        self.Qfind("#index_div_message_list > div:nth-child(1) > div > div.col.text-truncate > a")
        # 检测X号
        self.Qfind("#index_message_offcanvasEnd > div.offcanvas-header > button")
        # 检测提示灯
        self.Qfind("#index_div_message_list > div:nth-child(1) > div > div:nth-child(1) > span")
        self.CloseBarMessage()

        # 检测头像
        self.driver.find_element(By.CSS_SELECTOR,"body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > div > div.nav-item.dropdown").click()
        # 头像元素
        self.Qfind("#index_user_profile")
        self.Qfind("#index_user_settings")
        self.Qfind("#index_user_logout")
        # 分类栏元素
        self.Qfind("#nav_board_index > a")
        self.Qfind("#topBoardList > li:nth-child(2) > a")
        self.Qfind("#topBoardList > li:nth-child(3) > a")
        self.Qfind("#topBoardList > li:nth-child(5) > a")
    # 搜索功能
    def BarSearch(self,name):
        self.driver.find_element(By.CSS_SELECTOR,"body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > div > div.nav-item.d-none.d-md-flex.me-3 > div > form > div > input").send_keys(name)
        self.driver.find_element(By.CSS_SELECTOR,"body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > div > div.nav-item.d-none.d-md-flex.me-3 > div > form > div > input").send_keys(Keys.ENTER)
    # 夜间模式
    def BarNight(self):
        self.driver.find_element(By.CSS_SELECTOR,"body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > div > div:nth-child(2) > a.nav-link.px-0.hide-theme-dark").click()
    # 查看消息
    def BarLookMessage(self):
        self.driver.find_element(By.CSS_SELECTOR,"body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > div > div:nth-child(2) > div > a").click()

    # 回复消息
    def BarReplayMessage(self,name):
        self.driver.find_element(By.CSS_SELECTOR,"#index_div_message_list > div:nth-child(2) > div > div.col.text-truncate > a").click()
        self.driver.find_element(By.CSS_SELECTOR,"#btn_index_message_reply > svg").click()
        self.driver.find_element(By.CSS_SELECTOR,"#index_message_reply_receive_content").send_keys(name)
        self.driver.find_element(By.CSS_SELECTOR,"#btn_index_send_message_reply").click()
    # 关闭信息列表
    def CloseBarMessage(self):
        self.driver.find_element(By.CSS_SELECTOR,"#index_message_offcanvasEnd > div.offcanvas-header > button").click()
    # 点击头像
    def BarHead(self):
        self.driver.find_element(By.CSS_SELECTOR,"#index_nav_avatar").click()
    # 进入个人帖子界面
    def BarGotoPersonalPost(self):
        self.driver.find_element(By.CSS_SELECTOR,"#index_user_profile").click()
    # 进入个人中心界面
    def BarGotoPersonalCenter(self):
        self.driver.find_element(By.CSS_SELECTOR,"#index_user_settings").click()
    # 退出登陆
    def BarLogOut(self):
        self.driver.find_element(By.CSS_SELECTOR,"#index_user_logout").click()
    # 进入首页
    def BarHome(self):
        self.driver.find_element(By.CSS_SELECTOR,"#nav_board_index > a").click()
    # 进入Java板块
    def BarGoJava(self):
        self.driver.find_element(By.CSS_SELECTOR,"#topBoardList > li:nth-child(2) > a").click()
    # 进入C++板块
    def BarGoCpp(self):
        self.driver.find_element(By.CSS_SELECTOR,"#topBoardList > li:nth-child(3) > a").click()
    # 进入MySQL板块
    def BarGoMySQL(self):
        self.driver.find_element(By.CSS_SELECTOR,"#topBoardList > li:nth-child(5) > a").click()

(2)测试类封装

from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait

from Driver.Driver import MDriver
from part import BarFace

class test3:
    Bar=''
    def __init__(self):
        self.Bar=BarFace.BarFace()
    # 检测功能栏元素
    def BarFace(self):
        self.Bar.Come()
        self.Bar.BarFace()
        MDriver.photo()
    # 测试搜索功能
    def BarSearch(self,name):
        self.Bar.BarSearch(name)
        WebDriverWait(MDriver.driver,3).until(expected_conditions.presence_of_element_located((By.CSS_SELECTOR,"#article_list_board_title")))
        MDriver.photo()
    # 测试夜间模式
    def BarNight(self):
        self.Bar.BarNight()
        MDriver.photo()
    # 查看消息
    def BarLookMessage(self):
        self.Bar.BarLookMessage()
    # 回复消息
    def BarReplayMessage(self,name):
        self.Bar.BarReplayMessage(name)
        MDriver.photo()
    # 关闭消息
    def BarCloseMessage(self):
        self.Bar.CloseBarMessage()
    # 分类板块
    def BarGoHome(self):
        self.Bar.BarHome()
        MDriver.photo()
    def BarGoJava(self):
        self.Bar.BarGoJava()
        MDriver.photo()
    def BarGoCpp(self):
        self.Bar.BarGoCpp()
        MDriver.photo()
    def BarGoMySQL(self):
        self.Bar.BarGoMySQL()
        MDriver.photo()

    # 进入个人帖子板块
    def BarGotoPersonalPost(self):
        self.Bar.BarHead()
        self.Bar.BarGotoPersonalPost()
        MDriver.photo()
    # 进入个人中心
    def BarGotoPersonalCenter(self):
        self.Bar.BarHead()
        self.Bar.BarGotoPersonalCenter()
        MDriver.photo()
    # 退出登录
    def BarLogOut(self):
        self.Bar.BarHead()
        self.Bar.BarLogOut()
        MDriver.photo()

(3)测试实现、

from test import threetestclass
def test():
    # 检测界面
    threetestclass.test3().BarFace()
    # 搜索功能
    threetestclass.test3().BarSearch("1")
    # 夜间切换模式
    threetestclass.test3().BarNight()
    # 查看消息
    threetestclass.test3().BarLookMessage()
    # 回复空消息
    threetestclass.test3().BarReplayMessage("")
    # 回复春空白字符的消息
    threetestclass.test3().BarReplayMessage("  ")
    # 回复正常的消息
    threetestclass.test3().BarReplayMessage("1234567")
    # 关闭消息列表
    threetestclass.test3().BarCloseMessage()
    # 进入Java版块
    threetestclass.test3().BarGoJava()
    # 进入C++版块
    threetestclass.test3().BarGoCpp()
    # 进入MySQL版块
    threetestclass.test3().BarGoMySQL()
    # 进入个人帖子界面
    threetestclass.test3().BarGotoPersonalPost()
    # 返回首页
    threetestclass.test3().BarGoHome()
    # 进入个人中心界面
    threetestclass.test3().BarGotoPersonalCenter()
    # 返回首页
    threetestclass.test3().BarGoHome()
    # 返回登陆界面
    threetestclass.test3().BarLogOut()

3.5个人帖子集合界面测试

(1)基本功能

from selenium.webdriver.common.by import By

from Driver.Driver import MDriver
from part import BarFace
class PersonalPost:
    driver=''
    def __init__(self):
        self.driver=MDriver.driver
    # 进入个人帖子集合界面
    def Come(self):
        BarFace.BarFace().Come()
        BarFace.BarFace().BarHead()
        BarFace.BarFace().BarGotoPersonalPost()
    # 方便写代码
    def QFind(self,name):
        self.driver.find_element(By.CSS_SELECTOR,name)
    # 检测界面元素
    def PersonalPostFace(self):
        # 检测头像
        self.QFind("#profile_avatar")
        # 检测姓名
        self.QFind("#profile_nickname")
        # 检测发帖数
        self.QFind("#bit-forum-content > div.page-header.d-print-none > div > div > div.col > div > div:nth-child(1)")
        # 检测邮箱
        self.QFind("#bit-forum-content > div.page-header.d-print-none > div > div > div.col > div > div:nth-child(2)")
        # 检测注册日期
        self.QFind("#bit-forum-content > div.page-header.d-print-none > div > div > div.col > div > div:nth-child(3)")
        # 检测个人介绍
        self.QFind("#bit-forum-content > div.page-body > div > div > div.col-lg-4 > div > div > div > div > h2")
        self.QFind("#profile_remark")
        # 检测帖子前的一个图标
        self.QFind("#profile_article_body > li:nth-child(1) > div.timeline-event-icon.bg-twitter-lt")
        # 检测帖子标题
        self.QFind("#profile_article_body > li:nth-child(1) > div.card.timeline-event-card > div > div > div > div > div.text-truncate")
        # 检测帖子发布时间
        self.QFind("#profile_article_body > li:nth-child(1) > div.card.timeline-event-card > div > div > div > div > div.text-muted.mt-2 > div > div.col > ul > li")
        # 检测帖子观看量
        self.QFind("#profile_article_body > li:nth-child(1) > div.card.timeline-event-card > div > div > div > div > div.text-muted.mt-2 > div > div.col-auto.d-none.d-md-inline > ul > li:nth-child(1)")
        # 检测帖子点赞量
        self.QFind("#profile_article_body > li:nth-child(1) > div.card.timeline-event-card > div > div > div > div > div.text-muted.mt-2 > div > div.col-auto.d-none.d-md-inline > ul > li:nth-child(2)")
        # 检测帖子评论量
        self.QFind("#profile_article_body > li:nth-child(1) > div.card.timeline-event-card > div > div > div > div > div.text-muted.mt-2 > div > div.col-auto.d-none.d-md-inline > ul > li:nth-child(3)")

    # 打开帖子
    def PersonalPostOpenPost(self):
        self.driver.find_element(By.CSS_SELECTOR,"#profile_article_body > li:nth-child(1) > div.card.timeline-event-card > div > div > div > div > div.text-truncate > a > strong").click()

(2)测试类封装

from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait

from part import PersonalPostFace
from Driver.Driver import MDriver
class test4:
    PersonalPost=''
    stat=0
    def __init__(self):
        self.PersonalPost=PersonalPostFace.PersonalPost()
    # 检测界面
    def PersonalPostFace(self):
        self.PersonalPost.Come()
        self.stat=self.PersonalPost.PersonalPostFace()
        MDriver.photo()
    # 进入帖子
    def PersonalPostGotoPost(self):
        self.PersonalPost.PersonalPostOpenPost()
        WebDriverWait(MDriver.driver,3).until(expected_conditions.presence_of_element_located((By.CSS_SELECTOR,"#bit-forum-content > div.page-body > div > div > div:nth-child(2) > h3")))
        MDriver.photo()

(3)测试实现

from test import fourtestclass
def test():
    # 检测界面
    fourtestclass.test4().PersonalPostFace()
    # 打开帖子
    fourtestclass.test4().PersonalPostGotoPost()

3.6个人中心功能测试

(1)基本功能

from selenium.webdriver.common.by import By

from Driver.Driver import MDriver
from part import BarFace
class PersonalCenterFace:
    driver=''
    def __init__(self):
        self.driver=MDriver.driver
    # 进入个人中心
    def Come(self):
        BarFace.BarFace().Come()
        BarFace.BarFace().BarHead()
        BarFace.BarFace().BarGotoPersonalCenter()
        self.driver.execute_script("document.body.style.zoom='0.5'")
    # 方便写代码
    def QFind(self,name):
        self.driver.find_element(By.CSS_SELECTOR,name)
    # 元素检测
    def PersonalCenterFace(self):
        # 用户中心的文字
        self.QFind("#bit-forum-content > div.page-header.d-print-none > div > div > div > h2")
        # 我的账户分栏
        self.QFind("#bit-forum-content > div.page-body > div > div > div > div.col-3.d-none.d-md-block.border-end > div > div > a")
        # 姓名
        self.QFind("#settings_nickname")
        # 头像
        self.QFind("#settings_avatar")
        # 必须填写的提示*号
        self.QFind("#bit-forum-content > div.page-body > div > div > div > div.col.d-flex.flex-column > div > div:nth-child(14) > div > div > form > div:nth-child(1) > label")
        # 修改头像按钮
        self.QFind("#bit-forum-content > div.page-body > div > div > div > div.col.d-flex.flex-column > div > div.row.align-items-center > div:nth-child(2) > a")
        # 昵称输入框及按钮
        self.QFind("#setting_input_nickname")
        self.QFind("#setting_submit_nickname")
        # 邮箱地址输入框及按钮
        self.QFind("#setting_input_email")
        self.QFind("#setting_submit_email")
        # 电话号码输入框及按钮
        self.QFind("#setting_input_phoneNum")
        self.QFind("#setting_submit_phoneNum")
        # 显示密码按钮
        self.QFind("#bit-forum-content > div.page-body > div > div > div > div.col.d-flex.flex-column > div > div:nth-child(14) > div > div > form > div:nth-child(1) > div > span > a > svg")
        # 原密码输入框
        self.QFind("#settings_input_oldPassword")
        # 新密码输入框
        self.QFind("#settings_input_newPassword")
        # 确认密码输入框
        self.QFind("#settings_input_passwordRepeat")
        # 确认修改按钮
        self.QFind("#settings_submit_password")
        #个人简介输入框及按钮
        self.QFind("#settings_textarea_remark")
        self.QFind("#settings_submit_remark")
    # 输入昵称
    def PersonalCenterScanfName(self,name):
        self.driver.find_element(By.CSS_SELECTOR,"#setting_input_nickname").send_keys(name)
    # 输入邮箱地址
    def PersonalCenterScanfEmail(self,email):
        self.driver.find_element(By.CSS_SELECTOR,"#setting_input_email").send_keys(email)
    # 输入电话号码
    def PersonalCenterScanfPhone(self,phone):
        self.driver.find_element(By.CSS_SELECTOR,"#setting_input_phoneNum").send_keys(phone)
    # 输入原密码
    def PersonalCenterScanfOldPass(self,oldpass):
        self.driver.find_element(By.CSS_SELECTOR,"#settings_input_oldPassword").send_keys(oldpass)
    # 输入新密码
    def PersonalCenterScanfNewPass(self,newpass):
        self.driver.find_element(By.CSS_SELECTOR,"#settings_input_newPassword").send_keys(newpass)
    # 输入确认新密码
    def PersonalCenterScanfAgainPass(self,againpass):
        self.driver.find_element(By.CSS_SELECTOR,"#settings_input_passwordRepeat").send_keys(againpass)
    # 输入个人简介
    def PersonalCenterScanfShot(self,shot):
        self.driver.find_element(By.CSS_SELECTOR,"#settings_textarea_remark").send_keys(shot)
    # 清空昵称输入框
    def PersonalCenterDeleteName(self):
        self.driver.find_element(By.CSS_SELECTOR,"#setting_input_nickname").clear()
    # 清空邮箱输入框
    def PersonalCenterDeleteEmail(self):
        self.driver.find_element(By.CSS_SELECTOR, "#setting_input_email").clear()
    # 清空电话号码输入框
    def PersonalCenterDeletePhone(self):
        self.driver.find_element(By.CSS_SELECTOR, "#setting_input_phoneNum").clear()
    # 清空原密码输入框
    def PersonalCenterDeleteOldPass(self):
        self.driver.find_element(By.CSS_SELECTOR, "#settings_input_oldPassword").clear()
    # 清空新密码输入框
    def PersonalCenterDeleteNewPass(self):
        self.driver.find_element(By.CSS_SELECTOR, "#settings_input_newPassword").clear()
    # 清空确认密码输入框
    def PersonalCenterDeleteAgainPass(self):
        self.driver.find_element(By.CSS_SELECTOR, "#settings_input_passwordRepeat").clear()
    # 清空个人简介
    def PersonalCenterDeleteShot(self):
        self.driver.find_element(By.CSS_SELECTOR, "#settings_textarea_remark").clear()
    # 点击修改昵称
    def PersonalCenterChangeName(self):
        self.driver.find_element(By.CSS_SELECTOR,"#setting_submit_nickname").click()
    # 点击修改邮箱
    def PersonalCenterChangeEmail(self):
        self.driver.find_element(By.CSS_SELECTOR,"#setting_submit_email").click()
    # 点击修改电话
    def PersonalCenterChangePhone(self):
        self.driver.find_element(By.CSS_SELECTOR,"#setting_submit_phoneNum").click()
    # 点击修改密码
    def PersonalCenterChangePass(self):
        self.driver.find_element(By.CSS_SELECTOR,"#settings_submit_password").click()
    # 点击修改个人简介
    def PersonalCenterChangeShot(self):
        self.driver.find_element(By.CSS_SELECTOR,"#settings_submit_remark").click()

(2)测试类封装

from Driver.Driver import MDriver
from part import PersonalCenterFace
class test5:
    Center=''
    def __init__(self):
        self.Center=PersonalCenterFace.PersonalCenterFace()
    # 检测界面
    def PersonalCenterFace(self):
        self.Center.Come()
        self.Center.PersonalCenterFace()
        MDriver.photo()
    # 修改昵称
    def PersonalCenterChageName(self,name):
        self.Center.PersonalCenterDeleteName()
        self.Center.PersonalCenterScanfName(name)
        self.Center.PersonalCenterChangeName()
        MDriver.photo()
    # 修改邮箱
    def PersonalCenterChageEmail(self,email):
        self.Center.PersonalCenterDeleteEmail()
        self.Center.PersonalCenterScanfEmail(email)
        self.Center.PersonalCenterChangeEmail()
        MDriver.photo()
    # 修改电话号码
    def PersonalCenterChagePhone(self,phone):
        self.Center.PersonalCenterDeletePhone()
        self.Center.PersonalCenterScanfPhone(phone)
        self.Center.PersonalCenterChangePhone()
        MDriver.photo()
    # 修改密码
    def PersonalCenterChagePass(self,old,new,re):
        self.Center.PersonalCenterDeleteOldPass()
        self.Center.PersonalCenterDeleteNewPass()
        self.Center.PersonalCenterDeleteAgainPass()
        self.Center.PersonalCenterScanfOldPass(old)
        self.Center.PersonalCenterScanfNewPass(new)
        self.Center.PersonalCenterScanfAgainPass(re)
        self.Center.PersonalCenterChangePass()
        MDriver.photo()
    # 修改个人简介
    def PersonalCenterChageShot(self,shot):
        self.Center.PersonalCenterDeleteShot()
        self.Center.PersonalCenterScanfShot(shot)
        self.Center.PersonalCenterChangeShot()
        MDriver.photo()

(3)测试实现

from test import fivetestclass
def test():
    # 检测界面元素
    fivetestclass.test5().PersonalCenterFace()

    # 修改昵称
    # 什么也不输入
    fivetestclass.test5().PersonalCenterChageName("")
    # 输入纯空白字符
    fivetestclass.test5().PersonalCenterChageName("   ")
    # 输入原昵称
    fivetestclass.test5().PersonalCenterChageName("hhhh")
    # 输入新昵称
    fivetestclass.test5().PersonalCenterChageName("zhangzhangsan")

    # 修改邮箱
    # 什么也不输入
    fivetestclass.test5().PersonalCenterChageEmail("")
    # 输入纯空白字符
    fivetestclass.test5().PersonalCenterChageEmail("   ")
    # 输入原邮箱
    fivetestclass.test5().PersonalCenterChageEmail("3456544567qq.com")
    # 输入非邮箱格式
    fivetestclass.test5().PersonalCenterChageEmail("得完其25")
    # 输入新邮箱
    fivetestclass.test5().PersonalCenterChageEmail("12345qq.com")

    # 修改电话号
    # 什么也不输入
    fivetestclass.test5().PersonalCenterChagePhone("")
    # 输入纯空白字符
    fivetestclass.test5().PersonalCenterChagePhone("  ")
    # 输入原电话号
    fivetestclass.test5().PersonalCenterChagePhone("15683759385")
    # 输入非电话号格式
    fivetestclass.test5().PersonalCenterChagePhone("123456709876543")
    # 输入新电话号
    fivetestclass.test5().PersonalCenterChagePhone("15939603056")

    # 修改个人简介
    # 什么也不输入
    fivetestclass.test5().PersonalCenterChageShot("")
    # 输入纯空白字符
    fivetestclass.test5().PersonalCenterChageShot("  ")
    # 输入原简介内容
    fivetestclass.test5().PersonalCenterChageShot("对对对")
    # 输入新内容
    fivetestclass.test5().PersonalCenterChageShot("怼怼怼")

    # 修改密码
    # 原密码错误,新密码与原密码相同
    fivetestclass.test5().PersonalCenterChagePass("12","12345","12345")
    # 原密码错误,新密码与原密码不同
    fivetestclass.test5().PersonalCenterChagePass("12","12345","1234")

    # 原密码正确,新密码与原密码相同
    # fivetestclass.test5().PersonalCenterChagePass("1234","1234","1234")
    # 原密码正确,新密码与原密码不同,新密码与确认密码不同
    fivetestclass.test5().PersonalCenterChagePass("1234","12345","123")
    # 原密码正确,新密码与原密码不同,新密码与确认密码相同
    fivetestclass.test5().PersonalCenterChagePass("1234","12345","12345")


3.7退出功能测试

(1)基本功能

from part import BarFace

class LogOut:
    def Come(self):
        BarFace.BarFace().Come()
        BarFace.BarFace().BarHead()
    def Out(self):
        BarFace.BarFace().BarLogOut()

(2)测试类封装

from part import LogOut
from Driver.Driver import MDriver
class test6:
    Out=''
    def __init__(self):
        self.Out=LogOut.LogOut()

    def LogOut(self):
        self.Out.Come()
        self.Out.Out()
        MDriver.photo()

(3)测试实现

from test import sixtestclass
def test():
    sixtestclass.test6().LogOut()

3.8发布帖子测试

(1)基本功能

from selenium.webdriver.common.by import By

from part import BarFace
from Driver.Driver import MDriver
class SendPost:
    driver=''
    def __init__(self):
        self.driver=MDriver.driver
    # 进入编辑界面
    def Come(self):
        BarFace.BarFace().Come()
        self.driver.find_element(By.CSS_SELECTOR,"#bit-forum-content > div.page-header.d-print-none > div > div > div.col-auto.ms-auto.d-print-none > div > a.btn.btn-primary.d-none.d-sm-inline-block.article_post").click()
        self.driver.execute_script("document.body.style.zoom='0.5'")
    # 方便写代码
    def QFind(self,name):
        self.driver.find_element(By.CSS_SELECTOR,name)
    # 界面元素
    def SendPostFace(self):
        # 查找板块选择框
        self.QFind("#article_post_borad")
        # 查找标题输入框
        self.QFind("#article_post_title")
        # 查找写作编辑器
        self.QFind("#article_post_title")
        # 查找发布按钮
        self.QFind("#article_post_submit")
        # 查找“发新帖”文字
        self.QFind("#article_post_submit")

    # 选择Java板块
    def SendPostChageBlock(self):
        self.driver.find_element(By.CSS_SELECTOR,"#article_post_borad").click()
        self.driver.find_element(By.CSS_SELECTOR,"#article_post_borad > option:nth-child(1)").click()
    # 输入标题
    def SendPostTitle(self,title):
        self.driver.find_element(By.CSS_SELECTOR,"#article_post_title").send_keys(title)
    # 输入内容
    def SendPostWord(self):
        self.driver.find_element(By.CSS_SELECTOR,"#edit-article > div.editormd-toolbar > div > ul > li:nth-child(12) > a > i").click()
    # 点击发布
    def SendPostPut(self):
        self.driver.find_element(By.CSS_SELECTOR,"#article_post_submit").click()
    # 清空标题
    def SendPostDeleteTitle(self):
        self.driver.find_element(By.CSS_SELECTOR,"#article_post_title").clear()
    # 清空标题
    def SendPostDeleteWord(self):
        self.driver.find_element(By.CSS_SELECTOR,"#article_post_title").clear()

(2)测试类封装

from part import SendPostFace
from Driver.Driver import MDriver
class test7:
    Send=''
    def __init__(self):
        self.Send=SendPostFace.SendPost()
    # 界面元素检测
    def SendPostFace(self):
        self.Send.Come()
        self.Send.SendPostFace()
        MDriver.photo()
    # 选择Java板块
    def SendPostChageBlock(self):
        self.Send.SendPostChageBlock()
        MDriver.photo()
    # 标题填写
    def SendPostTitle(self,title):
        self.Send.SendPostDeleteTitle()
        self.Send.SendPostTitle(title)
    # 内容填写
    def SendPostWord(self):
        self.Send.SendPostDeleteWord()
        self.Send.SendPostWord()
    # 发布
    def SendPostPut(self):
        self.Send.SendPostPut()
        MDriver.photo()

(3)测试实现

from test import seventestclass
def test():
    # 检测界面元素
    seventestclass.test7().SendPostFace()
    # 选择Java板块
    seventestclass.test7().SendPostChageBlock()

    # 发布
    # 有标题,无内容发布
    seventestclass.test7().SendPostTitle("1234567")
    seventestclass.test7().SendPostPut()
    # 无标题,有内容发布
    seventestclass.test7().SendPostTitle("")
    seventestclass.test7().SendPostWord()
    seventestclass.test7().SendPostPut()

    # 纯空白标题,有内容发布
    seventestclass.test7().SendPostTitle("   ")
    seventestclass.test7().SendPostWord()
    seventestclass.test7().SendPostPut()

    # 有标题,有内容发布
    seventestclass.test7().SendPostTitle("1234567")
    seventestclass.test7().SendPostWord()
    seventestclass.test7().SendPostPut()

3.9论坛主页功能测试

(1)基本功能

import time

from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait

from Driver.Driver import MDriver
from part import BarFace

class Froum:
    driver=''
    def __init__(self):
        self.driver=MDriver.driver
    # 进入论坛主页
    def Come(self):
        BarFace.BarFace().Come()
    # 方便写代码
    def QFind(self,name):
        self.driver.find_element(By.CSS_SELECTOR,name)
    # 界面元素检测
    def ForumFace(self):
        # 发布帖子按钮
        self.QFind("#bit-forum-content > div.page-header.d-print-none > div > div > div.col-auto.ms-auto.d-print-none > div > a.btn.btn-primary.d-none.d-sm-inline-block.article_post")
        # 帖子标题
        self.QFind("#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a")
        # 首页文字
        self.QFind("#article_list_board_title")
        # 帖子作者要头像
        self.QFind("#artical-items-body > div:nth-child(1) > div > div.col-auto > span")
        # 帖子发布者任务图标及姓名
        self.QFind("#artical-items-body > div:nth-child(1) > div > div.col > div.text-muted.mt-2 > div > div.col > ul > li:nth-child(1)")
        # 帖子时间
        self.QFind("#artical-items-body > div:nth-child(1) > div > div.col > div.text-muted.mt-2 > div > div.col > ul > li:nth-child(2)")
        # 帖子观看量
        self.QFind("#artical-items-body > div:nth-child(1) > div > div.col > div.text-muted.mt-2 > div > div.col-auto.d-none.d-md-inline > ul > li:nth-child(1)")
        # 帖子点赞量
        self.QFind("#artical-items-body > div:nth-child(1) > div > div.col > div.text-muted.mt-2 > div > div.col-auto.d-none.d-md-inline > ul > li:nth-child(2)")
        # 帖子评论量
        self.QFind("#artical-items-body > div:nth-child(1) > div > div.col > div.text-muted.mt-2 > div > div.col-auto.d-none.d-md-inline > ul > li:nth-child(3)")
    # 进入帖子编辑页
    def ForumGotoSendPost(self):
        self.driver.find_element(By.CSS_SELECTOR,"#bit-forum-content > div.page-header.d-print-none > div > div > div.col-auto.ms-auto.d-print-none > div > a.btn.btn-primary.d-none.d-sm-inline-block.article_post").click()
    # 进入帖子
    def ForumOpenPost(self,selector):
        self.driver.execute_script("arguments[0].scrollIntoView();",self.driver.find_element(By.CSS_SELECTOR,selector))
        time.sleep(1)
        self.driver.find_element(By.CSS_SELECTOR,selector).click()
    # 返回主页
    def GoHome(self):
        self.driver.execute_script("arguments[0].scrollIntoView();",self.driver.find_element(By.CSS_SELECTOR,"#nav_board_index > a"))
        time.sleep(1)
        BarFace.BarFace().BarHome()

(2)测试类封装

from Driver.Driver import MDriver
from part import ForumFace
class test8:
    forum=''
    def __init__(self):
        self.forum=ForumFace.Froum()
    # 界面检测
    def ForumFace(self):
        self.forum.Come()
        self.forum.ForumFace()
        MDriver.photo()
    # 进入帖子编辑页
    def ForumGotoSendPost(self):
        self.forum.ForumGotoSendPost()
        MDriver.photo()
    # 进入帖子
    def ForumOpenPost(self,name):
        self.forum.ForumOpenPost(name)
        MDriver.photo()
    # 返回主页
    def GoHome(self):
        self.forum.GoHome()

(3)测试实现

from test import eighttestclass
def test():
    # 检测界面元素
    eighttestclass.test8().ForumFace()
    # 进入帖子编辑页
    eighttestclass.test8().ForumGotoSendPost()
    eighttestclass.test8().GoHome()
    # 进入别人帖子
    eighttestclass.test8().ForumOpenPost("#artical-items-body > div:nth-child(10) > div > div.col > div.text-truncate > a > strong")
    eighttestclass.test8().GoHome()
    # 进入自己帖子
    eighttestclass.test8().ForumOpenPost("#artical-items-body > div:nth-child(11) > div > div.col > div.text-truncate > a > strong")


3.10帖子详情页功能测试

(1)基本功能

import time

from selenium.webdriver.common.by import By


from Driver.Driver import MDriver

class PostDetail:
    driver=''
    def __init__(self):
        self.driver=MDriver.driver
    # 方便写代码
    def QFind(self,name):
        self.driver.find_element(By.CSS_SELECTOR,name)
    # 界面元素检测
    # 共同元素
    def PostDetailFaceSame(self):
        self.driver.execute_script("document.body.style.zoom='0.5'")
        # 标题
        self.QFind("#bit-forum-content > div.page-header.d-print-none > div > div.row.g-2.align-items-center > div")
        # 时间、观看量、点赞数、评论数
        self.QFind("#bit-forum-content > div.page-header.d-print-none > div > div.col-auto.d-none.d-md-inline > ul > li:nth-child(1)")
        self.QFind("#bit-forum-content > div.page-header.d-print-none > div > div.col-auto.d-none.d-md-inline > ul > li:nth-child(2)")
        self.QFind("#bit-forum-content > div.page-header.d-print-none > div > div.col-auto.d-none.d-md-inline > ul > li:nth-child(3)")
        self.QFind("#bit-forum-content > div.page-header.d-print-none > div > div.col-auto.d-none.d-md-inline > ul > li:nth-child(4)")
        # 头像
        self.QFind("#article_details_author_avatar")
        # 作者名
        self.QFind("#bit-forum-content > div.page-body > div > div > div:nth-child(1) > div.col-3.card > div > h3")
        # 最新回复
        self.QFind("#bit-forum-content > div.page-body > div > div > div:nth-child(2)")
        # 点赞按钮
        self.QFind("#details_btn_like_count")
        # 评论
        # 如果没有评论,检测默认文字
        time.sleep(0.2)
        if self.driver.find_element(By.CSS_SELECTOR,"#details_article_replyCount").text=='0':
            self.QFind("#details_reply_area > p")
            # 如果有评论
        else:
            # 评论者头像
            self.QFind("#details_reply_area > div:nth-child(1) > div.col-3.card > div > span")
            # 评论者名字
            self.QFind("#details_reply_area > div:nth-child(1) > div.col-3.card > div > h3")
            # 评论者回复内容
            self.QFind("#details_reply_area > div:nth-child(1) > div.col-9.card.card-lg > div.card-body")
            # 评论时间
            self.QFind("#details_reply_area > div:nth-child(1) > div.col-9.card.card-lg > div.card-footer.bg-transparent.mt-auto > div > div > ul > li")
        # 评论编辑器
        self.QFind("#article_details_reply")
        # 回复按钮
        self.QFind("#details_btn_article_reply")
    # 别人帖子元素
    def PostDetailFaceOther(self):
        # 给作者发私信按钮
        self.QFind("#btn_details_send_message")
    # 点赞功能
    def PostDetailLike(self):
        self.driver.find_element(By.CSS_SELECTOR,"#details_btn_like_count").click()
    # 给作者发私信
    def PostDetailSendToAuthor(self,name):
        self.driver.find_element(By.CSS_SELECTOR,"#btn_details_send_message").click()
        self.driver.find_element(By.CSS_SELECTOR,"#index_message_receive_content").send_keys(name)
        time.sleep(1)
        self.driver.find_element(By.CSS_SELECTOR,"#btn_index_send_message").click()
    # 发送评论
    def PostDetailSendComment(self,name):
        self.driver.execute_script("arguments[0].scrollIntoView();",self.driver.find_element(By.CSS_SELECTOR,"#details_btn_article_reply"))
        time.sleep(0.5)
        self.driver.find_element(By.CSS_SELECTOR,"#article_details_reply > div.editormd-toolbar > div > ul > li:nth-child(39) > a > i").click()
        if  name is None:
            self.driver.find_element(By.CSS_SELECTOR,"#details_btn_article_reply").click()
        else:
            self.driver.find_element(By.CSS_SELECTOR,"#article_details_reply > div.editormd-toolbar > div > ul > li:nth-child(4) > a > i").click()
            self.driver.find_element(By.CSS_SELECTOR,"#details_btn_article_reply").click()

(2)测试类封装

from Driver.Driver import MDriver
from part import PostDetailsFace
from part import BarFace
from part import ForumFace
class test9:
    Detail=''
    def __init__(self):
        self.Detail=PostDetailsFace.PostDetail()
    # 进入主页
    def Home(self):
        BarFace.BarFace().Come()
    # 检测帖子界面
    # 别人的帖子界面
    def PostDetailOther(self,select):

        BarFace.BarFace().BarHome()
        ForumFace.Froum().ForumOpenPost(select)
        self.Detail.PostDetailFaceSame()
        self.Detail.PostDetailFaceOther()
        MDriver.photo()
    # 自己的帖子界面
    def PostDetailMy(self,select):
        BarFace.BarFace().BarHome()
        ForumFace.Froum().ForumOpenPost(select)
        self.Detail.PostDetailFaceSame()
        MDriver.photo()
    # 给文章点赞
    def PostDetailLike(self):
        self.Detail.PostDetailLike()
    # 给别人发私信
    def PostDetailSendWord(self,name):
        self.Detail.PostDetailSendToAuthor(name)
        MDriver.photo()
    # 发布评论
    def PostDetailSendComment(self,name):
        self.Detail.PostDetailSendComment(name)
        MDriver.photo()

(3)测试实现

from test import ninetestclass
def test():
    # 进入主页
    ninetestclass.test9().Home()
    # 检测自己帖子元素
    ninetestclass.test9().PostDetailMy("#artical-items-body > div:nth-child(5) > div > div.col > div.text-truncate > a")
    # 检测别人的帖子元素
    ninetestclass.test9().PostDetailOther("#artical-items-body > div:nth-child(9) > div > div.col > div.text-truncate > a > strong")
    # 给文章点赞
    ninetestclass.test9().PostDetailLike()
    # 发私信
    # 内容为空
    ninetestclass.test9().PostDetailSendWord("")
    # 内容不为空
    ninetestclass.test9().PostDetailSendWord("返回")
    # 发评论
    # 评论为空
    ninetestclass.test9().PostDetailSendComment("")
    # 评论不为空
    ninetestclass.test9().PostDetailSendComment("***")

四、测试发现的Bug

1.Bug描述:注册界面的条款链接无法跳转

  预期效果:点击注册界面的条款链接会跳转到条款说明

  实际效果:点击后没有反应

2.Bug描述:登陆后屏幕上方的分类栏缺少分类文字

  预期效果:每个分类栏都有对应的分类文字显示

  实际效果:部分分类栏没有文字

3、Bug描述:功能栏搜索功能失效 

    预期效果:搜索指定内容后,下方会显示包括指定搜索元素关键字的帖子

    实际效果:搜索后界面不变

4.Bug描述:功能栏的回复消息功能,回复的内容为纯空白字符,依旧可以回复消息

  预期效果:回复消息的内容不能为纯空白字符

  实际效果:纯空白字符也可以回复

5.Bug描述:个人中心的邮箱信息可以乱填并修改

  预期效果:填写邮箱信息时,在填写固定格式时才能修改

  实际效果:可以填写任何东西并修改

6.Bug描述:个人中心的电话信息可以乱填并修改

  预期效果:填写电话信息时,在填写固定格式时才能修改

  实际效果:可以填写任何东西并修改

7.Bug描述:个人中心的修改密码,新旧密码相同时,依旧可以修改成功

  预期效果:修改密码时,新旧密码相同无法修改,并出现提醒

  实际效果:新旧密码相同时,依旧发生了修改

8.Bug描述:帖子详情页,发送的评论可以是纯空白字符

  预期效果:纯空白字符无法发送

  实际效果:纯空白字符可以发送

9.Bug描述:在自己的帖子详情页,没有编辑和修改选项

  预期效果:在自己的帖子详情页,有编辑和修改选项

  实际效果:没有编辑和修改选项

 10.Bug描述:多个设备可以同时登陆一个账号

    预期效果:多个设备不能同时登陆一个账号,最多存在一个登陆设备

    实际效果:多个设备可以同时登陆一个账号

 11.Bug描述:上传图片后,头像依旧无法修改

    预期效果:上传图片后头像可以修改

    实际效果:上传图片后,头像依旧没有修改

五、总结

本次测针对论坛项目设计了多个测试用例,测试用例涵盖范围广、深度深,有效的测试了论坛的基本功能,并发现了一些问题,并将这些问题罗列了出来,方便以后修改。这次的测试为用户今后使用本产品的体验提供了有力保障。

 

相关文章:

  • 汽车行业可信数据空间研究探索
  • 人工智能与区块链融合:开启数字信任新时代
  • 第 2 章 | 智能合约攻击图谱全景解析
  • 【数组去重、分组和拷贝】
  • Vue 3使用 Socket
  • Skynet 中 snlua 服务启动整体流程分析
  • NetMizer-日志管理系统-远程命令执行漏洞挖掘
  • 基于SpringBoot的美食分享系统-测试报告
  • AppArmor 使用说明
  • STM32蜂鸣器播放音乐
  • Git 删除敏感密钥
  • OpenCV图像拼接(6)图像拼接模块的用于创建权重图函数createWeightMap()
  • C++11之深度理解lambda表达式
  • Java学习总结-Stream流
  • SQLAlchemy关键词搜索技术深度解析:从基础过滤到全文检索
  • 沪深300股指期货的看涨看跌方式是怎样的?
  • 简单介绍My—Batis
  • CSS居中
  • Sql优化
  • Java Collection API增强功能系列之六 改进的 ConcurrentHashMap:归约、搜索、计数与 Set 视图详解
  • 台州市城市建设规划局网站/谷歌网页版入口
  • 华为荣耀手机商城官方网站/平台软件定制开发
  • 搜索引擎营销的典型案例/苏州seo免费咨询
  • 政府网站建设 特色栏目展示/软文编辑器
  • 郑州网站推广流程/怎么推广自己的店铺
  • 福州婚庆网站建设哪家好/搜索关键词优化排名