自动化测试的实施

博客系统的功能测试

编写测试用例

1、登录页面:页面正常打开

(1)、正常登录:账号:zhangsan,密码:123456

(2)、异常登录:账号为空/密码为空、不为空:账号错误/密码错误

2、博客列表页:页面正常打开

(1):个人信息模块、菜单模块、博客列表模块

(2):未登录状态:弹窗提示登录-进入登录页面

3、编辑博客页

(1):登录状态下:编辑博客页面正常打开、正常填写博客能提交成功、异常填写提交失败

(2):未登录状态下-弹窗提示登录-进入登录页面

测试环境和模块

模块:登录、博客详情页、编辑博客

环境:Window11+Edge146+Pycharm2025.3.3

工具:Python、selenium

登录页面

创建驱动对象

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

class Driver:
    driver=None
    def __init__(self):
        options = webdriver.EdgeOptions()
        self.driver=webdriver.Edge(service=Service("D:\\edgedriver_win64\\msedgedriver.exe"))
        self.driver.implicitly_wait(3)

    def getScreenshot(self):
        #创建屏幕截图
        dirname=datetime.datetime.now().strftime("%Y-%m-%d")
        #判断dirname文件夹是否存在
        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)

BlogDriver=Driver()

驱动对象:控制浏览器设备的遥控器,不创建驱动对象,代码就碰不到浏览器

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

class BlogLogin:
    url=""
    driver=""
    def __init__(self):
        self.url="http://49.235.61.184:19090/blog_login.html"
        self.driver=BlogDriver.driver
        self.driver.get(self.url)


    #成功登录的测试用例
    def LoginSucTest(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()
        self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.left > div > h3")
        BlogDriver.getScreenshot()

    #异常登录测试用例
    def LoginFailedTest(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("12345")#错误的密码
        self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
        BlogDriver.getScreenshot()

login=BlogLogin()
login.LoginSucTest()

driver.get():是可以打开网页

driver.find_element():查找元素

send_keys():查找到输入框进行输入

click():点击

driver.quit():关闭浏览器

博客详情页

python 复制代码
from selenium.webdriver.common.by import By
from common.Utils import BlogDriver
#博客首页测试用例
class BlogList:
    url=""
    driver=""
    def __init__(self):
        self.url = "http://49.235.61.184:19090/blog_list.html"
        self.driver = BlogDriver.driver
        self.driver.get(self.url)

    #测试首页(登录情况下)
    def ListTestByLogin(self):

        #测试博客标题是否存在
        self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div:nth-child(2) > div.title")
        self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div:nth-child(2) > div.desc")
        #测试博客按钮是否存在
        self.driver.find_element(By.CSS_SELECTOR, "body > div.container > div.right > div:nth-child(2) > a")
        self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.left > div > h3")
        #添加屏幕截图
        BlogDriver.getScreenshot()

必须要登录完成后才能进行查看

编辑博客

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

from common.Utils import BlogDriver

class BlogEdit:
    url=""
    driver=""
    def __init__(self):
        self.url="http://49.235.61.184:19090/blog_edit.html"
        self.driver=BlogDriver.driver
        self.driver.get(self.url)

    def EditSucTestByLogin(self):
        self.driver.find_element(By.CSS_SELECTOR,"#title").send_keys("自动化测试程序")
        self.driver.find_element(By.CSS_SELECTOR,"#submit").click()

        adult=self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div:nth-child(2) > div.title").text
        assert adult=="自动化测试创建"
        BlogDriver.getScreenshot()

将几个文件进行整合

python 复制代码
from Tests import BlogLogin
from common.Utils import BlogDriver
from Tests import BlogList
from Tests import BlogEdit
if __name__ == "__main__":
    # BlogLogin.BlogLogin().LoginFailedTest()
    BlogLogin.BlogLogin().LoginSucTest()
    BlogList.BlogList().ListTestByLogin()
    BlogEdit.BlogEdit().EditSucTestByLogin()

    BlogDriver.driver.quit()

查找对应元素ID的方法

|---------------------------|---------------------------------------------------|------|---|
| 定位方式 | 代码示例 | 适用场景 | |
| **By.ID** | `find_element(By.ID, "username")` | 元素有唯一 ID 时首选 ||
| **By.NAME** | `find_element(By.NAME, "email")` | 表单元素常用 ||
| **By.CLASS\_NAME** | `find_element(By.CLASS_NAME, "btn-primary")` | 样式类名唯一时 ||
| **By.TAG\_NAME** | `find_element(By.TAG_NAME, "input")` | 特定标签类型 ||
| **By.XPATH** | `find_element(By.XPATH, "//div[@id='main']")` | 复杂定位场景 ||
| **By.CSS\_SELECTOR** | `find_element(By.CSS_SELECTOR, "#main .title")` | 灵活强大的选择器 ||

相关推荐
Hello eveybody6 小时前
介绍一下背包DP(Python)
开发语言·python·动态规划·dp·背包dp
2301_795099746 小时前
让 CSS Grid 自适应容器尺寸的动态布局方案
jvm·数据库·python
AI进化营-智能译站6 小时前
ROS2 C++开发系列12-用多态与虚函数构建可扩展的ROS2机器人行为模块
开发语言·c++·ai·机器人
呆萌的代Ma6 小时前
python读取并加载.env的配置文件
python
Muyuan19986 小时前
27.RAG 系统中的上下文充分性判断:从 Chunk 数量、FAISS 距离到 LLM Relevance Gate
python·django·pdf·fastapi·faiss
iCxhust6 小时前
微机原理实践教程(C语言篇)---A002流水灯
c语言·开发语言·单片机·嵌入式硬件·51单片机·课程设计·微机原理
莎士比亚的文学花园6 小时前
Linux驱动开发(3)——设备树
开发语言·javascript·ecmascript
图码6 小时前
如何用多种方法判断字符串是否为回文?
开发语言·数据结构·c++·算法·阿里云·线性回归·数字雕刻
U盘失踪了7 小时前
python curl转python脚本
开发语言·chrome·python
charlie1145141917 小时前
Linux 字符设备驱动:cdev、设备号与设备模型
linux·开发语言·驱动开发·c