Python3 Selenium 自动化测试从入门到实战开发流程

📝 本章学习目标:帮助零基础 / 初级测试工程师快速掌握 Python3+Selenium 自动化测试,从环境搭建到项目实战全覆盖,可直接用于接口 / UI 自动化工作落地。


一、引言:为什么 Selenium 自动化测试如此重要

在软件迭代加速、回归频繁的今天,Python3+Selenium UI 自动化测试已成为测试工程师必备核心技能,能大幅降低重复劳动、提升测试覆盖率与发布效率。

1.1 背景与意义

💡 核心认知:Selenium 是 Web 自动化事实标准,搭配 Python 简洁语法,可快速实现浏览器模拟、元素操作、断言验证、报告生成。

  • 手工测试重复度高、易出错、回归慢
  • 自动化可 7×24 小时执行,支持多浏览器 / 多平台
  • 行业主流:互联网 / 金融 / 企业级项目普遍采用 Selenium 栈

1.2 本章结构概览

plaintext

复制代码
环境搭建 → 核心API → 元素定位 → 常用操作 → 实战项目 → 最佳实践 → 总结展望

二、核心概念解析

2.1 基本定义

概念一:Selenium 核心组件

表格

组件 说明 作用
Selenium WebDriver 核心驱动 控制浏览器执行操作
Selenium IDE 录制工具 快速生成脚本(入门用)
Selenium Grid 分布式 多机器 / 多浏览器并行执行

概念二:Python3+Selenium 优势

  • 语法简洁,入门快
  • 丰富第三方库:unittest/pytest/allure
  • 跨浏览器:Chrome/Firefox/Edge
  • 跨平台:Windows/Mac/Linux

2.2 关键术语解释

⚠️ 基础术语

  • 元素定位:找到页面按钮 / 输入框 / 链接的方式
  • 显式等待:等待元素满足条件再执行,避免报错
  • 隐式等待:全局等待元素加载
  • 断言:判断结果是否符合预期,验证用例

2.3 技术架构概览

plaintext

复制代码
┌─────────────────────────────────────────┐
│ 用例层 (Test Case)
│ unittest/pytest 测试用例、断言
├─────────────────────────────────────────┤
│ 驱动层 (WebDriver)
│ ChromeDriver/GeckoDriver 浏览器驱动
├─────────────────────────────────────────┤
│ 操作层 (Action)
│ 点击、输入、切换、截图、获取文本
├─────────────────────────────────────────┤
│ 报告层 (Report)
│ Allure/HTMLTestRunner 测试报告
└─────────────────────────────────────────┘

三、技术原理深入

3.1 核心技术原理

技术一:环境一键搭建

python

运行

复制代码
# 1. 安装Selenium库
pip install selenium==4.15.0

# 2. 安装浏览器驱动管理库
pip install webdriver-manager

技术二:最简启动示例

python

运行

python 复制代码
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
import time

# 自动安装并启动Chrome
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))

# 打开网页
driver.get("https://www.baidu.com")

# 窗口最大化
driver.maximize_window()

# 等待2秒
time.sleep(2)

# 关闭浏览器
driver.quit()

技术三:元素定位(Selenium4 推荐写法)

python

运行

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

# 常用定位方式
driver.find_element(By.ID, "kw")              # ID
driver.find_element(By.NAME, "wd")           # Name
driver.find_element(By.CLASS_NAME, "s_ipt")  # Class
driver.find_element(By.XPATH, "//input[@id='kw']")  # XPath
driver.find_element(By.CSS_SELECTOR, "#kw")        # CSS
driver.find_element(By.LINK_TEXT, "新闻")    # 链接文本

3.2 数据交互机制

📊 标准自动化流程

plaintext

复制代码
打开浏览器 → 进入页面 → 定位元素 → 执行操作 → 断言结果 → 生成报告 → 关闭浏览器

完整交互封装

python

运行

python 复制代码
class BasePage:
    def __init__(self, driver):
        self.driver = driver

    # 打开页面
    def open_url(self, url):
        self.driver.get(url)

    # 输入内容
    def input_text(self, locator, text):
        ele = self.driver.find_element(*locator)
        ele.clear()
        ele.send_keys(text)

    # 点击元素
    def click_ele(self, locator):
        self.driver.find_element(*locator).click()

    # 获取文本
    def get_text(self, locator):
        return self.driver.find_element(*locator).text

3.3 等待与异常处理

python

运行

复制代码
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 显式等待:最多10秒,直到元素可点击
wait = WebDriverWait(driver, 10)
wait.until(EC.element_to_be_clickable((By.ID, "su")))

四、实践应用指南

4.1 应用场景分析

核心场景

  • 登录自动化:账号密码输入、验证登录状态
  • 表单自动化:输入、下拉、单选、复选、提交
  • 搜索自动化:关键词输入、结果校验
  • 流程自动化:下单、支付、退款、订单查询
  • 回归测试:版本更新自动执行用例

4.2 实施步骤详解

步骤 1:需求分析

  • 测试页面 / 功能点
  • 确定用例步骤与预期结果
  • 确定元素定位方案

步骤 2:技术选型

plaintext

复制代码
- 语言:Python 3.8+
- 框架:Selenium 4.x + pytest
- 驱动:webdriver-manager 自动管理
- 报告:Allure 2.0
- 设计模式:Page Object Model (POM)

步骤 3:开发实现

表格

任务 内容 时长
环境搭建 Python+Selenium + 驱动 0.5 天
基础语法 定位 / 操作 / 等待 / 断言 1 天
POM 封装 基类 + 页面类 + 用例类 2 天
项目实战 完整业务流程自动化 2 天
调试优化 报错处理、稳定性提升 1 天

4.3 最佳实践分享

最佳实践一:PO 模式

  • 页面元素与用例分离
  • 便于维护,减少重复代码
  • 适合多人协作

最佳实践二:等待优先

  • 禁用time.sleep()硬等待
  • 优先用显式等待
  • 避免因加载慢导致用例失败

五、案例分析

5.1 成功案例:百度搜索自动化实战

背景:实现打开百度→输入关键词→点击搜索→校验结果

完整代码

python

运行

python 复制代码
import pytest
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

class TestBaiduSearch:
    def setup_class(self):
        self.driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
        self.driver.maximize_window()
        self.driver.implicitly_wait(10)

    def test_baidu_search(self):
        # 打开百度
        self.driver.get("https://www.baidu.com")

        # 输入Selenium
        wait = WebDriverWait(self.driver, 10)
        input_ele = wait.until(EC.presence_of_element_located((By.ID, "kw")))
        input_ele.send_keys("Selenium自动化测试")

        # 点击搜索
        self.driver.find_element(By.ID, "su").click()

        # 断言标题包含关键词
        assert "Selenium自动化测试" in self.driver.title

    def teardown_class(self):
        self.driver.quit()

if __name__ == "__main__":
    pytest.main(["-v", "test_baidu.py"])

实施效果

表格

指标 手工 自动化
单次执行时间 60 秒 10 秒
回归覆盖率 60% 95%
人力成本
稳定性 易出错 稳定可靠

5.2 失败教训

常见踩坑

  • 直接用time.sleep(2),网络波动就失败
  • 不做等待,元素未加载就操作
  • 用例无断言,执行通过但功能错误
  • 不关闭浏览器,资源泄漏

解决方案

  • 统一用显式等待
  • 每条用例必须加断言
  • setup/teardown管理浏览器生命周期
  • 加入异常捕获与截图

六、常见问题解答

6.1 技术问题

Q1:浏览器驱动版本不匹配? 💡 用webdriver-manager自动管理,无需手动下载。

Q2:元素定位不到?

  1. 检查是否在 iframe 中
  2. 检查是否动态 ID/Class
  3. 改用 XPath/CSS 稳定定位
  4. 增加等待时间

Q3:用例不稳定、偶尔失败?

  • 去掉time.sleep
  • 用显式等待
  • 避免用绝对 XPath
  • 用 PO 模式降低耦合

6.2 应用问题

Q4:如何生成美观测试报告?

bash

运行

python 复制代码
# 安装
pip install allure-pytest

# 执行用例并生成数据
pytest --alluredir=./report

# 启动报告服务
allure serve ./report

Q5:如何实现无头模式(不打开浏览器)?

python

运行

python 复制代码
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument("--headless=new")  # 无头模式
driver = webdriver.Chrome(options=options)

七、未来发展趋势

7.1 技术趋势

表格

趋势 说明 时间
AI + 自动化 AI 自动生成定位与用例 1-2 年
云原生执行 云端分布式并行测试 已普及
Cypress 替代 前端轻量化自动化崛起 2-3 年
低代码平台 可视化生成自动化用例 进行中

7.2 职业发展

表格

阶段 学习重点 时长
入门 环境 + 语法 + 基础用例 1 个月
进阶 POM + 数据驱动 + 报告 2 个月
专业 接口 + UI 一体化自动化 3-6 个月
专家 平台化、持续集成 CI/CD 6-12 个月

八、本章小结

8.1 核心要点回顾

✅ 本章完整覆盖:

  1. 环境搭建:Python+Selenium 一键配置
  2. 核心 API:定位、操作、等待、断言
  3. 设计模式:PO 模式最佳实践
  4. 实战案例:可直接落地的搜索自动化
  5. 问题排查:常见报错与稳定化方案
  6. 职业路径:从入门到自动化专家

8.2 学习建议

  1. 先跑通示例,再理解原理
  2. 每天写 1 个用例,快速形成肌肉记忆
  3. 用 PO 重构代码,养成工程化思维
  4. 结合项目实战,学以致用最有效

九、课后练习

  1. 基础练习:实现 CSDN 登录自动化脚本
  2. 实战练习:用 PO 模式封装一个登录页面
  3. 综合练习:完成 "登录→搜索→断言" 完整流程
  4. 报告练习:用 Allure 生成可视化测试报告

十、参考资料

相关推荐
测试秃头怪3 小时前
Python+selenium搭建Web自动化测试框架
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例
Smoothcloud润云18 小时前
从“预测下一个词”到“预测下一个世界状态”:世界模型作为AGI新范式的深度分析报告
人工智能·测试工具·微服务·容器·github·状态模式·agi
测试19981 天前
postman接口测试详解
自动化测试·软件测试·python·测试工具·测试用例·接口测试·postman
测试秃头怪1 天前
python&selenium自动化测试实战项目详解
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例
简单点了1 天前
mac安装wireshark
测试工具·macos·wireshark
西瓜程序猿2 天前
使用手机如何将纸质礼薄转换为电子礼薄?
测试工具·智能手机·创业创新·记了么·电子礼薄·份子钱
半个俗人2 天前
fiddler的基础使用
前端·测试工具·fiddler
站长工具箱2 天前
基于浏览器的键盘按键测试工具功能解析
测试工具·计算机外设
小陈的进阶之路3 天前
Selenium 滑动 vs Appium 滑动
python·selenium·测试工具·appium