ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Playwright Python自动化测试:从入门到实战

Playwright Python自动化测试:从入门到实战

1. Playwright Python 入门指南:现代Web自动化测试利器

作为一名长期从事自动化测试的开发者,我见证了从Selenium到Playwright的技术演进。Playwright作为微软开源的下一代Web自动化测试工具,凭借其跨浏览器支持、快速执行和强大的API设计,正在迅速成为行业新宠。本文将带你从零开始掌握Playwright Python的核心用法。

1.1 为什么选择Playwright?

与传统的Selenium相比,Playwright具有三大核心优势:

  • 多浏览器支持:Chromium、WebKit和Firefox三大内核全覆盖
  • 自动等待机制:内置智能等待,告别手动添加sleep的烦恼
  • 移动设备模拟:轻松模拟各种移动设备环境和网络条件

我在实际项目中实测发现,Playwright的脚本执行速度比Selenium快30%以上,特别是在处理SPA(单页应用)时优势更为明显。

2. 环境搭建与基础配置

2.1 安装Playwright Python

安装过程非常简单,只需两条命令:

pip install playwright playwright install

这里有个实用技巧:如果只需要特定浏览器,可以指定安装:

playwright install chromium # 仅安装Chromium

2.2 验证安装

创建第一个测试脚本first_test.py:

from playwright.sync_api import sync_playwright with sync_playwright() as p: browser = p.chromium.launch(headless=False) page = browser.new_page() page.goto("https://www.baidu.com") print(page.title()) browser.close()

运行后会看到浏览器自动打开并打印页面标题。注意headless=False参数表示使用有界面模式,调试时可以设置为True以提升执行速度。

3. 核心API详解

3.1 元素定位与操作

Playwright提供了多种定位方式,最常用的是CSS选择器和文本定位:

# CSS选择器 page.fill("input[name='wd']", "Playwright") # 文本定位 page.click("text=百度一下") # XPath page.click("//input[@value='百度一下']")

实用技巧:当元素难以定位时,可以使用Playwright自带的代码生成工具:

playwright codegen https://www.baidu.com

3.2 页面导航与等待

正确处理页面加载是自动化测试的关键:

# 基本导航 page.goto("https://example.com") # 等待特定条件 page.wait_for_selector("#loaded") # 等待元素出现 page.wait_for_url("**/login") # 等待URL匹配 page.wait_for_timeout(1000) # 最后选择(不推荐)

最佳实践:尽量避免使用固定等待(wait_for_timeout),而应该使用条件等待。

4. 高级功能实战

4.1 多浏览器支持

Playwright支持三大浏览器引擎:

# Chromium (Chrome/Edge) browser = p.chromium.launch() # Firefox browser = p.firefox.launch() # WebKit (Safari) browser = p.webkit.launch()

4.2 设备模拟

测试移动端页面非常方便:

iphone = p.devices["iPhone 12 Pro"] browser = p.chromium.launch() context = browser.new_context(**iphone) page = context.new_page()

4.3 文件处理

上传下载文件不再复杂:

# 文件上传 page.set_input_files("input[type='file']", "myfile.pdf") # 文件下载 with page.expect_download() as download_info: page.click("a#download") download = download_info.value download.save_as(download.suggested_filename)

5. 异步模式与性能优化

5.1 异步API使用

对于高性能场景,可以使用异步API:

import asyncio from playwright.async_api import async_playwright async def main(): async with async_playwright() as p: browser = await p.chromium.launch() page = await browser.new_page() await page.goto("https://example.com") await browser.close() asyncio.run(main())

5.2 并行测试

通过BrowserContext实现测试隔离:

browser = p.chromium.launch() context1 = browser.new_context() context2 = browser.new_context() page1 = context1.new_page() page2 = context2.new_page()

6. 常见问题排查

6.1 元素定位失败

问题现象:SelectorNotVisibleError或TimeoutError

解决方案:

  1. 使用Playwright Inspector调试定位问题
  2. 尝试更宽松的选择器
  3. 确保元素在视口内:page.click("selector", position={x,y})

6.2 浏览器启动失败

问题现象:BrowserError: Failed to launch browser

解决方案:

  1. 重新安装浏览器:playwright install
  2. 检查防火墙设置
  3. 尝试指定浏览器路径:
    browser = p.chromium.launch( executable_path="/path/to/chrome" )

7. 项目实战:自动化测试框架集成

7.1 与pytest集成

创建基础的测试框架结构:

project/ ├── conftest.py ├── tests/ │ ├── test_login.py │ └── test_search.py └── utils/ └── browser.py

browser.py示例:

import pytest from playwright.sync_api import sync_playwright @pytest.fixture(scope="session") def browser(): with sync_playwright() as p: browser = p.chromium.launch() yield browser browser.close()

7.2 生成测试报告

结合Allure生成美观的测试报告:

import allure @allure.story("搜索测试") def test_search(browser): page = browser.new_page() with allure.step("打开首页"): page.goto("https://www.baidu.com") with allure.step("执行搜索"): page.fill("#kw", "Playwright") page.click("#su") assert "Playwright" in page.title()

8. 性能优化技巧

  1. 复用浏览器实例:在测试套件级别初始化浏览器
  2. 启用硬件加速:添加启动参数
    browser = p.chromium.launch( args=["--enable-gpu"] )
  3. 禁用无用功能:提升执行速度
    context = browser.new_context( java_script_enabled=False, offline=True )

9. 最佳实践总结

经过多个项目的实践验证,我总结了以下Playwright使用原则:

  1. 选择器策略:优先使用文本定位,其次是CSS选择器
  2. 等待机制:始终使用条件等待,避免固定等待
  3. 测试隔离:每个测试用例使用独立的BrowserContext
  4. 异常处理:合理捕获和处理Playwright异常
  5. 资源清理:确保所有Browser和Context正确关闭

对于需要兼容IE的项目,可以考虑Playwright与Selenium混合使用的方案,虽然Playwright本身不支持IE,但可以通过这种方式实现平滑过渡。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进