
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 # 仅安装Chromium2.2 验证安装创建第一个测试脚本first_test.pyfrom playwright.sync_api import sync_playwright with sync_playwright() as p: browser p.chromium.launch(headlessFalse) page browser.new_page() page.goto(https://www.baidu.com) print(page.title()) browser.close()运行后会看到浏览器自动打开并打印页面标题。注意headlessFalse参数表示使用有界面模式调试时可以设置为True以提升执行速度。3. 核心API详解3.1 元素定位与操作Playwright提供了多种定位方式最常用的是CSS选择器和文本定位# CSS选择器 page.fill(input[namewd], Playwright) # 文本定位 page.click(text百度一下) # XPath page.click(//input[value百度一下])实用技巧当元素难以定位时可以使用Playwright自带的代码生成工具playwright codegen https://www.baidu.com3.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[typefile], 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使用对于高性能场景可以使用异步APIimport 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解决方案使用Playwright Inspector调试定位问题尝试更宽松的选择器确保元素在视口内page.click(selector, position{x,y})6.2 浏览器启动失败问题现象BrowserError: Failed to launch browser解决方案重新安装浏览器playwright install检查防火墙设置尝试指定浏览器路径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.pybrowser.py示例import pytest from playwright.sync_api import sync_playwright pytest.fixture(scopesession) 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. 性能优化技巧复用浏览器实例在测试套件级别初始化浏览器启用硬件加速添加启动参数browser p.chromium.launch( args[--enable-gpu] )禁用无用功能提升执行速度context browser.new_context( java_script_enabledFalse, offlineTrue )9. 最佳实践总结经过多个项目的实践验证我总结了以下Playwright使用原则选择器策略优先使用文本定位其次是CSS选择器等待机制始终使用条件等待避免固定等待测试隔离每个测试用例使用独立的BrowserContext异常处理合理捕获和处理Playwright异常资源清理确保所有Browser和Context正确关闭对于需要兼容IE的项目可以考虑Playwright与Selenium混合使用的方案虽然Playwright本身不支持IE但可以通过这种方式实现平滑过渡。