自动化测试的实施

博客系统的功能测试

编写测试用例

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")` | 灵活强大的选择器 ||

相关推荐
love530love11 小时前
OpenClaw Windows Companion 桌面客户端 连接 LM Studio 完整配置指南
人工智能·windows·python·openclaw
程序喵大人12 小时前
【C++进阶】STL容器与迭代器 - 01 STL 容器先解决元素放在哪里
开发语言·c++·stl
cui_ruicheng12 小时前
Python从入门到实战(十六):多进程编程
开发语言·python
wdfk_prog14 小时前
嵌入式面试真题第 15 题:不可恢复异常后的通用崩溃快照、调用栈保存与离线分析架构
linux·开发语言·面试·架构
_Jimmy_14 小时前
FastAPI + SQLAlchemy全局事务管理
python·fastapi
晴空了无痕14 小时前
从 Go 基础到 K8s:一条可落地的 Go 服务端成长路线
开发语言·后端·golang·kubernetes
用户83562907805114 小时前
如何使用 Python 在 Excel 中添加、编辑和删除超链接
后端·python
神明不懂浪漫14 小时前
【第五章】Java中的继承与多态
java·开发语言
神州世通15 小时前
解密企业通信安全防线:Avaya Aura 三层安全架构深度解析
开发语言·php
AC赳赳老秦16 小时前
企业工商公开信息采集分析:OpenClaw 批量查询企业工商信息,生成企业画像报告
大数据·开发语言·python·自动化·php·deepseek·openclaw