当前位置: 首页 > news >正文

Pytest+Selenium入门:从零开始直接实战写自动化测试

刚开始学自动化测试的时候我就发现,很多教程一上来就是大量前置概念讲解,不少同学刷了十节课下来,还是连完整的脚本都跑不起来。其实对入门来说,动手实践才是最高效的学习方式。这篇文章就跳过冗余的理论铺垫,直接带你上手写代码,适合有一点代码基础、想在实战中边做边学的同学。以下贴出了用到的工具,需要全部配置成功再学习。

搭完第一个百度新闻搜索的小项目,把项目里每个目录文件的作用、驱动下载的方法和新手最容易踩的坑都整理了一遍,纯小白视角的学习笔记,帮同样刚入门的小伙伴少走弯路。

项目代码贴在最后了。

用到的工具总览

按作用分为 4 大类,是 Web UI 自动化测试的标准技术栈:

  1. 运行基础:Python 3.14

所有测试代码的编写与运行环境,提供基础语法和标准库,支撑第三方测试工具运行。

  1. 测试框架:pytest

自动化测试的执行与管理工具,自动识别test_开头的测试用例,执行测试并输出通过 / 失败结果,是自动化测试的核心管理框架。

  1. 自动化核心:Selenium + ChromeDriver + Chrome 浏览器
    • Selenium:Web 自动化核心库,提供元素定位、输入、点击、页面跳转等全套浏览器操作 API。
    • ChromeDriver:Chrome 官方驱动,充当代码与浏览器之间的通信桥梁,把代码指令转为浏览器的实际操作。
    • Chrome 浏览器:自动化测试的执行载体,也就是被控制、被测试的目标浏览器。
  2. 开发工具:VS Code

代码编辑器,配合 Python 插件提供代码补全、语法检查、自动格式化、内置终端等能力,用于编写和调试测试脚本。

补充:过程中接触过webdriver-manager驱动自动管理工具,因网络限制,最终改用本地手动放置驱动的方案。

一、项目根目录文件说明

给大家拆解一下项目里每个文件和文件夹都是干嘛的,刚接触的时候不用死记,知道作用就行:

  1. PY(项目根目录):你创建的项目文件夹,所有代码和依赖文件都放在这里面。
  2. .pytest_cache:pytest 自动生成的测试缓存目录,保存历史运行记录以加快后续执行速度,可随意删除,不影响代码功能。
  3. .vscode/settings.json:VS Code 的项目专属配置文件,存放 pytest 框架启用、代码自动格式化、终端中文编码等项目级规则。
  4. __pycache__:Python 自动生成的字节码缓存目录,存放编译后的 .pyc 文件以加快脚本启动速度,可随意删除。
  5. test_baidu_news_search.py:核心测试脚本文件,存放百度新闻搜索的测试用例代码,是 pytest 执行测试的核心业务文件。
  6. chromedriver.exe:Chrome 浏览器驱动程序,是 Selenium 代码与浏览器之间的通信桥梁,版本需与 Chrome 浏览器大版本匹配。下载后将 chromedriver.exe 放在项目文件夹下。

二、ChromeDriver 手动配置与国内下载地址

我这里用的是手动配置浏览器驱动的方式,主要是避免自动匹配驱动时因为网速问题导致运行失败,更稳定可控。手动配置的核心要求就是:chromedriver.exe 文件版本必须和自己的 Chrome 浏览器版本匹配。(用其他浏览器也是一样的,需要找到相关驱动)

给大家整理了国内高速镜像地址,下载比官网快很多,按自己的浏览器版本选对应的入口:

  1. 新版驱动(Chrome 115.0.5763.0 及以上版本)

Chrome 115 之后官方更换了驱动仓库,所有高版本驱动都在这里:

CNPM Binaries Mirror

  1. 旧版驱动(Chrome 114 及更低版本)

仅当使用老版本 Chrome 时用这个地址:

CNPM Binaries Mirror

三、测试脚本完整执行流程

给大家梳理一下这个百度新闻搜索脚本的完整执行逻辑,新手可以对着代码一步步对应,理解每一步在做什么:

初始化驱动 → 配置浏览器 → 打开百度新闻 → 定位搜索框 → 输入关键词 → 回车搜索 → 等待页面加载 → 验证结果 → 关闭浏览器

四、新手高频踩坑提醒

这个是我自己踩了好多次的坑,一定要记牢:

改完代码一定要按Ctrl+S保存,否则运行的还是旧代码,会一直报同样的错,排查半天找不到原因。

保存文件后,在终端执行以下命令即可运行测试:

python -m pytest tests/test_baidu_news_search.py -s

settings.json

{ "python-envs.defaultEnvManager": "ms-python.python:system", // 开启 pytest+unittest 双兼容 "python.testing.pytestEnabled": true, "python.testing.unittestEnabled": false, // 执行用例自动生成 html 报告 "python.testing.pytestArgs": [ "." ], // Windows 终端中文不乱码 "terminal.integrated.env.windows": { "PYTHONIOENCODING": "utf-8" }, // yaml 文件保存自动格式化 "[yaml]": { "editor.formatOnSave": true }, // Python 代码保存自动格式化、整理导入包 "editor.formatOnSave": true, "editor.codeActionsOnSave": { "source.organizeImports": "explicit" }, // 代码自动补全、类型检查 "python.analysis.autoImportCompletions": true, "python.analysis.typeCheckingMode": "basic" }

test_baidu_news_search.py

from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys # 导入键盘按键工具 from selenium.webdriver.chrome.service import Service import time def test_baidu_news_search(): # 调用本地驱动 service = Service(executable_path=r"E:\py\chromedriver.exe") driver = webdriver.Chrome(service=service) driver.implicitly_wait(15) driver.maximize_window() # 打开百度新闻 driver.get("https://news.baidu.com") # 定位搜索框,输入关键词 search_input = driver.find_element(By.ID, "ww") search_input.send_keys("自动化测试") # 按回车键提交搜索(替代 submit,兼容所有网站的搜索框) search_input.send_keys(Keys.ENTER) # 等待页面跳转加载 time.sleep(2) # 断言验证搜索结果 assert "自动化测试" in driver.title, "搜索失败:页面标题不包含关键词" time.sleep(2) driver.quit()

---

以上就是这次入门学习的全部整理内容,后续会继续更新自动化测试学习过程中的笔记和踩坑记录,一起进步~

http://www.jsqmd.com/news/1159018/

相关文章:

  • Juicebox完全指南:5步掌握Hi-C数据可视化与三维基因组分析
  • AI时代企业知识管理的新方向:从内容存储到信息结构化
  • MLOps模型部署实战:环境隔离、服务化与可观测性三步落地
  • 豆包智能体对话怎么批量导出?聊天记录和人格设定备份方法(第11版) - 【DS随心转】
  • 2026鹰潭正规漏水检测维修权威推荐-卫生间漏水免砸砖维修/厨房阳台墙面暗管漏水检测/屋顶外墙堵漏维修-防水补漏公司实测口碑榜推荐 - 即刻修防水
  • Windows 11 BitLocker加密报错?修复ReAgent.xml配置文件即可解决
  • Unity多人游戏开发效率神器:ParrelSync本地多开调试全攻略
  • 2026年市面上靠谱的外贸推广公司推荐,工厂外贸推广/企业外贸推广,外贸推广品牌推荐 - 品牌推荐师
  • 智能开发者文档搜索:RAG 在小团队文档里的落地
  • 安卓投屏神器scrcpy:35毫秒低延迟的极致投屏体验
  • ArkTS List 的 cachedCount 我设到 20 反而掉帧——实测数据告诉你该设多少
  • 村田超级电容 DLCAP 选型指南:3大系列(DXE/DXF/DXG)特性对比与车载/工业应用解析
  • STM32C542定时器输入捕获:精确频率测量配置与实践指南
  • Minitab 田口设计实战:5因子4水平正交表生成与信噪比分析(附SPSSAU对比)
  • Claude Code安装原理:CLI二进制本质与跨平台部署指南
  • 2026企业级AI知识库“幻觉”率行业调研与测算深度分析报告
  • 5分钟学习笔记(FreeRTOS)(七)
  • 逆向工程实战:日志插桩与乱码解析破解电商平台a_bogus加密参数
  • Python 子类 __init__ 方法 3 种初始化策略对比与 super() 最佳实践
  • 高精度ADC系统设计与噪声抑制实战
  • Python量化开发:如何给金融行情API写一个优雅的“多线程并发、限流重试”二次封装?
  • 2026年6月最新杭州格拉苏蒂官方售后维修服务网点地址与客服电话 - 亨得利官方服务中心
  • App开发陷阱大揭秘!快来看避免中招!
  • 我有个问题,anaconda管理的环境有些不同环境却要用同样的库,下两份不会占用空间吗
  • 外贸成交01 | 外贸做了五年还在比价格?问题不在价格,在你的成交路径 - 外贸圈集团
  • Pearcleaner:让Mac告别“数字幽灵“的终极清理方案
  • TS2007FC与PIC18F2585构建高性能音频系统全解析
  • VMware虚拟机中Slackware 15完整安装与配置指南
  • RN项目iOS运行,react-native-safe-area-context 的 SafeAreaProvider 在 iOS 上是异步测量安全区域的
  • 拥抱“半成品”思维:为什么你的技术产品不该追求完美?