自动化测试的实施

博客系统的功能测试

编写测试用例

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

相关推荐
2501_941875282 小时前
从配置中心到动态管理的互联网工程语法演进与多语言实践分享
开发语言·python
hfywmsj2 小时前
广州餐饮铺位招租决策模型:多因子选址系统设计
开发语言·人工智能·python·广州餐饮铺位招租
努力的lpp4 小时前
php反序列化一(大白话版)
开发语言·web安全·php·ctf·反序列化
菜鸟~noob2334 小时前
【电子战】第03篇:CFAR(恒虚警)处理【含matlab代码】
开发语言·matlab
泡海椒5 小时前
内置SPI函数库详解:JQuick-Java Builtin工具类实战用法
java·开发语言·python
hqyjzsb5 小时前
零 AI 项目经验,学 Python 转型 AI 的正确顺序是什么?
开发语言·人工智能·python·算法·职场和发展·数据挖掘·数据分析
sanjiaomao3336 小时前
从论文公式到Python实现:用单元测试校验滑动平均算法
python·算法·单元测试
Keven_116 小时前
算法札记:ACM适用的很骚的C++语法(持续更新)
开发语言·c++
脉动数据行情17 小时前
C# 实现德指 DAX 期货 WebSocket 实时行情监听
开发语言·websocket·c#
大圣编蚕7 小时前
Java ByteArrayInputStream 详解:从入门到实战
java·开发语言·算法