Playwright 使用指南

4 阅读3分钟

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" 错误

解决方案

  1. 确保已正确安装浏览器:python -m playwright install

  2. 检查浏览器路径是否正确

  3. 尝试使用无头模式:browser = p.chromium.launch(headless=True)

  4. 添加沙箱参数:browser = p.chromium.launch(args=['--no-sandbox', '--disable-setuid-sandbox'])

5.2 元素无法找到

解决方案

  1. 添加适当的等待时间:page.wait_for_selector('selector')

  2. 确保元素选择器正确

  3. 检查页面是否已完全加载: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