目录
一、项目背景
本次测试的项目是一个“论坛系统”web网站,该论坛系统可以实现发布帖子,记录帖子的发布时间、内容等信息,同时能够对帖子进行分类管理,方便用户管理与查看不同分类的帖子,同时用户可查看本人以及其他人发布的帖子,同时能够在帖子下方进行点赞评论回复。本次测对论坛系统进行测试,测试核心内容包括登录、注册、编辑、查看、兼容性及安全性等测试内容。
二、测试计划
2.1 测试用例
本次测试主要对论坛系统进行功能测试、界面测试、兼容性测试、易用性测试、安全性测试;由于设备限制,无法进行性能测试。同时使用selenium编写自动化脚本对论坛系统进行自动化测试。
测试用例如下:
2.2 执行测试用例
1、注册页面测试
(1)介绍
注册信息包括用户名、昵称、密码以及确认密码,同时需要同意协议,完成以上所有步骤才能注册成功。
(2)测试用例展示
测试用例1:输入正确的用户名、昵称、密码
预计结果:成功注册,跳转到登录页,成功登录
实际结果:成功注册,跳转到登录页,成功登录
测试用例2:仅用户名为空
预计结果:提示用户名不能为空
实际结果:提示用户名不能为空
测试用例3:仅昵称为空
预计结果:提示昵称不能为空
实际结果:提示昵称不能为空
测试用例4:仅密码为空
预计结果:提示密码不能为空
实际结果:提示密码不能为空
测试用例5:仅确认密码为空
预计结果:提示请检查确认密码
实际结果:提示请检查确认密码
测试用例6:全部为空
预计结果:全部提示
实际结果:全部提示
测试用例7:确认密码与首次填写密码不一致
预计结果:提示请检查确认密码
实际结果:提示请检查确认密码
测试用例8:用户名重复注册
预计结果:提示用户已存在
实际结果:提示用户已存在
测试用例9:昵称重复注册
预计结果:提示昵称已存在
实际结果:成功注册
测试用例10:不勾选协议
预计结果:标红选项
实际结果:标红选项
测试用例11:点击协议
预计结果:出现协议详细内容
实际结果:未出现协议详细内容
测试用例12:点击登录
预计结果:跳转至登录页面
实际结果:跳转至登录页面
2、登录页面测试
(1)介绍
正确输入用户名和密码跳转至论坛首页
(2)测试用例展示
测试用例1:输入正确的用户名和密码
预计结果:正常登录
实际结果:正常登录
测试用例2:用户名为空,输入正确的密码
预计结果:提示用户名不能为空
实际结果:提示用户名不能为空
测试用例3:密码为空,输入正确的用户名
预计结果:提示密码不能为空
实际结果:提示密码不能为空
测试用例4:用户名为空,密码为空
预计结果:提示用户名和密码不能为空
实际结果:提示用户名和密码不能为空
测试用例5:输入正确的用户名,错误的密码
预计结果:提示用户名或密码错误
实际结果:提示用户名或密码错误
测试用例6:输入错误的用户名,正确的密码
预计结果:提示用户名或密码错误
实际结果:提示用户名或密码错误
测试用例7:输入错误的用户名,错误的密码
预计结果:提示用户名或密码错误
实际结果:提示用户名或密码错误
测试用例8:点击注册
预计结果:跳转至注册页面
实际结果:跳转至注册页面
3、论坛首页测试
(1)介绍
论坛首页可以查看用户发布的帖子,各种分类以及用户信息,同时具有查询功能。
(2)测试用例展示
测试用例1:未登录状态下进入首页
预计结果:跳转至登录页面
实际结果:未跳转至登录页面
测试用例2:页面信息
预计结果:正常显示
实际结果:正常显示
测试用例3:查看各个板块
预计结果:板块正常跳转,帖子列表,数量显示正确
实际结果:板块正常跳转,帖子列表,数量显示正确
测试用例4:搜索
预计结果:成功搜索相关内容
实际结果:未搜索相关内容
测试用例5:切换夜晚模式
预计结果:成功切换至夜晚模式
实际结果:成功切换至夜晚模式
测试用例6:切换白天模式
预计结果:成功切换至白天模式
实际结果:成功切换至白天模式
测试用例7:点击信息
预计结果:出现已收到信息
实际结果:出现已收到信息
测试用例8:点击用户信息
预计结果:出现“我的帖子”、“个人中心”、“退出”选项
实际结果:出现“我的帖子”、“个人中心”、“退出”选项
4、帖子详情页测试
(1)介绍
在首页点击任意帖子标题进入该帖子的详情页面,其记录了帖子的标题、内容、作者信息等内容,还可对帖子进行回复。如果是当前用户所发布的帖子,则可对帖子进行修改删除,如果是其他用户的帖子则可以对作者发送私信,并对该帖子只有“只读”权限。
(2) 测试用例展示
测试用例1:点击作者昵称
预计结果:跳转至跳转至改用户“我的帖子”页
实际结果:跳转至跳转至改用户“我的帖子”页
测试用例2:点赞
预计结果:单击点赞,点赞数加1,再次点击取消,点赞数减1
实际结果:再次点击不能取消
测试用例3:点击编辑
预计结果:进入帖子修改页面
实际结果:进入帖子修改页面
测试用例4:取消删除
预计结果:弹窗消除,帖子未被删除,相关数量显示不变
实际结果:弹窗消除,帖子未被删除,相关数量显示不变
测试用例5:确认删除
预计结果:回到首页,帖子被删除,相关数量显示减1
实际结果:回到首页,帖子被删除,相关数量显示减1
测试用例6:发布回复
预计结果:显示回复内容,回复编辑区清空,评论数加1
实际结果:显示回复内容,回复编辑区未清空,评论数加1
测试用例7:在其他用户帖子下是否只有“只读”权限
预计结果:只有“只读”权限
实际结果:只有“只读”权限
测试用例8:取消发私信
预计结果:私信弹窗消失
实际结果:私信弹窗消失
测试用例9:内容为空发送私信
预计结果:发送失败,提示输入内容
实际结果:发送失败,提示输入内容
测试用例10:内容不为空发送私信
预计结果:发送成功
实际结果:发送成功
5、帖子编辑页测试
(1)介绍
帖子编辑页分为新增帖子和修改帖子,新增帖子发布新的帖子内容,修改帖子修改已有帖子内容。
(2)测试用例展示
测试用例1:选择“java”板块发布帖子
预计结果:发布成功,首页与“java”板块显示该帖子
实际结果:发布成功,首页与“java”板块显示该帖子
测试用例2:选择“c++”板块发布帖子
预计结果:发布成功,首页与“c++”板块显示该帖子
实际结果:发布成功,首页与“c++”板块显示该帖子
测试用例3:不填写标题
预计结果:提示输入标题
实际结果:提示输入标题
测试用例4:不填写内容
预计结果:提示输入内容
实际结果:提示输入内容
测试用例5:不填写标题和内容
预计结果:提示输入标题
实际结果:提示输入标题
测试用例6:标题修改为“修改帖子测试”
预计结果:跳转到首页,提示修改成功,标题修改,内容不变
实际结果:跳转到首页,提示修改成功,标题修改,内容不变
测试用例7:内容修改为“修改帖子内容测试”
预计结果:跳转到首页,提示修改成功,内容修改,标题不变
实际结果:跳转到首页,提示修改成功,内容修改,标题不变
测试用例8:标题与内容都修改为“修改帖子标题和内容”
预计结果:跳转到首页,提示修改成功,标题和内容都修改
实际结果:跳转到首页,提示修改成功,标题和内容都修改
测试用例9:标题与内容都不修改
预计结果:跳转到首页,提示修改成功,标题和内容都不修改
实际结果:跳转到首页,提示修改成功,标题和内容都不修改
测试用例10:修改标题为空
预计结果:提示标题不能为空
实际结果:提示标题不能为空
测试用例11:修改内容为空
预计结果:提示内容不能为空
实际结果:提示内容不能为空
测试用例12:修改标题和内容为空
预计结果:提示标题不能为空
实际结果:提示标题不能为空
6、“我的帖子”页测试
(1)介绍
“我的帖子”页由右上角用户信息点击进入,也可以由帖子详情页点击作者昵称进入,该页面统计了用户发布的帖子,以及各帖子的信息,能够方便用户管理。
(2)测试用例展示
测试用例1:检测当前用户显示信息
预计结果:没有异常
实际结果:发帖数与实际数不匹配,其他显示正常
测试用例2:检测其他用户显示信息
预计结果:没有异常
实际结果:没有异常
测试用例3:取消发私信
预计结果:私信弹窗消失
实际结果:私信弹窗消失
测试用例4:内容为空发送私信
预计结果:发送失败,提示输入内容
实际结果:发送失败,提示输入内容
7、个人主页测试
(1)介绍
通过点击右上角用户信息“个人中心”进入,该页面可以修改用户个人信息。
(2)测试用例展示
测试用例1:修改头像
预计结果:修改成功,各个页面显示正常
实际结果:修改失败,且没有提示
测试用例2:修改昵称为空
预计结果:提示修改失败
实际结果:未提示修改失败
测试用例3:修改昵称为:张三
预计结果:提示修改成功,各个页面显示正常
实际结果:提示修改成功,各个页面显示正常
测试用例4:修改邮箱地址为:邮箱地址
预计结果:提示修改成功,各个页面显示正常
实际结果:提示修改成功,各个页面显示正常
测试用例5:修改电话号码为:123456789
预计结果:提示修改成功
实际结果:提示修改成功
测试用例6:正常填写原密码与新密码
预计结果:跳转到登录页面,重新登录
实际结果:跳转到登录页面,重新登录
测试用例7:原密码为空
预计结果:提示输入原密码
实际结果:提示输入原密码,提示不明显
测试用例8:新原密码为空
预计结果:提示输入新原密码
实际结果:提示输入新原密码,提示不明显
测试用例9:确认密码为空
预计结果:提示输入确认密码
实际结果:提示输入确认密码,提示不明显
测试用例10:全部为空
预计结果:提示输入原密码
实际结果:提示输入原密码,提示不明显
测试用例11:原密码错误填写
预计结果:提示原密码填写错误
实际结果:提示内容不明确
测试用例12:确认密码与新原密码填写不一致
预计结果:提示两次密码不一致
实际结果:提示两次密码不一致
测试用例13:原密码与新密码一致
预计结果:提示新密码不能与原密码一致
实际结果:修改成功,跳转到登录页面
8、私信回复测试
测试用例1:查看来信
预计结果:出现信息详情弹窗
实际结果:出现信息详情弹窗
测试用例2:点击回复
预计结果:出现私信弹窗
实际结果:出现私信弹窗
9、兼容性测试
测试用例:分别在谷歌游览器、联想游览器、Edge游览器下进入个人博客系统
预期结果:三个游览器下无区别
Google:
联想游览器:
Edge:
实际结果:三个游览器下无区别
10、安全性测试
未显示密码
三、自动化测试
3.1 测试工具
系统: windows11
浏览器:Microsoft Edge版本 136.0.3240.50 (正式版本) (64 位)
语言:python
模块:selenium4.0
软件: pyCharm2025.1
3.2 创建驱动
Utils.py
import datetime
import os
import sys
from selenium import webdriver
from selenium.webdriver.edge.options import Options
from selenium.webdriver.edge.service import Service
from webdriver_manager.microsoft import EdgeChromiumDriverManager
class Driver:
#定义构造函数
#声明变量
driver = ""
def __init__(self):
options = Options()
self.driver = webdriver.Edge(service = Service(EdgeChromiumDriverManager().install()),options = options)
#创建隐式等待
self.driver.implicitly_wait(10)
# 创建屏幕截图
def getScreeshot(self):
#已当前时间对图片文件进行命名
dirname = datetime.datetime.now().strftime("%Y-%m-%d")
#判断是否存在当天文件,如果没有则创建新文件
if not os.path.exists("../images/"+dirname):
os.mkdir("../images/"+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("../images/"+dirname+"/"+filename)
ForumDriver = Driver()
3.3 注册页面
ForumRegister.py
import datetime
from selenium.webdriver.common.by import By
from common.Utils import ForumDriver
class ForumRegister:
url = ""
driver = ""
def __init__(self):
self.url = "http://127.0.0.1:58080/sign-up.html"
self.driver = ForumDriver.driver
self.driver.get(self.url)
#用户名为空
def Registerfailtest1(self):
#清空用户名
self.driver.find_element(By.CSS_SELECTOR, "#username").clear()
# 清空昵称
self.driver.find_element(By.CSS_SELECTOR, "#nickname").clear()
# 清空密码
self.driver.find_element(By.CSS_SELECTOR, "#password").clear()
# 清空确认密码
self.driver.find_element(By.CSS_SELECTOR, "#passwordRepeat").clear()
#点击同意协议
self.driver.find_element(By.CSS_SELECTOR, "#policy").click()
# 填写昵称
self.driver.find_element(By.CSS_SELECTOR, "#nickname").send_keys("cc")
# 填写密码
self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")
# 填写确认密码
self.driver.find_element(By.CSS_SELECTOR, "#passwordRepeat").send_keys("123456")
# 点击注册
self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
# 添加一个屏幕截图
ForumDriver.getScreeshot()
# 判断是否有提示
tip = self.driver.find_element(By.CSS_SELECTOR, "#signUpForm > div > div:nth-child(2) > div").text
assert tip == "用户名不能为空"
# 昵称为空
def Registerfailtest2(self):
# 清空用户名
self.driver.find_element(By.CSS_SELECTOR, "#username").clear()
# 清空昵称
self.driver.find_element(By.CSS_SELECTOR, "#nickname").clear()
# 清空密码
self.driver.find_element(By.CSS_SELECTOR, "#password").clear()
# 清空确认密码
self.driver.find_element(By.CSS_SELECTOR, "#passwordRepeat").clear()
# 点击同意协议
self.driver.find_element(By.CSS_SELECTOR, "#policy").click()
# 填写用户名
self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("cc")
# 填写密码
self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")
# 填写确认密码
self.driver.find_element(By.CSS_SELECTOR, "#passwordRepeat").send_keys("123456")
# 点击注册
self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
# 添加一个屏幕截图
ForumDriver.getScreeshot()
# 判断是否有提示
tip = self.driver.find_element(By.CSS_SELECTOR, "#signUpForm > div > div:nth-child(3) > div").text
assert tip == "昵称不能为空"
# 密码为空
def Registerfailtest3(self):
# 清空用户名
self.driver.find_element(By.CSS_SELECTOR, "#username").clear()
# 清空昵称
self.driver.find_element(By.CSS_SELECTOR, "#nickname").clear()
# 清空密码
self.driver.find_element(By.CSS_SELECTOR, "#password").clear()
# 清空确认密码
self.driver.find_element(By.CSS_SELECTOR, "#passwordRepeat").clear()
# 点击同意协议
self.driver.find_element(By.CSS_SELECTOR, "#policy").click()
# 填写用户名
self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("cc")
# 填写昵称
self.driver.find_element(By.CSS_SELECTOR, "#nickname").send_keys("123456")
# 填写确认密码
self.driver.find_element(By.CSS_SELECTOR, "#passwordRepeat").send_keys("123456")
# 点击注册
self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
# 添加一个屏幕截图
ForumDriver.getScreeshot()
# 判断是否有提示
tip = self.driver.find_element(By.CSS_SELECTOR, "#signUpForm > div > div:nth-child(4) > div > div").text
assert tip == "密码不能为空"
# 确认密码为空
def Registerfailtest4(self):
# 清空用户名
self.driver.find_element(By.CSS_SELECTOR, "#username").clear()
# 清空昵称
self.driver.find_element(By.CSS_SELECTOR, "#nickname").clear()
# 清空密码
self.driver.find_element(By.CSS_SELECTOR, "#password").clear()
# 清空确认密码
self.driver.find_element(By.CSS_SELECTOR, "#passwordRepeat").clear()
# 点击同意协议
self.driver.find_element(By.CSS_SELECTOR, "#policy").click()
# 填写用户名
self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("cc")
# 填写昵称
self.driver.find_element(By.CSS_SELECTOR, "#nickname").send_keys("cc")
# 填写密码
self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")
# 点击注册
self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
# 添加一个屏幕截图
ForumDriver.getScreeshot()
# 判断是否有提示
tip = self.driver.find_element(By.CSS_SELECTOR, "#signUpForm > div > div:nth-child(5) > div > div").text
assert tip == "请检查确认密码"
# 全部为空
def Registerfailtest5(self):
# 清空用户名
self.driver.find_element(By.CSS_SELECTOR, "#username").clear()
# 清空昵称
self.driver.find_element(By.CSS_SELECTOR, "#nickname").clear()
# 清空密码
self.driver.find_element(By.CSS_SELECTOR, "#password").clear()
# 清空确认密码
self.driver.find_element(By.CSS_SELECTOR, "#passwordRepeat").clear()
# 点击同意协议
self.driver.find_element(By.CSS_SELECTOR, "#policy").click()
# 点击注册
self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
# 添加一个屏幕截图
ForumDriver.getScreeshot()
# 判断是否有提示
tip = self.driver.find_element(By.CSS_SELECTOR, "#signUpForm > div > div:nth-child(2) > div").text
assert tip == "用户名不能为空"
tip = self.driver.find_element(By.CSS_SELECTOR, "#signUpForm > div > div:nth-child(3) > div").text
assert tip == "昵称不能为空"
tip = self.driver.find_element(By.CSS_SELECTOR, "#signUpForm > div > div:nth-child(4) > div > div").text
assert tip == "密码不能为空"
tip = self.driver.find_element(By.CSS_SELECTOR, "#signUpForm > div > div:nth-child(5) > div > div").text
assert tip == "请检查确认密码"
#确认密码与首次填写密码不一致
def Registerfailtest6(self):
# 清空用户名
self.driver.find_element(By.CSS_SELECTOR, "#username").clear()
# 清空昵称
self.driver.find_element(By.CSS_SELECTOR, "#nickname").clear()
# 清空密码
self.driver.find_element(By.CSS_SELECTOR, "#password").clear()
# 清空确认密码
self.driver.find_element(By.CSS_SELECTOR, "#passwordRepeat").clear()
# 点击同意协议
self.driver.find_element(By.CSS_SELECTOR, "#policy").click()
# 填写用户名
self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("cc")
# 填写昵称
self.driver.find_element(By.CSS_SELECTOR, "#nickname").send_keys("cc")
# 填写密码
self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")
# 填写确认密码
self.driver.find_element(By.CSS_SELECTOR, "#passwordRepeat").send_keys("123")
# 点击注册
self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
# 添加一个屏幕截图
ForumDriver.getScreeshot()
# 判断是否有提示
tip = self.driver.find_element(By.CSS_SELECTOR, "#signUpForm > div > div:nth-child(5) > div > div").text
assert tip == "请检查确认密码"
#用户名重复
def Registerfailtest7(self):
# 清空用户名
self.driver.find_element(By.CSS_SELECTOR, "#username").clear()
# 清空昵称
self.driver.find_element(By.CSS_SELECTOR, "#nickname").clear()
# 清空密码
self.driver.find_element(By.CSS_SELECTOR, "#password").clear()
# 清空确认密码
self.driver.find_element(By.CSS_SELECTOR, "#passwordRepeat").clear()
# 点击同意协议
self.driver.find_element(By.CSS_SELECTOR, "#policy").click()
# 填写用户名
self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("zhangsan")
# 填写昵称
self.driver.find_element(By.CSS_SELECTOR, "#nickname").send_keys("cc")
# 填写密码
self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")
# 填写确认密码
self.driver.find_element(By.CSS_SELECTOR, "#passwordRepeat").send_keys("123456")
# 点击注册
self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
# 添加一个屏幕截图
ForumDriver.getScreeshot()
# 判断是否有提示
tip = self.driver.find_element(By.CSS_SELECTOR, "body > div.jq-toast-wrap.bottom-right > div").text
assert "用户已存在" in tip
#昵称重复
def Registerfailtest8(self):
# 清空用户名
self.driver.find_element(By.CSS_SELECTOR, "#username").clear()
# 清空昵称
self.driver.find_element(By.CSS_SELECTOR, "#nickname").clear()
# 清空密码
self.driver.find_element(By.CSS_SELECTOR, "#password").clear()
# 清空确认密码
self.driver.find_element(By.CSS_SELECTOR, "#passwordRepeat").clear()
# 点击同意协议
self.driver.find_element(By.CSS_SELECTOR, "#policy").click()
# 填写用户名
self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys(datetime.datetime.now().strftime("%Y-%m-%d-%H%M%S"))
# 填写昵称
self.driver.find_element(By.CSS_SELECTOR, "#nickname").send_keys("zhangsan")
# 填写密码
self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")
# 填写确认密码
self.driver.find_element(By.CSS_SELECTOR, "#passwordRepeat").send_keys("123456")
# 点击注册
self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
# 判断是否有提示
try:
tip = self.driver.find_element(By.CSS_SELECTOR, "body > div.jq-toast-wrap.bottom-right > div")
assert "昵称已存在" in tip
except:
print("无昵称已存在提示")
# 添加一个屏幕截图
ForumDriver.getScreeshot()
#不勾选协议
def Registerfailtest9(self):
# 清空用户名
self.driver.find_element(By.CSS_SELECTOR, "#username").clear()
# 清空昵称
self.driver.find_element(By.CSS_SELECTOR, "#nickname").clear()
# 清空密码
self.driver.find_element(By.CSS_SELECTOR, "#password").clear()
# 清空确认密码
self.driver.find_element(By.CSS_SELECTOR, "#passwordRepeat").clear()
# 填写用户名
self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys(datetime.datetime.now().strftime("%Y-%m-%d-%H%M%S"))
# 填写昵称
self.driver.find_element(By.CSS_SELECTOR, "#nickname").send_keys(datetime.datetime.now().strftime("%Y-%m-%d-%H%M%S"))
# 填写密码
self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")
# 填写确认密码
self.driver.find_element(By.CSS_SELECTOR, "#passwordRepeat").send_keys("123456")
# 点击注册
self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
# 添加一个屏幕截图
ForumDriver.getScreeshot()
# 判断是否有提示
element = self.driver.find_element("css selector", "#signUpForm > div > div:nth-child(6) > label > span")
tip_color = self.driver.execute_script("return window.getComputedStyle(arguments[0]).getPropertyValue('color');",element)
assert "rgb" in tip_color
#成功注册
def RegisterSuc(self):
# 清空用户名
self.driver.find_element(By.CSS_SELECTOR, "#username").clear()
# 清空昵称
self.driver.find_element(By.CSS_SELECTOR, "#nickname").clear()
# 清空密码
self.driver.find_element(By.CSS_SELECTOR, "#password").clear()
# 清空确认密码
self.driver.find_element(By.CSS_SELECTOR, "#passwordRepeat").clear()
# 点击同意协议
self.driver.find_element(By.CSS_SELECTOR, "#policy").click()
# 填写用户名
self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys(datetime.datetime.now().strftime("%Y-%m-%d-%H%M%S"))
# 填写昵称
self.driver.find_element(By.CSS_SELECTOR, "#nickname").send_keys(datetime.datetime.now().strftime("%Y-%m-%d-%H%M%S"))
# 填写密码
self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")
# 填写确认密码
self.driver.find_element(By.CSS_SELECTOR, "#passwordRepeat").send_keys("123456")
# 点击注册
self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
#判断是否跳转到登录界面
text = self.driver.find_element(By.CSS_SELECTOR, "body > div > div > div > div:nth-child(1) > div > div.card.card-md > div > h2").text
assert "用户登录" == text
#其他元素检测
def RrgisterOthElement(self):
#点击协议
self.driver.find_element(By.CSS_SELECTOR, "#signUpForm > div > div:nth-child(6) > label > span > a").click()
# 添加一个屏幕截图
ForumDriver.getScreeshot()
#点击登录
self.driver.find_element(By.CSS_SELECTOR, "body > div > div > div.text-center.text-muted.mt-3 > a").click()
#判断是否跳转至登录页面
text = self.driver.find_element(By.CSS_SELECTOR, "body > div > div > div > div:nth-child(1) > div > div.card.card-md > div > h2").text
if text:
assert "用户登录" == text
else:
# 添加一个屏幕截图
ForumDriver.getScreeshot()
3.4 登录页面
ForumLogin.py
from selenium.webdriver.common.by import By
from common.Utils import ForumDriver
class ForumLgin:
url = ""
driver = ""
def __init__(self):
self.url = "http://127.0.0.1:58080/sign-in.html"
self.driver = ForumDriver.driver
self.driver.get(self.url)
#正常登录
def LoginSucLgin(self):
#清空输入框
self.driver.find_element(By.CSS_SELECTOR, "#username").clear()
self.driver.find_element(By.CSS_SELECTOR, "#password").clear()
#输入正确的用户名和密码
self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("zhangsan")
self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")
#点击登录
self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
# 添加一个屏幕截图
ForumDriver.getScreeshot()
#判断是否跳转至首页
text = self.driver.find_element(By.CSS_SELECTOR, "#nav_board_index > a > span.nav-link-title").text
assert "首页" == text
# 正常登录
def LoginSucLgin2(self):
# 清空输入框
self.driver.find_element(By.CSS_SELECTOR, "#username").clear()
self.driver.find_element(By.CSS_SELECTOR, "#password").clear()
# 输入正确的用户名和密码
self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("lisi")
self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")
# 点击登录
self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
# 添加一个屏幕截图
ForumDriver.getScreeshot()
# 判断是否跳转至首页
text = self.driver.find_element(By.CSS_SELECTOR, "#nav_board_index > a > span.nav-link-title").text
assert "首页" == text
#异常登录
#用户名为空
def LoginfailTest1(self):
# 清空输入框
self.driver.find_element(By.CSS_SELECTOR, "#username").clear()
self.driver.find_element(By.CSS_SELECTOR, "#password").clear()
#输入密码
self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")
# 点击登录
self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
# 添加一个屏幕截图
ForumDriver.getScreeshot()
# 判断是否有提示
tip = self.driver.find_element(By.CSS_SELECTOR, "#signInForm > div.mb-3 > div").text
assert tip == "用户名不能为空"
# 用户名为空
def LoginfailTest2(self):
# 清空输入框
self.driver.find_element(By.CSS_SELECTOR, "#username").clear()
self.driver.find_element(By.CSS_SELECTOR, "#password").clear()
# 输入用户名
self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("zhangsan")
# 点击登录
self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
# 添加一个屏幕截图
ForumDriver.getScreeshot()
# 判断是否有提示
tip = self.driver.find_element(By.CSS_SELECTOR, "#signInForm > div.mb-2 > div > div").text
assert tip == "密码不能为空"
# 用户名和密码为空
def LoginfailTest3(self):
# 清空输入框
self.driver.find_element(By.CSS_SELECTOR, "#username").clear()
self.driver.find_element(By.CSS_SELECTOR, "#password").clear()
# 点击登录
self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
# 添加一个屏幕截图
ForumDriver.getScreeshot()
# 判断是否有提示
tip = self.driver.find_element(By.CSS_SELECTOR, "#signInForm > div.mb-2 > div > div").text
assert tip == "密码不能为空"
tip = self.driver.find_element(By.CSS_SELECTOR, "#signInForm > div.mb-2 > div > div").text
assert tip == "密码不能为空"
#用户名正确,密码错误
def LoginfailTest4(self):
# 清空输入框
self.driver.find_element(By.CSS_SELECTOR, "#username").clear()
self.driver.find_element(By.CSS_SELECTOR, "#password").clear()
# 输入正确的用户名
self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("zhangsan")
#输入错误的密码
self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123")
# 点击登录
self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
# 添加一个屏幕截图
ForumDriver.getScreeshot()
# 判断是否有提示
tip = self.driver.find_element(By.CSS_SELECTOR, "body > div.jq-toast-wrap.bottom-right > div").text
assert "用户名或密码错误" in tip
# 用户名错误,密码正确
def LoginfailTest5(self):
# 清空输入框
self.driver.find_element(By.CSS_SELECTOR, "#username").clear()
self.driver.find_element(By.CSS_SELECTOR, "#password").clear()
# 输入的错误用户名
self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("cc")
# 输入正确的密码
self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")
# 点击登录
self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
# 添加一个屏幕截图
ForumDriver.getScreeshot()
# 判断是否有提示
tip = self.driver.find_element(By.CSS_SELECTOR, "body > div.jq-toast-wrap.bottom-right > div").text
assert "用户名或密码错误" in tip
# 用户名错误,密码错误
def LoginfailTest6(self):
# 清空输入框
self.driver.find_element(By.CSS_SELECTOR, "#username").clear()
self.driver.find_element(By.CSS_SELECTOR, "#password").clear()
# 输入的错误用户名
self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("cc")
# 输入错误的密码
self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123")
# 点击登录
self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
# 添加一个屏幕截图
ForumDriver.getScreeshot()
# 判断是否有提示
tip = self.driver.find_element(By.CSS_SELECTOR, "body > div.jq-toast-wrap.bottom-right > div").text
assert "用户名或密码错误" in tip
# 其他元素检测
def LoginOthElement(self):
# 点击注册
self.driver.find_element(By.CSS_SELECTOR, "body > div > div > div > div:nth-child(1) > div > div.text-center.text-muted.mt-3 > a").click()
# 判断是否跳转至注册页面
text = self.driver.find_element(By.CSS_SELECTOR,"#signUpForm > div > h2").text
if text:
assert "用户注册" == text
else:
# 添加一个屏幕截图
ForumDriver.getScreeshot()
3.5 首页
ForumHpage.py
import re
import time
from selenium.webdriver import Keys
from selenium.webdriver.common.by import By
from common.Utils import ForumDriver
class ForumHpage:
url = ""
driver = ""
def __init__(self):
self.url = "http://127.0.0.1:58080/index.html"
self.driver = ForumDriver.driver
self.driver.get(self.url)
#检测板块是否正常
def HpageSector(self):
#Java
self.driver.find_element(By.CSS_SELECTOR, "#topBoardList > li:nth-child(2) > a > span.nav-link-title").click()
#检测是否正常
text = self.driver.find_element(By.CSS_SELECTOR, "#article_list_board_title").text
assert "Java" == text
match = re.search(r'\d+', self.driver.find_element(By.CSS_SELECTOR, "#article_list_count_board").text)
if match:
num = int(match.group(0)) # 直接转换为整数
titlenum = len(self.driver.find_elements(By.CSS_SELECTOR, "#artical-items-body > div > div.row > div.col > div.text-truncate"))
if num != titlenum :
print("Java板块文章数错误")
# 添加一个屏幕截图
ForumDriver.getScreeshot()
#C++
text = self.driver.find_element(By.CSS_SELECTOR, "#topBoardList > li:nth-child(3)").click()
# 检测是否正常
text = self.driver.find_element(By.CSS_SELECTOR, "#article_list_board_title").text
assert "C++" == text
match = re.search(r'\d+', self.driver.find_element(By.CSS_SELECTOR, "#article_list_count_board").text)
if match:
num = int(match.group(0)) # 直接转换为整数
titlenum = len(self.driver.find_elements(By.CSS_SELECTOR,"#artical-items-body > div > div.row > div.col > div.text-truncate"))
if num != titlenum:
print("C++板块文章数错误")
# 添加一个屏幕截图
ForumDriver.getScreeshot()
# 前端技术
self.driver.find_element(By.CSS_SELECTOR,"#topBoardList > li:nth-child(4) > a > span.nav-link-title").click()
# 检测是否正常
text = self.driver.find_element(By.CSS_SELECTOR, "#article_list_board_title").text
assert "前端技术" == text
match = re.search(r'\d+', self.driver.find_element(By.CSS_SELECTOR, "#article_list_count_board").text)
if match:
num = int(match.group(0))
titlenum = len(self.driver.find_elements(By.CSS_SELECTOR,"#artical-items-body > div > div.row > div.col > div.text-truncate"))
if num != titlenum:
print("前端技术板块文章数错误")
# 添加一个屏幕截图
ForumDriver.getScreeshot()
# MySQL
self.driver.find_element(By.CSS_SELECTOR,"#topBoardList > li:nth-child(5) > a").click()
# 检测是否正常
text = self.driver.find_element(By.CSS_SELECTOR, "#article_list_board_title").text
assert "MySQL" == text
match = re.search(r'\d+', self.driver.find_element(By.CSS_SELECTOR, "#article_list_count_board").text)
if match:
num = int(match.group(0))
titlenum = len(self.driver.find_elements(By.CSS_SELECTOR,"#artical-items-body > div > div.row > div.col > div.text-truncate"))
if num != titlenum:
print("MySQL板块文章数错误")
# 添加一个屏幕截图
ForumDriver.getScreeshot()
# 面试宝典
self.driver.find_element(By.CSS_SELECTOR, "#topBoardList > li:nth-child(6)").click()
# 检测是否正常
text = self.driver.find_element(By.CSS_SELECTOR, "#article_list_board_title").text
assert "面试宝典" == text
match = re.search(r'\d+', self.driver.find_element(By.CSS_SELECTOR, "#article_list_count_board").text)
if match:
num = int(match.group(0))
titlenum = len(self.driver.find_elements(By.CSS_SELECTOR,"#artical-items-body > div > div.row > div.col > div.text-truncate"))
if num != titlenum:
print("面试宝典板块文章数错误")
# 添加一个屏幕截图
ForumDriver.getScreeshot()
# 经验分享
self.driver.find_element(By.CSS_SELECTOR, "#topBoardList > li:nth-child(7)").click()
time.sleep(0.4)
# 检测是否正常
text = self.driver.find_element(By.CSS_SELECTOR, "#article_list_board_title").text
assert "经验分享" == text
match = re.search(r'\d+', self.driver.find_element(By.CSS_SELECTOR, "#article_list_count_board").text)
if match:
num = int(match.group(0))
titlenum = len(self.driver.find_elements(By.CSS_SELECTOR,"#artical-items-body > div > div.row > div.col > div.text-truncate"))
if num != titlenum:
print("经验分享板块文章数错误")
# 添加一个屏幕截图
ForumDriver.getScreeshot()
# 招聘信息
self.driver.find_element(By.CSS_SELECTOR, "#topBoardList > li:nth-child(8)").click()
# 检测是否正常
text = self.driver.find_element(By.CSS_SELECTOR, "#article_list_board_title").text
assert "招聘信息" == text
match = re.search(r'\d+', self.driver.find_element(By.CSS_SELECTOR, "#article_list_count_board").text)
if match:
num = int(match.group(0))
titlenum = len(self.driver.find_elements(By.CSS_SELECTOR,"#artical-items-body > div > div.row > div.col > div.text-truncate"))
if num != titlenum:
print("招聘信息板块文章数错误")
# 添加一个屏幕截图
ForumDriver.getScreeshot()
# 福利待遇
self.driver.find_element(By.CSS_SELECTOR, "#topBoardList > li:nth-child(9)").click()
# 检测是否正常
text = self.driver.find_element(By.CSS_SELECTOR, "#article_list_board_title").text
assert "福利待遇" == text
match = re.search(r'\d+', self.driver.find_element(By.CSS_SELECTOR, "#article_list_count_board").text)
if match:
num = int(match.group(0))
titlenum = len(self.driver.find_elements(By.CSS_SELECTOR,"#artical-items-body > div > div.row > div.col > div.text-truncate"))
if num != titlenum:
print("福利待遇板块文章数错误")
# 添加一个屏幕截图
ForumDriver.getScreeshot()
# 灌水区
self.driver.find_element(By.CSS_SELECTOR, "#topBoardList > li:nth-child(10)").click()
# 检测是否正常
time.sleep(0.4)
text = self.driver.find_element(By.CSS_SELECTOR, "#article_list_board_title").text
assert "灌水区" == text
match = re.search(r'\d+', self.driver.find_element(By.CSS_SELECTOR, "#article_list_count_board").text)
if match:
num = int(match.group(0))
titlenum = len(self.driver.find_elements(By.CSS_SELECTOR,"#artical-items-body > div > div.row > div.col > div.text-truncate"))
if num != titlenum:
print("灌水区板块文章数错误")
# 添加一个屏幕截图
ForumDriver.getScreeshot()
#检测用户信息
def HpageInfo(self):
#点击个人信息
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()
# 添加一个屏幕截图
ForumDriver.getScreeshot()
#检测是否正确
text = self.driver.find_element(By.CSS_SELECTOR, "#index_user_profile").text
assert "我的帖子" == text
text = self.driver.find_element(By.CSS_SELECTOR, "#index_user_settings").text
assert "个人中心" == text
text = self.driver.find_element(By.CSS_SELECTOR, "#index_user_logout > span").text
assert "退出" == text
#检测帖子是否跳转
def HpagePost(self):
num1 = self.driver.find_element(By.CSS_SELECTOR, "#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)").text
#点击帖子标题
self.driver.find_element(By.CSS_SELECTOR, "#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong").click()
# 添加一个屏幕截图
ForumDriver.getScreeshot()
#判断游览数是否增加
num2 = self.driver.find_element(By.CSS_SELECTOR, "#details_article_visitCount").text
assert int(num1) == int(num2)-1
text = self.driver.find_element(By.CSS_SELECTOR, "#bit-forum-content > div.page-body > div > div > div:nth-child(2) > h3").text
assert "最新回复" == text
#其他元素检测
def HpageOthElement(self):
#搜索
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("Java")
# 点击回车
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)
# 添加一个屏幕截图查看是否成功
ForumDriver.getScreeshot()
#切换夜间模式
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()
#获取页面颜色
color = self.driver.find_element(By.CSS_SELECTOR, "#page-wrapper").value_of_css_property("color")
assert "248, 250, 252, 1" in color
# 切换白天模式
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-light").click()
# 获取页面颜色
color = self.driver.find_element(By.CSS_SELECTOR, "#page-wrapper").value_of_css_property("color")
assert "29, 39, 59, 1" in color
#检测信息
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()
time.sleep(1)
text = self.driver.find_element(By.CSS_SELECTOR, "#offcanvasEndLabel").text
assert "所有站内信" == text
#未登录状态下
def HpageNLogin(self):
# 判断是否跳转到登录界面
try:
text = self.driver.find_element(By.CSS_SELECTOR,"body > div > div > div > div:nth-child(1) > div > div.card.card-md > div > h2").text
assert "用户登录" == text
except:
print("Hpage未跳转至登录页面")
3.6 帖子详情页面
ForumDetails.py
import re
import time
from selenium.webdriver import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from tests import ForumLogin
from common.Utils import ForumDriver
class ForumDetails:
url = ""
driver = ""
Author = ""
def __init__(self):
self.url = "http://127.0.0.1:58080/index.html"
self.driver = ForumDriver.driver
self.driver.get(self.url)
try:
self.Author = self.driver.find_element(By.CSS_SELECTOR, "#artical-items-body > div:nth-child(1) > div > div.col > div.text-muted.mt-2 > div > div.col > ul > li:nth-child(1)").text
self.driver.find_element(By.CSS_SELECTOR, "#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a").click()
except:
print("没有帖子")
#检测帖子信息
def DetailsInfo(self):
text = self.driver.find_element(By.CSS_SELECTOR, "#article_details_author_name").text
assert text == self.Author
#点击跳转至改用户“我的帖子”页
self.driver.find_element(By.CSS_SELECTOR, "#article_details_author_name").click()
text = self.driver.find_element(By.CSS_SELECTOR, "#bit-forum-content > div.page-body > div > div > div.col-lg-4 > div > div > div > div > h2").text
assert text == "个人介绍"
try:
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()
except:
print("没有帖子")
#查看点赞
num1 = self.driver.find_element(By.CSS_SELECTOR, "#details_article_likeCount").text
self.driver.find_element(By.CSS_SELECTOR, "#details_btn_like_count").click()
num2 = self.driver.find_element(By.CSS_SELECTOR, "#details_article_likeCount").text
assert int(num1) == int(num2)-1
#再次点击取消
num1 = self.driver.find_element(By.CSS_SELECTOR, "#details_article_likeCount").text
self.driver.find_element(By.CSS_SELECTOR, "#details_btn_like_count").click()
num2 = self.driver.find_element(By.CSS_SELECTOR, "#details_article_likeCount").text
if int(num1) != int(num2) + 1:
print("无法取消点赞")
#点击编辑
self.driver.find_element(By.CSS_SELECTOR, "#details_artile_edit").click()
time.sleep(0.4)
text = self.driver.find_element(By.CSS_SELECTOR, "#bit-forum-content > div.page-header.d-print-none > div > div > div > h2").text
assert text == "编辑"
#删除
self.driver.find_element(By.CSS_SELECTOR, "#nav_board_index").click()
self.driver.find_element(By.CSS_SELECTOR,"#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong").click()
time.sleep(3)
self.driver.find_element(By.CSS_SELECTOR, "#bit-forum-content > div.page-body > div > div > div:nth-child(1) > div.col-9.card.card-lg > div.card-footer.bg-transparent.mt-auto.justify-content-end > div > div:nth-child(3) > div > a").click()
time.sleep(3)
# 添加一个屏幕截图
ForumDriver.getScreeshot()
#点击取消
self.driver.find_element(By.CSS_SELECTOR, "#details_delete_modal > div > div > div.modal-footer > div > div > div:nth-child(1) > a").click()
# 添加一个屏幕截图
ForumDriver.getScreeshot()
#点击删除
self.driver.find_element(By.CSS_SELECTOR, "#bit-forum-content > div.page-body > div > div > div:nth-child(1) > div.col-9.card.card-lg > div.card-footer.bg-transparent.mt-auto.justify-content-end > div > div:nth-child(3) > div > a").click()
self.driver.find_element(By.CSS_SELECTOR, "#details_artile_delete").click()
time.sleep(3)
text = self.driver.find_element(By.CSS_SELECTOR, "body > div.jq-toast-wrap.bottom-right > div").text
assert "删除成功" in text
#回复模块
def DetailsReply(self):
try:
self.driver.find_element(By.CSS_SELECTOR, "#details_reply_area > div > div.col-3.card > div > h3 > a").click()
text = self.driver.find_element(By.CSS_SELECTOR,"#bit-forum-content > div.page-body > div > div > div.col-lg-4 > div > div > div > div > h2").text
assert text == "个人介绍"
try:
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()
num1 = self.driver.find_element(By.CSS_SELECTOR, "#details_article_replyCount").text
self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
# WebDriverWait(self.driver, 10).until()
time.sleep(1)
# 清空输入框
self.driver.find_element(By.CSS_SELECTOR,
"#article_details_reply > div.editormd-toolbar > div > ul > li:nth-child(39) > a > i").click()
# 点击回复
self.driver.find_element(By.CSS_SELECTOR, "#details_btn_article_reply").click()
text = self.driver.find_element(By.CSS_SELECTOR, "body > div.jq-toast-wrap.bottom-right > div").text
assert "请输入回复内容" in text
time.sleep(0.2)
self.driver.find_element(By.CSS_SELECTOR,
"#article_details_reply > div.editormd-toolbar > div > ul > li:nth-child(6) > a > i").click()
time.sleep(0.4)
self.driver.find_element(By.CSS_SELECTOR, "#details_btn_article_reply").click()
text = self.driver.find_element(By.CSS_SELECTOR,
"body > div.jq-toast-wrap.bottom-right > div:nth-child(2)").text
assert "回复成功" in text
# 检测输入框是否被清空
text = self.driver.find_element(By.CSS_SELECTOR,
"#article_details_reply > div.CodeMirror.cm-s-default.CodeMirror-wrap > div.CodeMirror-scroll > div.CodeMirror-sizer > div > div > div > div.CodeMirror-code > div > pre > span > span").text
if "" != text:
print("输入框未清空")
# 定位页面顶部的元素
top_element = self.driver.find_element(By.CSS_SELECTOR,
"body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > h1 > a")
# 滚动到该元素
self.driver.execute_script("arguments[0].scrollIntoView();", top_element)
text = self.driver.find_element(By.CSS_SELECTOR,
"#details_reply_area > div.row > div.col-9 >div.card-body").text
assert text == "**"
num2 = self.driver.find_element(By.CSS_SELECTOR, "#details_article_replyCount").text
assert int(num1) == int(num2) - 1
except:
print("没有帖子")
except:
text = self.driver.find_element(By.CSS_SELECTOR, "#details_reply_area > p").text
assert text == "还没有回复,第一个写下回复吧"
num1 = self.driver.find_element(By.CSS_SELECTOR, "#details_article_replyCount").text
self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(1)
# WebDriverWait(self.driver, 10).until()
self.driver.find_element(By.CSS_SELECTOR,"#details_btn_article_reply").click()
text = self.driver.find_element(By.CSS_SELECTOR, "body > div.jq-toast-wrap.bottom-right > div").text
assert "请输入回复内容" in text
time.sleep(0.3)
self.driver.find_element(By.CSS_SELECTOR,
"#article_details_reply > div.editormd-toolbar > div > ul > li:nth-child(6) > a > i").click()
time.sleep(0.3)
self.driver.find_element(By.CSS_SELECTOR, "#details_btn_article_reply").click()
text = self.driver.find_element(By.CSS_SELECTOR, "body > div.jq-toast-wrap.bottom-right > div:nth-child(2)").text
assert "回复成功" in text
# 检测输入框是否被清空
text = self.driver.find_element(By.CSS_SELECTOR,
"#article_details_reply > div.CodeMirror.cm-s-default.CodeMirror-wrap > div.CodeMirror-scroll > div.CodeMirror-sizer > div > div > div > div.CodeMirror-code > div > pre > span > span").text
if "" != text:
print("输入框未清空")
# 定位页面顶部的元素
top_element = self.driver.find_element(By.CSS_SELECTOR,
"body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > h1 > a")
# 滚动到该元素
self.driver.execute_script("arguments[0].scrollIntoView();", top_element)
text = self.driver.find_element(By.CSS_SELECTOR, "#details_reply_area > div.row > div.col-9 >div.card-body").text
assert text == "**"
num2 = self.driver.find_element(By.CSS_SELECTOR, "#details_article_replyCount").text
assert int(num1) == int(num2) - 1
# 检测板块是否正常
def DetailsSector(self):
# Java
self.driver.find_element(By.CSS_SELECTOR,
"#topBoardList > li:nth-child(2) > a > span.nav-link-title").click()
# 检测是否正常
text = self.driver.find_element(By.CSS_SELECTOR, "#article_list_board_title").text
assert "Java" == text
match = re.search(r'\d+', self.driver.find_element(By.CSS_SELECTOR, "#article_list_count_board").text)
if match:
num = int(match.group(0)) # 直接转换为整数
titlenum = len(self.driver.find_elements(By.CSS_SELECTOR,
"#artical-items-body > div > div.row > div.col > div.text-truncate"))
if num != titlenum:
print("Java板块文章数错误")
# 添加一个屏幕截图
ForumDriver.getScreeshot()
#回到详情页
self.driver.get(self.url)
time.sleep(0.4)
try:
self.driver.find_element(By.CSS_SELECTOR,
"#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong").click()
except:
print("没有帖子")
# C++
text = self.driver.find_element(By.CSS_SELECTOR, "#topBoardList > li:nth-child(3)").click()
# 检测是否正常
text = self.driver.find_element(By.CSS_SELECTOR, "#article_list_board_title").text
assert "C++" == text
match = re.search(r'\d+', self.driver.find_element(By.CSS_SELECTOR, "#article_list_count_board").text)
if match:
num = int(match.group(0)) # 直接转换为整数
titlenum = len(self.driver.find_elements(By.CSS_SELECTOR,
"#artical-items-body > div > div.row > div.col > div.text-truncate"))
if num != titlenum:
print("C++板块文章数错误")
# 添加一个屏幕截图
ForumDriver.getScreeshot()
# 回到详情页
self.driver.get(self.url)
time.sleep(0.4)
try:
self.driver.find_element(By.CSS_SELECTOR,
"#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong").click()
except:
print("没有帖子")
# 前端技术
self.driver.find_element(By.CSS_SELECTOR,
"#topBoardList > li:nth-child(4) > a > span.nav-link-title").click()
# 检测是否正常
text = self.driver.find_element(By.CSS_SELECTOR, "#article_list_board_title").text
assert "前端技术" == text
match = re.search(r'\d+', self.driver.find_element(By.CSS_SELECTOR, "#article_list_count_board").text)
if match:
num = int(match.group(0))
titlenum = len(self.driver.find_elements(By.CSS_SELECTOR,
"#artical-items-body > div > div.row > div.col > div.text-truncate"))
if num != titlenum:
print("前端技术板块文章数错误")
# 添加一个屏幕截图
ForumDriver.getScreeshot()
# 回到详情页
self.driver.get(self.url)
time.sleep(0.4)
try:
self.driver.find_element(By.CSS_SELECTOR,
"#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong").click()
except:
print("没有帖子")
# MySQL
self.driver.find_element(By.CSS_SELECTOR, "#topBoardList > li:nth-child(5) > a").click()
# 检测是否正常
text = self.driver.find_element(By.CSS_SELECTOR, "#article_list_board_title").text
assert "MySQL" == text
match = re.search(r'\d+', self.driver.find_element(By.CSS_SELECTOR, "#article_list_count_board").text)
if match:
num = int(match.group(0))
titlenum = len(self.driver.find_elements(By.CSS_SELECTOR,
"#artical-items-body > div > div.row > div.col > div.text-truncate"))
if num != titlenum:
print("MySQL板块文章数错误")
# 添加一个屏幕截图
ForumDriver.getScreeshot()
# 回到详情页
self.driver.get(self.url)
time.sleep(0.4)
try:
self.driver.find_element(By.CSS_SELECTOR,
"#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong").click()
except:
print("没有帖子")
# 面试宝典
self.driver.find_element(By.CSS_SELECTOR, "#topBoardList > li:nth-child(6)").click()
# 检测是否正常
text = self.driver.find_element(By.CSS_SELECTOR, "#article_list_board_title").text
assert "面试宝典" == text
match = re.search(r'\d+', self.driver.find_element(By.CSS_SELECTOR, "#article_list_count_board").text)
if match:
num = int(match.group(0))
titlenum = len(self.driver.find_elements(By.CSS_SELECTOR,
"#artical-items-body > div > div.row > div.col > div.text-truncate"))
if num != titlenum:
print("面试宝典板块文章数错误")
# 添加一个屏幕截图
ForumDriver.getScreeshot()
# 回到详情页
self.driver.get(self.url)
time.sleep(0.4)
try:
self.driver.find_element(By.CSS_SELECTOR,
"#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong").click()
except:
print("没有帖子")
# 经验分享
self.driver.find_element(By.CSS_SELECTOR, "#topBoardList > li:nth-child(7)").click()
# 检测是否正常
text = self.driver.find_element(By.CSS_SELECTOR, "#article_list_board_title").text
assert "经验分享" == text
match = re.search(r'\d+', self.driver.find_element(By.CSS_SELECTOR, "#article_list_count_board").text)
if match:
num = int(match.group(0))
titlenum = len(self.driver.find_elements(By.CSS_SELECTOR,
"#artical-items-body > div > div.row > div.col > div.text-truncate"))
if num != titlenum:
print("经验分享板块文章数错误")
# 添加一个屏幕截图
ForumDriver.getScreeshot()
# 回到详情页
self.driver.get(self.url)
time.sleep(0.4)
try:
self.driver.find_element(By.CSS_SELECTOR,
"#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong").click()
except:
print("没有帖子")
# 招聘信息
self.driver.find_element(By.CSS_SELECTOR, "#topBoardList > li:nth-child(8)").click()
# 检测是否正常
text = self.driver.find_element(By.CSS_SELECTOR, "#article_list_board_title").text
assert "招聘信息" == text
match = re.search(r'\d+', self.driver.find_element(By.CSS_SELECTOR, "#article_list_count_board").text)
if match:
num = int(match.group(0))
titlenum = len(self.driver.find_elements(By.CSS_SELECTOR,
"#artical-items-body > div > div.row > div.col > div.text-truncate"))
if num != titlenum:
print("招聘信息板块文章数错误")
# 添加一个屏幕截图
ForumDriver.getScreeshot()
# 回到详情页
self.driver.get(self.url)
time.sleep(0.4)
try:
self.driver.find_element(By.CSS_SELECTOR,
"#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong").click()
except:
print("没有帖子")
# 福利待遇
self.driver.find_element(By.CSS_SELECTOR, "#topBoardList > li:nth-child(9)").click()
# 检测是否正常
text = self.driver.find_element(By.CSS_SELECTOR, "#article_list_board_title").text
assert "福利待遇" == text
match = re.search(r'\d+', self.driver.find_element(By.CSS_SELECTOR, "#article_list_count_board").text)
if match:
num = int(match.group(0))
titlenum = len(self.driver.find_elements(By.CSS_SELECTOR,
"#artical-items-body > div > div.row > div.col > div.text-truncate"))
if num != titlenum:
print("福利待遇板块文章数错误")
# 添加一个屏幕截图
ForumDriver.getScreeshot()
# 回到详情页
self.driver.get(self.url)
time.sleep(0.4)
try:
self.driver.find_element(By.CSS_SELECTOR,
"#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong").click()
except:
print("没有帖子")
# 灌水区
self.driver.find_element(By.CSS_SELECTOR, "#topBoardList > li:nth-child(10)").click()
# 检测是否正常
text = self.driver.find_element(By.CSS_SELECTOR, "#article_list_board_title").text
assert "灌水区" == text
match = re.search(r'\d+', self.driver.find_element(By.CSS_SELECTOR, "#article_list_count_board").text)
if match:
num = int(match.group(0))
titlenum = len(self.driver.find_elements(By.CSS_SELECTOR,
"#artical-items-body > div > div.row > div.col > div.text-truncate"))
if num != titlenum:
print("灌水区板块文章数错误")
# 添加一个屏幕截图
ForumDriver.getScreeshot()
# 回到详情页
self.driver.get(self.url)
time.sleep(0.4)
try:
self.driver.find_element(By.CSS_SELECTOR,
"#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong").click()
except:
print("没有帖子")
# 检测用户信息
def DetailsUerInfo(self):
# 点击个人信息
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()
# 添加一个屏幕截图
ForumDriver.getScreeshot()
# 检测是否正确
text = self.driver.find_element(By.CSS_SELECTOR, "#index_user_profile").text
assert "我的帖子" == text
text = self.driver.find_element(By.CSS_SELECTOR, "#index_user_settings").text
assert "个人中心" == text
text = self.driver.find_element(By.CSS_SELECTOR, "#index_user_logout > span").text
assert "退出" == text
#其他元素检测
def DetailsOthElement(self):
#搜索
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("Java")
# 点击回车
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)
# 添加一个屏幕截图查看是否成功
ForumDriver.getScreeshot()
#切换夜间模式
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()
#获取页面颜色
color = self.driver.find_element(By.CSS_SELECTOR, "#page-wrapper").value_of_css_property("color")
assert "248, 250, 252, 1" in color
# 切换白天模式
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-light").click()
# 获取页面颜色
color = self.driver.find_element(By.CSS_SELECTOR, "#page-wrapper").value_of_css_property("color")
assert "29, 39, 59, 1" in color
#检测信息
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()
time.sleep(0.2)
text = self.driver.find_element(By.CSS_SELECTOR, "#index_message_offcanvasEnd > div.offcanvas-header").text
print(text)
#其他用户帖子
##检测其他用户帖子信息
def DetailsOthInfo(self):
text = self.driver.find_element(By.CSS_SELECTOR, "#article_details_author_name").text
assert text == self.Author
# 点击跳转至改用户“我的帖子”页
self.driver.find_element(By.CSS_SELECTOR, "#article_details_author_name").click()
text = self.driver.find_element(By.CSS_SELECTOR,
"#bit-forum-content > div.page-body > div > div > div.col-lg-4 > div > div > div > div > h2").text
assert text == "个人介绍"
try:
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()
except:
print("没有帖子")
# 查看点赞
num1 = self.driver.find_element(By.CSS_SELECTOR, "#details_article_likeCount").text
self.driver.find_element(By.CSS_SELECTOR, "#details_btn_like_count").click()
num2 = self.driver.find_element(By.CSS_SELECTOR, "#details_article_likeCount").text
assert int(num1) == int(num2) - 1
# 再次点击取消
num1 = self.driver.find_element(By.CSS_SELECTOR, "#details_article_likeCount").text
self.driver.find_element(By.CSS_SELECTOR, "#details_btn_like_count").click()
num2 = self.driver.find_element(By.CSS_SELECTOR, "#details_article_likeCount").text
if int(num1) != int(num2) + 1:
print("无法取消点赞")
#发私信
# #点击取消
# self.driver.find_element(By.CSS_SELECTOR, "#btn_details_send_message").click()
# self.driver.find_element(By.XPATH, "").click()
# time.sleep(2)
#内容为空发送
self.driver.find_element(By.CSS_SELECTOR, "#btn_details_send_message").click()
time.sleep(2)
self.driver.find_element(By.CSS_SELECTOR, "#btn_index_send_message > svg").click()
text = self.driver.find_element(By.CSS_SELECTOR, "body > div.jq-toast-wrap.bottom-right > div:nth-child(3)").text
print(text)
assert "请输入要发送的内容" in text
#内容不为空发送
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("私信测试")
self.driver.find_element(By.CSS_SELECTOR, "#btn_index_send_message").click()
text = self.driver.find_element(By.CSS_SELECTOR, "body > div.jq-toast-wrap.bottom-right > div:nth-child(4)").text
assert "发送成功" in text
#查看是否收到
ForumLogin.ForumLgin().LoginSucLgin()
# 检测信息
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()
time.sleep(0.2)
text = self.driver.find_element(By.CSS_SELECTOR, "#index_div_message_list > div:nth-child(1) > div > div.col.text-truncate > div").text
assert "私信测试" in text
ForumLogin.ForumLgin().LoginSucLgin2()
# 其他元素检测
def DetailsOthUserElement(self):
# 搜索
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(
"Java")
# 点击回车
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)
# 添加一个屏幕截图查看是否成功
ForumDriver.getScreeshot()
# 切换夜间模式
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()
# 获取页面颜色
color = self.driver.find_element(By.CSS_SELECTOR, "#page-wrapper").value_of_css_property("color")
assert "248, 250, 252, 1" in color
# 切换白天模式
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-light").click()
# 获取页面颜色
color = self.driver.find_element(By.CSS_SELECTOR, "#page-wrapper").value_of_css_property("color")
assert "29, 39, 59, 1" in color
# 检测信息
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()
time.sleep(0.2)
text = self.driver.find_element(By.CSS_SELECTOR, "#index_message_offcanvasEnd > div.offcanvas-header").text
print(text)
# 检测其他用户信息
def DetailsOthUerInfo(self):
# 点击个人信息
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()
# 添加一个屏幕截图
ForumDriver.getScreeshot()
# 检测是否正确
text = self.driver.find_element(By.CSS_SELECTOR, "#index_user_profile").text
assert "我的帖子" == text
text = self.driver.find_element(By.CSS_SELECTOR, "#index_user_settings").text
assert "个人中心" == text
text = self.driver.find_element(By.CSS_SELECTOR, "#index_user_logout > span").text
assert "退出" == text
# 回复其他用户帖子模块
def DetailsOthUserReply(self):
try:
self.driver.find_element(By.CSS_SELECTOR,
"#details_reply_area > div > div.col-3.card > div > h3 > a").click()
text = self.driver.find_element(By.CSS_SELECTOR,
"#bit-forum-content > div.page-body > div > div > div.col-lg-4 > div > div > div > div > h2").text
assert text == "个人介绍"
try:
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()
num1 = self.driver.find_element(By.CSS_SELECTOR, "#details_article_replyCount").text
self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
# WebDriverWait(self.driver, 10).until()
time.sleep(1)
# 清空输入框
self.driver.find_element(By.CSS_SELECTOR,
"#article_details_reply > div.editormd-toolbar > div > ul > li:nth-child(39) > a > i").click()
# 点击回复
self.driver.find_element(By.CSS_SELECTOR, "#details_btn_article_reply").click()
text = self.driver.find_element(By.CSS_SELECTOR, "body > div.jq-toast-wrap.bottom-right > div").text
assert "请输入回复内容" in text
self.driver.find_element(By.CSS_SELECTOR,
"#article_details_reply > div.editormd-toolbar > div > ul > li:nth-child(6) > a > i").click()
time.sleep(0.3)
self.driver.find_element(By.CSS_SELECTOR, "#details_btn_article_reply").click()
text = self.driver.find_element(By.CSS_SELECTOR,
"body > div.jq-toast-wrap.bottom-right > div:nth-child(2)").text
assert "回复成功" in text
# 检测输入框是否被清空
text = self.driver.find_element(By.CSS_SELECTOR,
"#article_details_reply > div.CodeMirror.cm-s-default.CodeMirror-wrap > div.CodeMirror-scroll > div.CodeMirror-sizer > div > div > div > div.CodeMirror-code > div > pre > span > span").text
if "" != text:
print("输入框未清空")
# 定位页面顶部的元素
top_element = self.driver.find_element(By.CSS_SELECTOR,
"body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > h1 > a")
# 滚动到该元素
self.driver.execute_script("arguments[0].scrollIntoView();", top_element)
text = self.driver.find_element(By.CSS_SELECTOR,
"#details_reply_area > div.row > div.col-9 >div.card-body").text
assert text == "**"
num2 = self.driver.find_element(By.CSS_SELECTOR, "#details_article_replyCount").text
assert int(num1) == int(num2) - 1
except:
print("没有帖子")
# 发私信
# #点击取消
# self.driver.find_element(By.CSS_SELECTOR, "#btn_details_send_message").click()
# self.driver.find_element(By.XPATH, "").click()
# time.sleep(2)
# 内容为空发送
self.driver.find_element(By.CSS_SELECTOR, "#btn_details_send_message").click()
time.sleep(0.4)
self.driver.find_element(By.CSS_SELECTOR, "#btn_index_send_message > svg").click()
text = self.driver.find_element(By.CSS_SELECTOR, "body > div.jq-toast-wrap.bottom-right > div").text
assert "请输入要发送的内容" in text
# 内容不为空发送
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("私信测试")
self.driver.find_element(By.CSS_SELECTOR, "#btn_index_send_message").click()
text = self.driver.find_element(By.CSS_SELECTOR, "body > div.jq-toast-wrap.bottom-right > div").text
assert "发送成功" in text
# 查看是否收到
ForumLogin.ForumLgin().LoginSucLgin()
# 检测信息
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()
time.sleep(0.2)
text = self.driver.find_element(By.CSS_SELECTOR,
"#index_div_message_list > div:nth-child(1) > div > div.col.text-truncate > div").text
assert "私信测试" in text
ForumLogin.ForumLgin().LoginSucLgin2()
except:
text = self.driver.find_element(By.CSS_SELECTOR, "#details_reply_area > p").text
assert text == "还没有回复,第一个写下回复吧"
num1 = self.driver.find_element(By.CSS_SELECTOR, "#details_article_replyCount").text
self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
# WebDriverWait(self.driver, 10).until()
time.sleep(1)
self.driver.find_element(By.CSS_SELECTOR,"#details_btn_article_reply").click()
text = self.driver.find_element(By.CSS_SELECTOR, "body > div.jq-toast-wrap.bottom-right > div").text
assert "请输入回复内容" in text
time.sleep(0.3)
self.driver.find_element(By.CSS_SELECTOR,
"#article_details_reply > div.editormd-toolbar > div > ul > li:nth-child(6) > a > i").click()
time.sleep(0.3)
self.driver.find_element(By.CSS_SELECTOR, "#details_btn_article_reply").click()
text = self.driver.find_element(By.CSS_SELECTOR,
"body > div.jq-toast-wrap.bottom-right > div:nth-child(2)").text
assert "回复成功" in text
# 检测输入框是否被清空
text = self.driver.find_element(By.CSS_SELECTOR,
"#article_details_reply > div.CodeMirror.cm-s-default.CodeMirror-wrap > div.CodeMirror-scroll > div.CodeMirror-sizer > div > div > div > div.CodeMirror-code > div > pre > span > span").text
if "" != text:
print("输入框未清空")
# 定位页面顶部的元素
top_element = self.driver.find_element(By.CSS_SELECTOR,
"body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > h1 > a")
# 滚动到该元素
self.driver.execute_script("arguments[0].scrollIntoView();", top_element)
text = self.driver.find_element(By.CSS_SELECTOR,
"#details_reply_area > div.row > div.col-9 >div.card-body").text
assert text == "**"
num2 = self.driver.find_element(By.CSS_SELECTOR, "#details_article_replyCount").text
assert int(num1) == int(num2) - 1
3.7 帖子编辑页面
ForumEdit.py
import time
from selenium.webdriver.common.by import By
from common.Utils import ForumDriver
class ForumEdit:
url = ""
driver = ""
def __init__(self):
self.url = "http://127.0.0.1:58080/index.html"
self.driver = ForumDriver.driver
self.driver.get(self.url)
#正常新增填写帖子
def EditSucAdd(self):
#java
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.find_element(By.CSS_SELECTOR, "#article_post_title").clear()
self.driver.find_element(By.CSS_SELECTOR, "#article_post_title").send_keys("新增帖子测试")
self.driver.find_element(By.CSS_SELECTOR, "#edit-article > div.editormd-toolbar > div > ul > li:nth-child(5) > a > i").click()
time.sleep(0.4)
self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(1)
self.driver.find_element(By.CSS_SELECTOR, "#article_post_submit").click()
text = self.driver.find_element(By.CSS_SELECTOR, "body > div.jq-toast-wrap.bottom-right > div").text
assert "发帖成功" in text
title = self.driver.find_element(By.CSS_SELECTOR, "#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong").text
assert "新增帖子测试" == title
#C++
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.find_element(By.CSS_SELECTOR, "#article_post_title").clear()
self.driver.find_element(By.CSS_SELECTOR, "#article_post_title").send_keys("新增帖子测试")
self.driver.find_element(By.CSS_SELECTOR,
"#edit-article > div.editormd-toolbar > div > ul > li:nth-child(5) > a > i").click()
time.sleep(0.4)
#选择板块
self.driver.find_element(By.CSS_SELECTOR, "#article_post_borad").click()
self.driver.find_element(By.CSS_SELECTOR, "#article_post_borad > option:nth-child(2)").click()
self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(1)
self.driver.find_element(By.CSS_SELECTOR, "#article_post_submit").click()
text = self.driver.find_element(By.CSS_SELECTOR, "body > div.jq-toast-wrap.bottom-right > div:nth-child(2)").text
assert "发帖成功" in text
title = self.driver.find_element(By.CSS_SELECTOR,
"#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong").text
assert "新增帖子测试" == title
# 前端技术
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.find_element(By.CSS_SELECTOR, "#article_post_title").clear()
self.driver.find_element(By.CSS_SELECTOR, "#article_post_title").send_keys("新增帖子测试")
self.driver.find_element(By.CSS_SELECTOR,
"#edit-article > div.editormd-toolbar > div > ul > li:nth-child(5) > a > i").click()
time.sleep(0.4)
# 选择板块
self.driver.find_element(By.CSS_SELECTOR, "#article_post_borad").click()
self.driver.find_element(By.CSS_SELECTOR, "#article_post_borad > option:nth-child(3)").click()
self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(1)
self.driver.find_element(By.CSS_SELECTOR, "#article_post_submit").click()
text = self.driver.find_element(By.CSS_SELECTOR, "body > div.jq-toast-wrap.bottom-right > div:nth-child(2)").text
assert "发帖成功" in text
title = self.driver.find_element(By.CSS_SELECTOR,
"#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong").text
assert "新增帖子测试" == title
# MySQL
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.find_element(By.CSS_SELECTOR, "#article_post_title").clear()
self.driver.find_element(By.CSS_SELECTOR, "#article_post_title").send_keys("新增帖子测试")
self.driver.find_element(By.CSS_SELECTOR,
"#edit-article > div.editormd-toolbar > div > ul > li:nth-child(5) > a > i").click()
time.sleep(0.4)
# 选择板块
self.driver.find_element(By.CSS_SELECTOR, "#article_post_borad").click()
self.driver.find_element(By.CSS_SELECTOR, "#article_post_borad > option:nth-child(4)").click()
self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(1)
self.driver.find_element(By.CSS_SELECTOR, "#article_post_submit").click()
text = self.driver.find_element(By.CSS_SELECTOR, "body > div.jq-toast-wrap.bottom-right > div:nth-child(2)").text
assert "发帖成功" in text
title = self.driver.find_element(By.CSS_SELECTOR,
"#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong").text
assert "新增帖子测试" == title
# 面试宝典
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.find_element(By.CSS_SELECTOR, "#article_post_title").clear()
self.driver.find_element(By.CSS_SELECTOR, "#article_post_title").send_keys("新增帖子测试")
self.driver.find_element(By.CSS_SELECTOR,
"#edit-article > div.editormd-toolbar > div > ul > li:nth-child(5) > a > i").click()
time.sleep(0.4)
# 选择板块
self.driver.find_element(By.CSS_SELECTOR, "#article_post_borad").click()
self.driver.find_element(By.CSS_SELECTOR, "#article_post_borad > option:nth-child(5)").click()
self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(1)
self.driver.find_element(By.CSS_SELECTOR, "#article_post_submit").click()
text = self.driver.find_element(By.CSS_SELECTOR, "body > div.jq-toast-wrap.bottom-right > div:nth-child(2)").text
assert "发帖成功" in text
title = self.driver.find_element(By.CSS_SELECTOR,
"#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong").text
assert "新增帖子测试" == title
# 经验分享
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.find_element(By.CSS_SELECTOR, "#article_post_title").clear()
self.driver.find_element(By.CSS_SELECTOR, "#article_post_title").send_keys("新增帖子测试")
self.driver.find_element(By.CSS_SELECTOR,
"#edit-article > div.editormd-toolbar > div > ul > li:nth-child(5) > a > i").click()
time.sleep(0.4)
# 选择板块
self.driver.find_element(By.CSS_SELECTOR, "#article_post_borad").click()
self.driver.find_element(By.CSS_SELECTOR, "#article_post_borad > option:nth-child(6)").click()
self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(1)
self.driver.find_element(By.CSS_SELECTOR, "#article_post_submit").click()
text = self.driver.find_element(By.CSS_SELECTOR, "body > div.jq-toast-wrap.bottom-right > div:nth-child(2)").text
assert "发帖成功" in text
title = self.driver.find_element(By.CSS_SELECTOR,
"#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong").text
assert "新增帖子测试" == title
# 招聘信息
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.find_element(By.CSS_SELECTOR, "#article_post_title").clear()
self.driver.find_element(By.CSS_SELECTOR, "#article_post_title").send_keys("新增帖子测试")
self.driver.find_element(By.CSS_SELECTOR,
"#edit-article > div.editormd-toolbar > div > ul > li:nth-child(5) > a > i").click()
time.sleep(0.4)
# 选择板块
self.driver.find_element(By.CSS_SELECTOR, "#article_post_borad").click()
self.driver.find_element(By.CSS_SELECTOR, "#article_post_borad > option:nth-child(7)").click()
self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(1)
self.driver.find_element(By.CSS_SELECTOR, "#article_post_submit").click()
text = self.driver.find_element(By.CSS_SELECTOR,
"body > div.jq-toast-wrap.bottom-right > div:nth-child(2)").text
assert "发帖成功" in text
title = self.driver.find_element(By.CSS_SELECTOR,
"#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong").text
assert "新增帖子测试" == title
# 福利待遇
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.find_element(By.CSS_SELECTOR, "#article_post_title").clear()
self.driver.find_element(By.CSS_SELECTOR, "#article_post_title").send_keys("新增帖子测试")
self.driver.find_element(By.CSS_SELECTOR,
"#edit-article > div.editormd-toolbar > div > ul > li:nth-child(5) > a > i").click()
time.sleep(0.4)
# 选择板块
self.driver.find_element(By.CSS_SELECTOR, "#article_post_borad").click()
self.driver.find_element(By.CSS_SELECTOR, "#article_post_borad > option:nth-child(8)").click()
self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(1)
self.driver.find_element(By.CSS_SELECTOR, "#article_post_submit").click()
text = self.driver.find_element(By.CSS_SELECTOR,
"body > div.jq-toast-wrap.bottom-right > div:nth-child(2)").text
assert "发帖成功" in text
title = self.driver.find_element(By.CSS_SELECTOR,
"#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong").text
assert "新增帖子测试" == title
# 灌水区
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.find_element(By.CSS_SELECTOR, "#article_post_title").clear()
self.driver.find_element(By.CSS_SELECTOR, "#article_post_title").send_keys("新增帖子测试")
self.driver.find_element(By.CSS_SELECTOR,
"#edit-article > div.editormd-toolbar > div > ul > li:nth-child(5) > a > i").click()
time.sleep(0.4)
# 选择板块
self.driver.find_element(By.CSS_SELECTOR, "#article_post_borad").click()
self.driver.find_element(By.CSS_SELECTOR, "#article_post_borad > option:nth-child(9)").click()
self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(1)
self.driver.find_element(By.CSS_SELECTOR, "#article_post_submit").click()
text = self.driver.find_element(By.CSS_SELECTOR,
"body > div.jq-toast-wrap.bottom-right > div:nth-child(2)").text
assert "发帖成功" in text
title = self.driver.find_element(By.CSS_SELECTOR,
"#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong").text
assert "新增帖子测试" == title
#异常填写
def EditFailtest(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()
self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(1)
self.driver.find_element(By.CSS_SELECTOR, "#article_post_title").clear()
self.driver.find_element(By.CSS_SELECTOR, "#edit-article > div.editormd-toolbar > div > ul > li:nth-child(39) > a > i").click()
time.sleep(0.4)
self.driver.find_element(By.CSS_SELECTOR,
"#edit-article > div.editormd-toolbar > div > ul > li:nth-child(5) > a > i").click()
time.sleep(0.4)
self.driver.find_element(By.CSS_SELECTOR, "#article_post_submit").click()
text = self.driver.find_element(By.CSS_SELECTOR,
"body > div.jq-toast-wrap.bottom-right > div").text
assert "请输入帖子标题" in text
#消除弹窗
self.driver.find_element(By.CSS_SELECTOR, "body > div.jq-toast-wrap.bottom-right > div > span.close-jq-toast-single").click()
# 不填写标题和内容
self.driver.find_element(By.CSS_SELECTOR, "#article_post_title").clear()
self.driver.find_element(By.CSS_SELECTOR,
"#edit-article > div.editormd-toolbar > div > ul > li:nth-child(39) > a > i").click()
time.sleep(0.4)
self.driver.find_element(By.CSS_SELECTOR, "#article_post_submit").click()
text = self.driver.find_element(By.CSS_SELECTOR,
"body > div.jq-toast-wrap.bottom-right > div:nth-child(2)").text
assert "请输入帖子标题" in text
self.driver.find_element(By.CSS_SELECTOR,
"body > div.jq-toast-wrap.bottom-right > div:nth-child(2) > span.close-jq-toast-single").click()
#不填写内容
self.driver.find_element(By.CSS_SELECTOR, "#article_post_title").clear()
self.driver.find_element(By.CSS_SELECTOR, "#article_post_title").send_keys("新增帖子测试")
self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(1)
self.driver.find_element(By.CSS_SELECTOR,
"#edit-article > div.editormd-toolbar > div > ul > li:nth-child(39) > a > i").click()
time.sleep(0.4)
self.driver.find_element(By.CSS_SELECTOR, "#article_post_submit").click()
text = self.driver.find_element(By.CSS_SELECTOR,
"body > div.jq-toast-wrap.bottom-right > div").text
assert "请输入帖子内容" in text
#修改帖子
def EditModifySuc(self):
self.driver.find_element(By.CSS_SELECTOR, "#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong").click()
text1 = self.driver.find_element(By.CSS_SELECTOR, "#details_article_content > p").text
self.driver.find_element(By.CSS_SELECTOR, "#details_artile_edit").click()
time.sleep(0.4)
#只修改标题
self.driver.find_element(By.CSS_SELECTOR,"#edit_article_title").clear()
self.driver.find_element(By.CSS_SELECTOR,"#edit_article_title").send_keys("修改帖子标题测试")
self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(1)
self.driver.find_element(By.CSS_SELECTOR, "#edit_article_submit").click()
text = self.driver.find_element(By.CSS_SELECTOR, "#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong").text
assert "修改帖子标题测试" == text
self.driver.find_element(By.CSS_SELECTOR, "#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong").click()
text = self.driver.find_element(By.CSS_SELECTOR, "#details_article_content > p").text
assert text1 == text
#只修改内容
self.driver.find_element(By.CSS_SELECTOR, "#details_artile_edit").click()
time.sleep(0.4)
self.driver.find_element(By.CSS_SELECTOR,"#edit_article_content_area > div.editormd-toolbar > div > ul > li:nth-child(39) > a > i").click()
time.sleep(0.4)
self.driver.find_element(By.CSS_SELECTOR,"#edit_article_content_area > div.editormd-toolbar > div > ul > li:nth-child(20) > a > i").click()
self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(1)
self.driver.find_element(By.CSS_SELECTOR, "#edit_article_submit").click()
text = self.driver.find_element(By.CSS_SELECTOR,
"#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong").text
assert "修改帖子标题测试" == text
self.driver.find_element(By.CSS_SELECTOR,
"#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong").click()
text = self.driver.find_element(By.CSS_SELECTOR, "#details_article_content > p").text
assert "1." == text
#标题与内容都修改
self.driver.find_element(By.CSS_SELECTOR, "#details_artile_edit").click()
time.sleep(0.4)
self.driver.find_element(By.CSS_SELECTOR,"#edit_article_title").clear()
self.driver.find_element(By.CSS_SELECTOR,"#edit_article_content_area > div.editormd-toolbar > div > ul > li:nth-child(39) > a > i").click()
self.driver.find_element(By.CSS_SELECTOR,"#edit_article_title").send_keys("修改帖子标题测试2")
self.driver.find_element(By.CSS_SELECTOR,
"#edit_article_content_area > div.editormd-toolbar > div > ul > li:nth-child(6) > a > i").click()
self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(1)
self.driver.find_element(By.CSS_SELECTOR, "#edit_article_submit").click()
text = self.driver.find_element(By.CSS_SELECTOR,
"#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong").text
assert "修改帖子标题测试2" == text
self.driver.find_element(By.CSS_SELECTOR,
"#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong").click()
text = self.driver.find_element(By.CSS_SELECTOR, "#details_article_content > p").text
assert "**" == text
# 标题与内容都不修改
self.driver.find_element(By.CSS_SELECTOR, "#details_artile_edit").click()
time.sleep(0.4)
self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(1)
self.driver.find_element(By.CSS_SELECTOR, "#edit_article_submit").click()
text = self.driver.find_element(By.CSS_SELECTOR,
"#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong").text
assert "修改帖子标题测试2" == text
self.driver.find_element(By.CSS_SELECTOR,
"#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong").click()
text = self.driver.find_element(By.CSS_SELECTOR, "#details_article_content > p").text
assert "**" == text
#异常修改帖子
def EditModifyFail(self):
#修改标题为空
self.driver.find_element(By.CSS_SELECTOR, "#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong").click()
self.driver.find_element(By.CSS_SELECTOR, "#details_artile_edit").click()
time.sleep(0.4)
self.driver.find_element(By.CSS_SELECTOR, "#edit_article_title").clear()
self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(1)
self.driver.find_element(By.CSS_SELECTOR, "#edit_article_submit").click()
text = self.driver.find_element(By.CSS_SELECTOR,
"body > div.jq-toast-wrap.bottom-right > div").text
assert "请输入帖子标题" in text
#消除弹窗
self.driver.find_element(By.CSS_SELECTOR, "body > div.jq-toast-wrap.bottom-right > div > span.close-jq-toast-single").click()
#修改标题和内容为空
self.driver.find_element(By.CSS_SELECTOR, "#edit_article_content_area > div.editormd-toolbar > div > ul > li:nth-child(39) > a > i").click()
time.sleep(0.4)
self.driver.find_element(By.CSS_SELECTOR, "#edit_article_submit").click()
text = self.driver.find_element(By.CSS_SELECTOR,
"body > div.jq-toast-wrap.bottom-right > div:nth-child(2)").text
assert "请输入帖子标题" in text
self.driver.find_element(By.CSS_SELECTOR,
"body > div.jq-toast-wrap.bottom-right > div:nth-child(2) > span.close-jq-toast-single").click()
#修改内容为空
# 定位页面顶部的元素
top_element = self.driver.find_element(By.CSS_SELECTOR,"#edit_article_title")
# 滚动到该元素
self.driver.execute_script("arguments[0].scrollIntoView();", top_element)
self.driver.find_element(By.CSS_SELECTOR, "#edit_article_title").send_keys("修改帖子测试")
self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(1)
self.driver.find_element(By.CSS_SELECTOR, "#edit_article_submit").click()
text = self.driver.find_element(By.CSS_SELECTOR,
"body > div.jq-toast-wrap.bottom-right > div").text
assert "请输入帖子内容" in text
3.8 “我的帖子”页面
ForumMyFPage.py
import time
from selenium.webdriver.common.by import By
from common.Utils import ForumDriver
from tests import ForumLogin
class ForumMyFPage:
url = ""
driver = ""
def __init__(self):
self.url = "http://127.0.0.1:58080/index.html"
self.driver = ForumDriver.driver
self.driver.get(self.url)
#当前用户
def MyFPage(self):
self.driver.find_element(By.CSS_SELECTOR, "#index_nav_avatar").click()
self.driver.find_element(By.CSS_SELECTOR, "#index_user_profile").click()
#记录发帖数
try:
num1 = len(self.driver.find_elements(By.CSS_SELECTOR, "#profile_article_body > li"))
except:
num1 = 0
num2 = self.driver.find_element(By.CSS_SELECTOR, "#profile_articleCount").text
if num1 != num2:
print("“我的帖子”页发帖数显示错误")
#是否可以进入详情页
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()
text = self.driver.find_element(By.CSS_SELECTOR, "#bit-forum-content > div.page-body > div > div > div:nth-child(2) > h3").text
assert "最新回复" in text
#其他用户
def OthUserFPage(self):
self.driver.find_element(By.CSS_SELECTOR, "#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong").click()
self.driver.find_element(By.CSS_SELECTOR, "#article_details_author_name").click()
# 记录发帖数
try:
num1 = len(self.driver.find_elements(By.CSS_SELECTOR, "#profile_article_body > li"))
except:
num1 = 0
num2 = self.driver.find_element(By.CSS_SELECTOR, "#profile_articleCount").text
num2 = self.driver.find_element(By.CSS_SELECTOR, "#profile_articleCount").text
if num1 != num2:
print("“我的帖子”页发帖数显示错误")
# 发私信
# #点击取消
# self.driver.find_element(By.CSS_SELECTOR, "#btn_details_send_message").click()
# self.driver.find_element(By.XPATH, "").click()
# time.sleep(2)
# 内容为空发送
self.driver.find_element(By.CSS_SELECTOR, "#btn_profile_send_message").click()
time.sleep(0.4)
self.driver.find_element(By.CSS_SELECTOR, "#btn_index_send_message > svg").click()
text = self.driver.find_element(By.CSS_SELECTOR, "body > div.jq-toast-wrap.bottom-right > div").text
assert "请输入要发送的内容" in text
# 内容不为空发送
self.driver.find_element(By.CSS_SELECTOR, "#btn_profile_send_message").click()
self.driver.find_element(By.CSS_SELECTOR, "#index_message_receive_content").send_keys("私信测试")
self.driver.find_element(By.CSS_SELECTOR, "#btn_index_send_message").click()
text = self.driver.find_element(By.CSS_SELECTOR, "body > div.jq-toast-wrap.bottom-right > div:nth-child(2)").text
assert "发送成功" in text
# 查看是否收到
ForumLogin.ForumLgin().LoginSucLgin()
# 检测信息
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()
time.sleep(0.2)
text = self.driver.find_element(By.CSS_SELECTOR,
"#index_div_message_list > div:nth-child(1) > div > div.col.text-truncate > div").text
assert "私信测试" in text
ForumLogin.ForumLgin().LoginSucLgin2()
# 是否可以进入详情页
self.driver.find_element(By.CSS_SELECTOR,
"#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong").click()
self.driver.find_element(By.CSS_SELECTOR, "#article_details_author_name").click()
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()
text = self.driver.find_element(By.CSS_SELECTOR,
"#bit-forum-content > div.page-body > div > div > div:nth-child(2) > h3").text
assert "最新回复" in text
3.9 “个人中心”页面
ForumPCenter.py
import time
from selenium.webdriver.common.by import By
from selenium.webdriver.remote.webelement import WebElement
from tests import ForumLogin
from common.Utils import ForumDriver
class ForumPCenter:
url = ""
driver = ""
def __init__(self):
self.url = "http://127.0.0.1:58080/index.html"
self.driver = ForumDriver.driver
self.driver.get(self.url)
self.driver.find_element(By.CSS_SELECTOR, "#index_nav_avatar").click()
self.driver.find_element(By.CSS_SELECTOR, "#index_user_settings").click()
#修改头像
def PCenterHeadshot(self):
text1 = self.driver.find_element(By.CSS_SELECTOR, "#settings_avatar").text
self.driver.find_element(By.CSS_SELECTOR, "#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").send_keys("D:\自动化测试脚本\cbcfc65a0c5c4f8c587c68b31af00b9.jpg")
text2 = self.driver.find_element(By.CSS_SELECTOR, "#settings_avatar").text
if text1 == text2:
print("修改失败")
#修改昵称
def PCenterName(self):
self.driver.find_element(By.CSS_SELECTOR, "#setting_input_nickname").clear()
self.driver.find_element(By.CSS_SELECTOR, "#setting_input_nickname").send_keys("zhangsan")
self.driver.find_element(By.CSS_SELECTOR, "#setting_submit_nickname").click()
text = self.driver.find_element(By.CSS_SELECTOR, "body > div.jq-toast-wrap.bottom-right > div").text
assert "操作成功" in text
text = self.driver.find_element(By.CSS_SELECTOR, "#settings_nickname").text
assert "zhangsan" == text
self.driver.find_element(By.CSS_SELECTOR, "#setting_input_nickname").clear()
self.driver.find_element(By.CSS_SELECTOR, "#setting_input_nickname").send_keys("张三")
self.driver.find_element(By.CSS_SELECTOR, "#setting_submit_nickname").click()
#修改邮箱
def PCenterEmail(self):
self.driver.find_element(By.CSS_SELECTOR, "#setting_input_email").clear()
self.driver.find_element(By.CSS_SELECTOR, "#setting_input_email").send_keys("123")
self.driver.find_element(By.CSS_SELECTOR, "#setting_submit_email").click()
text = self.driver.find_element(By.CSS_SELECTOR, "body > div.jq-toast-wrap.bottom-right > div").text
assert "操作成功" in text
self.driver.find_element(By.CSS_SELECTOR, "#index_nav_avatar").click()
self.driver.find_element(By.CSS_SELECTOR, "#index_user_profile").click()
text = self.driver.find_element(By.CSS_SELECTOR, "#profile_email").text
assert "123" == text
self.driver.find_element(By.CSS_SELECTOR, "#index_nav_avatar").click()
self.driver.find_element(By.CSS_SELECTOR, "#index_user_settings").click()
self.driver.find_element(By.CSS_SELECTOR, "#setting_input_email").clear()
self.driver.find_element(By.CSS_SELECTOR, "#setting_input_email").send_keys("邮箱地址")
self.driver.find_element(By.CSS_SELECTOR, "#setting_submit_email").click()
#修改电话号码
def PCenterPhoneNum(self):
self.driver.find_element(By.CSS_SELECTOR, "#setting_input_phoneNum").clear()
self.driver.find_element(By.CSS_SELECTOR, "#setting_input_phoneNum").send_keys("123456789")
self.driver.find_element(By.CSS_SELECTOR, "#setting_submit_phoneNum").click()
text = self.driver.find_element(By.CSS_SELECTOR, "body > div.jq-toast-wrap.bottom-right > div").text
assert "操作成功" in text
self.driver.find_element(By.CSS_SELECTOR, "#setting_input_phoneNum").clear()
self.driver.find_element(By.CSS_SELECTOR, "#setting_input_phoneNum").send_keys("电话号码")
self.driver.find_element(By.CSS_SELECTOR, "#setting_submit_phoneNum").click()
#修改个人简介
def PCenterProfile(self):
self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(1)
self.driver.find_element(By.CSS_SELECTOR, "#settings_textarea_remark").clear()
self.driver.find_element(By.CSS_SELECTOR, "#settings_textarea_remark").send_keys("简介测试")
self.driver.find_element(By.CSS_SELECTOR, "#settings_submit_remark").click()
text = self.driver.find_element(By.CSS_SELECTOR, "body > div.jq-toast-wrap.bottom-right > div").text
assert "操作成功" in text
# 定位页面顶部的元素
top_element = self.driver.find_element(By.CSS_SELECTOR, "#index_nav_avatar")
# 滚动到该元素
self.driver.execute_script("arguments[0].scrollIntoView();", top_element)
time.sleep(0.4)
self.driver.find_element(By.CSS_SELECTOR, "#index_nav_avatar").click()
self.driver.find_element(By.CSS_SELECTOR, "#index_user_profile").click()
text = self.driver.find_element(By.CSS_SELECTOR, "#profile_remark").text
assert "简介测试" == text
self.driver.find_element(By.CSS_SELECTOR, "#index_nav_avatar").click()
self.driver.find_element(By.CSS_SELECTOR, "#index_user_settings").click()
self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(1)
self.driver.find_element(By.CSS_SELECTOR, "#settings_textarea_remark").clear()
self.driver.find_element(By.CSS_SELECTOR, "#settings_textarea_remark").send_keys("123")
self.driver.find_element(By.CSS_SELECTOR, "#settings_submit_remark").click()
#修改密码
def PCenterPasswordFail(self):
self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(1)
#全部为空
self.driver.find_element(By.CSS_SELECTOR, "#settings_input_oldPassword").clear()
self.driver.find_element(By.CSS_SELECTOR, "#settings_input_newPassword").clear()
self.driver.find_element(By.CSS_SELECTOR, "#settings_input_passwordRepeat").clear()
self.driver.find_element(By.CSS_SELECTOR, "#settings_submit_password").click()
try:
text = self.driver.find_element(By.CSS_SELECTOR, "body > div.jq-toast-wrap.bottom-right > div").text
assert "密码不能为空" in text
except:
print("密码为空无文字提示")
# 原密码为空
self.driver.find_element(By.CSS_SELECTOR, "#settings_input_newPassword").send_keys("123456")
self.driver.find_element(By.CSS_SELECTOR, "#settings_input_passwordRepeat").send_keys("123456")
self.driver.find_element(By.CSS_SELECTOR, "#settings_submit_password").click()
try:
text = self.driver.find_element(By.CSS_SELECTOR, "body > div.jq-toast-wrap.bottom-right > div").text
assert "原密码不能为空" in text
except:
print("原密码为空无文字提示")
# 新密码为空
self.driver.find_element(By.CSS_SELECTOR, "#settings_input_newPassword").clear()
self.driver.find_element(By.CSS_SELECTOR, "#settings_input_oldPassword").send_keys("123456")
self.driver.find_element(By.CSS_SELECTOR, "#settings_submit_password").click()
try:
text = self.driver.find_element(By.CSS_SELECTOR, "body > div.jq-toast-wrap.bottom-right > div").text
assert "新密码不能为空" in text
except:
print("新密码为空无文字提示")
# 确认密码为空
self.driver.find_element(By.CSS_SELECTOR, "#settings_input_passwordRepeat").clear()
self.driver.find_element(By.CSS_SELECTOR, "#settings_input_newPassword").send_keys("123456")
self.driver.find_element(By.CSS_SELECTOR, "#settings_submit_password").click()
try:
text = self.driver.find_element(By.CSS_SELECTOR, "body > div.jq-toast-wrap.bottom-right > div").text
assert "确认密码错误" in text
except:
print("确认密码错误无文字提示")
# 原密码填写错误
self.driver.find_element(By.CSS_SELECTOR, "#settings_input_oldPassword").clear()
self.driver.find_element(By.CSS_SELECTOR, "#settings_input_newPassword").clear()
self.driver.find_element(By.CSS_SELECTOR, "#settings_input_passwordRepeat").clear()
self.driver.find_element(By.CSS_SELECTOR, "#settings_input_oldPassword").send_keys("12")
self.driver.find_element(By.CSS_SELECTOR, "#settings_input_newPassword").send_keys("123456")
self.driver.find_element(By.CSS_SELECTOR, "#settings_input_passwordRepeat").send_keys("123456")
self.driver.find_element(By.CSS_SELECTOR, "#settings_submit_password").click()
try:
text = self.driver.find_element(By.CSS_SELECTOR, "body > div.jq-toast-wrap.bottom-right > div").text
if "原密码错误" not in text:
print("文字提示错误")
except:
print("原密码错误无文字提示")
# 确认密码与新密码不一致
self.driver.find_element(By.CSS_SELECTOR, "#settings_input_oldPassword").send_keys("123456")
self.driver.find_element(By.CSS_SELECTOR, "#settings_input_newPassword").send_keys("123")
self.driver.find_element(By.CSS_SELECTOR, "#settings_input_passwordRepeat").send_keys("123456")
self.driver.find_element(By.CSS_SELECTOR, "#settings_submit_password").click()
try:
text = self.driver.find_element(By.CSS_SELECTOR, "body > div.jq-toast-wrap.bottom-right > div:nth-child(2)").text
if "两次输入的密码不相同" not in text:
print("文字提示错误")
except:
print("两次输入密码不相同无文字提示")
# 新密码与原密码一致
self.driver.find_element(By.CSS_SELECTOR, "#settings_input_oldPassword").clear()
self.driver.find_element(By.CSS_SELECTOR, "#settings_input_newPassword").clear()
self.driver.find_element(By.CSS_SELECTOR, "#settings_input_passwordRepeat").clear()
self.driver.find_element(By.CSS_SELECTOR, "#settings_input_oldPassword").send_keys("123456")
self.driver.find_element(By.CSS_SELECTOR, "#settings_input_newPassword").send_keys("123456")
self.driver.find_element(By.CSS_SELECTOR, "#settings_input_passwordRepeat").send_keys("123456")
self.driver.find_element(By.CSS_SELECTOR, "#settings_submit_password").click()
try:
text1 = self.driver.find_element(By.CSS_SELECTOR, "body > div.jq-toast-wrap.bottom-right > div:nth-child(3)").text
if "新密码与原密码相同" not in text1:
print("新密码与原密码相同无文字提示")
except:
try:
text2 = self.driver.find_element(By.CSS_SELECTOR,
"body > div > div > div > div:nth-child(1) > div > div.card.card-md > div > h2").text
if "用户登录" in text2:
print("新密码与原密码一致修改密码操作不应该成功,但是成功了")
except:
if "新密码与原密码相同" not in text1:
print("新密码与原密码相同无文字提示")
ForumLogin.ForumLgin().LoginSucLgin()
#正常修改
def PCenterPasswordSuc(self):
self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(1)
self.driver.find_element(By.CSS_SELECTOR, "#settings_input_oldPassword").clear()
self.driver.find_element(By.CSS_SELECTOR, "#settings_input_newPassword").clear()
self.driver.find_element(By.CSS_SELECTOR, "#settings_input_passwordRepeat").clear()
self.driver.find_element(By.CSS_SELECTOR, "#settings_input_oldPassword").send_keys("123456")
self.driver.find_element(By.CSS_SELECTOR, "#settings_input_newPassword").send_keys("123")
self.driver.find_element(By.CSS_SELECTOR, "#settings_input_passwordRepeat").send_keys("123")
self.driver.find_element(By.CSS_SELECTOR, "#settings_submit_password").click()
try:
text = self.driver.find_element(By.CSS_SELECTOR, "body > div.jq-toast-wrap.bottom-right > div").text
if "操作成功" not in text:
print("修改成功无文字提示")
except:
text2 = self.driver.find_element(By.CSS_SELECTOR,
"body > div > div > div > div:nth-child(1) > div > div.card.card-md > div > h2").text
if "用户登录" in text2:
print("直接跳转至登录页面")
# 清空输入框
self.driver.find_element(By.CSS_SELECTOR, "#username").clear()
self.driver.find_element(By.CSS_SELECTOR, "#password").clear()
# 输入正确的用户名和密码
self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("zhangsan")
self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123")
# 点击登录
self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
self.driver.find_element(By.CSS_SELECTOR, "#index_nav_avatar").click()
self.driver.find_element(By.CSS_SELECTOR, "#index_user_settings").click()
self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(1)
self.driver.find_element(By.CSS_SELECTOR, "#settings_input_oldPassword").clear()
self.driver.find_element(By.CSS_SELECTOR, "#settings_input_newPassword").clear()
self.driver.find_element(By.CSS_SELECTOR, "#settings_input_passwordRepeat").clear()
self.driver.find_element(By.CSS_SELECTOR, "#settings_input_oldPassword").send_keys("123")
self.driver.find_element(By.CSS_SELECTOR, "#settings_input_newPassword").send_keys("123456")
self.driver.find_element(By.CSS_SELECTOR, "#settings_input_passwordRepeat").send_keys("123456")
self.driver.find_element(By.CSS_SELECTOR, "#settings_submit_password").click()
ForumLogin.ForumLgin().LoginSucLgin()
3.10 私信回复功能
ForumReply.py
import time
from selenium.webdriver.common.by import By
from tests import ForumLogin
from common.Utils import ForumDriver
class ForumReply:
url = ""
driver = ""
def __init__(self):
self.url = "http://127.0.0.1:58080/index.html"
self.driver = ForumDriver.driver
self.driver.get(self.url)
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 > svg").click()
def Reply(self):
self.driver.find_element(By.CSS_SELECTOR, "#index_div_message_list > div:nth-child(1) > div > div.col.text-truncate > a").click()
self.driver.find_element(By.CSS_SELECTOR, "#btn_index_message_reply").click()
time.sleep(0.4)
self.driver.find_element(By.CSS_SELECTOR, "#index_message_reply_receive_content").send_keys("回复测试")
self.driver.find_element(By.CSS_SELECTOR, "#btn_index_send_message_reply").click()
text = self.driver.find_element(By.CSS_SELECTOR, "body > div.jq-toast-wrap.bottom-right > div").text
assert "操作成功" in text
ForumLogin.ForumLgin().LoginSucLgin2()
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 > svg").click()
time.sleep(0.4)
text = self.driver.find_element(By.CSS_SELECTOR, "#index_div_message_list > div:nth-child(1) > div > div.col.text-truncate > div").text
assert "回复测试" == text
ForumLogin.ForumLgin().LoginSucLgin()
3.11 创建启动文件
RunTest.py
from common.Utils import ForumDriver
from tests import ForumRegister
from tests import ForumLogin
from tests import ForumHpage
from tests import ForumDetails
from tests import ForumEdit
from tests import ForumMyFPage
from tests import ForumPCenter
from tests import ForumReply
if __name__ == '__main__':
ForumHpage.ForumHpage().HpageNLogin()
ForumRegister.ForumRegister().Registerfailtest1()
ForumRegister.ForumRegister().Registerfailtest2()
ForumRegister.ForumRegister().Registerfailtest3()
ForumRegister.ForumRegister().Registerfailtest4()
ForumRegister.ForumRegister().Registerfailtest5()
ForumRegister.ForumRegister().Registerfailtest6()
ForumRegister.ForumRegister().Registerfailtest7()
ForumRegister.ForumRegister().Registerfailtest8()
ForumRegister.ForumRegister().Registerfailtest9()
ForumRegister.ForumRegister().RegisterSuc()
ForumRegister.ForumRegister().RrgisterOthElement()
ForumLogin.ForumLgin().LoginfailTest1()
ForumLogin.ForumLgin().LoginfailTest2()
ForumLogin.ForumLgin().LoginfailTest3()
ForumLogin.ForumLgin().LoginfailTest4()
ForumLogin.ForumLgin().LoginfailTest5()
ForumLogin.ForumLgin().LoginfailTest6()
ForumLogin.ForumLgin().LoginOthElement()
ForumLogin.ForumLgin().LoginSucLgin()
ForumHpage.ForumHpage().HpageSector()
ForumHpage.ForumHpage().HpageOthElement()
ForumHpage.ForumHpage().HpageInfo()
ForumHpage.ForumHpage().HpagePost()
ForumDetails.ForumDetails().DetailsReply()
ForumDetails.ForumDetails().DetailsInfo()
ForumDetails.ForumDetails().DetailsUerInfo()
ForumDetails.ForumDetails().DetailsSector()
ForumDetails.ForumDetails().DetailsOthElement()
ForumLogin.ForumLgin().LoginSucLgin2()
ForumDetails.ForumDetails().DetailsOthInfo()
ForumDetails.ForumDetails().DetailsOthUerInfo()
ForumDetails.ForumDetails().DetailsOthUserElement()
ForumDetails.ForumDetails().DetailsOthUserReply()
ForumMyFPage.ForumMyFPage().OthUserFPage()
ForumLogin.ForumLgin().LoginSucLgin()
ForumEdit.ForumEdit().EditSucAdd()
ForumEdit.ForumEdit().EditFailtest()
ForumEdit.ForumEdit().EditModifySuc()
ForumEdit.ForumEdit().EditModifyFail()
ForumMyFPage.ForumMyFPage().MyFPage()
ForumPCenter.ForumPCenter().PCenterHeadshot()
ForumPCenter.ForumPCenter().PCenterName()
ForumPCenter.ForumPCenter().PCenterEmail()
ForumPCenter.ForumPCenter().PCenterPhoneNum()
ForumPCenter.ForumPCenter().PCenterProfile()
ForumPCenter.ForumPCenter().PCenterPasswordFail()
ForumPCenter.ForumPCenter().PCenterPasswordSuc()
ForumReply.ForumReply().Reply()
ForumDriver.driver.quit()
四、项目BUG
本次测试共发现了13个BUG。
BUG1:
预期结果:搜索能够点击搜索
实际结果:搜索只能回车进行搜索
BUG2:
预期结果:点击搜索出现搜索内容
实际结果:未出现搜索内容
BUG3:
预期结果:个人主页修改信息为空有文字提示
实际结果:无文字提示,仅简单光标闪烁
BUG4:
预期结果:修改密码中,原密码错误,文字提示
实际结果: 文字提示错误,显示“参数错误”
BUG5:
预期结果:修改密码中,新密码与旧密码一致,不能修改成功,文字提示
实际结果: 可以修改成功
BUG6:
预期结果:修改密码成功出现文字提示,并跳转到登录页面重新登录
实际结果: 修改成功无文字提示,直接跳转至登录页面
BUG7:
预期结果:修改帖子能够选择板块修改
实际结果: 修改帖子不能选择板块修改
BUG8:
预期结果:昵称重复注册失败,提示已存在昵称
实际结果:注册成功
BUG9:
预期结果:首次点击点赞按钮点赞成功,再次点击取消点赞
实际结果:再次点击无法取消,可以无限点赞,且点赞数增加
BUG10:
预期结果:每次回复帖子之后,输入框内容清空
实际结果:回复帖子后,输入框内容未清空
BUG11:
预期结果:回复内容可删除
实际结果:回复内容不可删除
BUG12:
预期结果:点击帖子区域查看帖子
实际结果:只能点击标题文字查看帖子,文字内容短不易察觉
BUG13:
预期结果:详情页标题与内容区别明显
实际结果:详情页标题与内容无明显分格符
五、项目总结
本次测试共编写了70条测试用例,覆盖了论坛系统的注册页、登录页、编辑页和详情页等功能,以及论坛系统的界面、兼容性、易用性、安全性等方面进行了测试,同时本次测试采用手动测试+自动化测试,通过本次测试共发现了13个大小BUG,以便更好完善论坛系统。