自动化测试的实施

博客系统的功能测试

编写测试用例

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

相关推荐
无限码力2 小时前
华为OD技术面真题 - Python开发 - 4
python·华为od·华为od技术面真题·华为od面试八股文·华为od面试真题·华为odpython开发真题·华为od技术面题目
波波0072 小时前
写出稳定C#系统的关键:不可变性思想解析
开发语言·c#·wpf
dr_yingli3 小时前
fMRI(3-1)报告(个体化报告)生成器说明
开发语言·matlab
hrhcode3 小时前
【java工程师快速上手go】一.Go语言基础
java·开发语言·golang
l1t3 小时前
用wsl自带的python 3.10下载适用于3.12的pandas版本结合uv安装python 3.12模拟离线安装场景
python·pandas·uv
飞Link3 小时前
【AI大模型实战】万字长文肝透大语言模型(LLM):从底层原理解析到企业级Python项目落地
开发语言·人工智能·python·语言模型·自然语言处理
妙蛙种子3113 小时前
【Java设计模式 | 创建者模式】 原型模式
java·开发语言·后端·设计模式·原型模式
翻斗包菜3 小时前
第 03 章 Python 操作 MySQL 数据库实战全解
数据库·python·mysql
LlNingyu3 小时前
Go 实现无锁环形队列:面向多生产者多消费者的高性能 MPMC 设计
开发语言·golang·队列·mpmc·数据通道