Playwright 使用指南
1. 什么是 Playwright?
Playwright 是微软开发的一个现代化的自动化测试工具,支持 Chrome、Firefox 和 Safari 浏览器。它可以用于:
-
网页自动化测试
-
网页截图和PDF生成
-
网页爬取
-
性能测试
2. 本地环境安装 Playwright
2.1 安装 Playwright 库
# 使用 pip 安装 Playwright 库
python -m pip install playwright
2.2 安装浏览器
# 安装 Playwright 支持的所有浏览器
python -m playwright install
# 或者只安装特定浏览器
python -m playwright install chromium
2.3 验证安装
# 检查 Playwright 是否安装成功
python -c "from playwright.sync_api import sync_playwright; print('Playwright 安装成功!')"
3. 创建 Playwright 测试脚本
3.1 基本测试脚本结构
from playwright.sync_api import sync_playwright
def test_example():
with sync_playwright() as p:
# 启动浏览器
browser = p.chromium.launch(headless=False) # headless=False 表示显示浏览器
page = browser.new_page()
# 导航到网页
page.goto('https://example.com')
# 执行操作
page.click('a')
page.fill('input[name="q"]', 'Playwright')
# 验证结果
assert 'Playwright' in page.title()
# 关闭浏览器
browser.close()
if __name__ == '__main__':
test_example()
3.2 登录测试示例
from playwright.sync_api import sync_playwright
def test_login():
with sync_playwright() as p:
browser = p.chromium.launch(headless=True) # 无头模式
page = browser.new_page()
# 导航到登录页面
page.goto('http://127.0.0.1:5000')
# 输入用户名和密码
page.fill('input[name="username"]', 'admin')
page.fill('input[name="password"]', 'password123')
# 点击登录按钮
page.click('input[type="submit"]')
# 验证登录成功
page.wait_for_selector('text=欢迎, admin!')
print('登录成功!')
browser.close()
if __name__ == '__main__':
test_login()
4. 运行 Playwright 测试
4.1 直接运行脚本
python test_script.py
4.2 使用 pytest 运行(推荐)
# 安装 pytest-playwright 插件
pip install pytest-playwright
# 运行测试
pytest test_script.py -v
5. 常见问题和解决方案
5.1 浏览器无法启动
问题:执行脚本时出现 "Executable doesn't exist" 错误
解决方案:
-
确保已正确安装浏览器:
python -m playwright install -
检查浏览器路径是否正确
-
尝试使用无头模式:
browser = p.chromium.launch(headless=True) -
添加沙箱参数:
browser = p.chromium.launch(args=['--no-sandbox', '--disable-setuid-sandbox'])
5.2 元素无法找到
解决方案:
-
添加适当的等待时间:
page.wait_for_selector('selector') -
确保元素选择器正确
-
检查页面是否已完全加载:
page.wait_for_load_state('networkidle')
5.3 环境限制问题
如果在某些环境(如容器、CI/CD管道)中无法安装浏览器,可以使用以下替代方案:
6. 替代方案:使用 Requests 直接测试 API
对于简单的登录测试,可以使用 Requests 库直接测试 API,无需浏览器:
import requests
session = requests.Session()
# 登录
def test_login():
login_url = 'http://127.0.0.1:5000/login'
login_data = {
'username': 'admin',
'password': 'password123'
}
response = session.post(login_url, data=login_data, allow_redirects=True)
if '欢迎, admin!' in response.text:
print("登录成功!")
else:
print("登录失败!")
if __name__ == '__main__':
test_login()
7. Playwright 高级功能
7.1 截图和 PDF 生成
# 截图
page.screenshot(path='screenshot.png')
# 生成 PDF
page.pdf(path='page.pdf')
7.2 多浏览器测试
for browser_type in [p.chromium, p.firefox, p.webkit]:
browser = browser_type.launch()
# 测试代码
browser.close()
7.3 并行测试
# 使用 pytest-xdist 插件实现并行测试
pytest test_script.py -n 3
8. 参考资源
9. 本项目中的测试脚本
-
test_login.py:使用 Playwright 测试登录功能(需要浏览器) -
test_login_requests.py:使用 Requests 直接测试登录 API(无需浏览器)
10. 运行本项目的测试
10.1 启动 Flask 应用
# 先启动登录应用
python login.py
10.2 运行 Requests 测试(推荐,无需浏览器)
python test_login_requests.py
10.3 运行 Playwright 测试(需要已安装的浏览器)
python test_login.py