【实战】基于 Playwright + Pytest 的企业级 UI 自动化框架封装
最近在维护公司的旧版 Selenium 自动化脚本时,遇到了执行速度慢、等待元素不稳定等痛点。为了提升回归测试效率,我基于 Playwright 重构了整个 UI 自动化测试框架。
1. 为什么选择 Playwright?
相比 Selenium,Playwright 拥有原生支持的自动等待机制(Auto-waiting),这极大地减少了 time.sleep() 的滥用。同时,它的执行速度在 WebKit 引擎下比 Selenium 快约 3-4 倍。
2. 框架设计思路 (PO模式)
我采用了经典的 Page Object Model (PO) 设计模式,将页面元素定位与业务逻辑分离。目录结构如下:
project/
├── pages/ # 页面对象层
│ ├── base_page.py # 封装基础操作
│ └── login_page.py # 登录页元素
├── test_cases/ # 测试用例层
│ └── test_login.py
├── utils/ # 工具类(读取配置、日志)
├── pytest.ini # Pytest 配置文件
└── conftest.py # Fixture 管理
3. 核心代码封装
在 base_page.py 中,我封装了统一的定位与操作方法,加入了显式等待和异常捕获:
class BasePage:
def __init__(self, page):
self.page = page
def click(self, selector):
"""封装点击操作,加入日志记录"""
try:
self.page.click(selector)
logger.info(f"点击元素: {selector}")
except Exception as e:
logger.error(f"点击失败: {e}")
self.take_screenshot() # 失败自动截图
raise
4. 成果与收益
重构完成后,我们的回归测试套件执行时间从 45分钟缩短至 12分钟(开启了 3 个并发 Worker)。结合 Allure 报告,测试结果的可视化程度也大幅提升。