Playwright 使用示例:浏览器基础操作、多浏览器同时操作

以下是 Playwright 的详细使用示例,涵盖基础操作、高级功能及实际应用场景,结合多个来源的实践指南和代码片段:


1. 基础浏览器操作

同步模式示例
from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    # 启动浏览器(默认Chromium)
    browser = p.chromium.launch(headless=False)
    page = browser.new_page()
    # 导航与操作
    page.goto("https://www.baidu.com")
    page.fill("#kw", "Playwright自动化测试")
    page.click("#su")
    # 等待元素并截图
    page.wait_for_selector("text=百度百科")
    page.screenshot(path="search_result.png")
    browser.close()

关键点

  • launch(headless=False) 可可视化调试。
  • wait_for_selector 自动等待元素加载,避免硬编码等待时间。
异步模式示例
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")
        print(await page.title())
        await browser.close()

asyncio.run(main())

适用场景:高并发或需要非阻塞操作的场景。


2. 高级功能示例

多浏览器支持
with sync_playwright() as p:
    # 同时控制Chromium、Firefox、WebKit
    browsers = [p.chromium.launch(), p.firefox.launch(), p.webkit.launch()]
    for browser in browsers:
        page = browser.new_page()
        page.goto("https://example.com")
        assert "Example" in page.title()
        browser.close()

优势:跨浏览器兼容性测试。

文件上传与下载
# 文件上传
page.set_input_files("#file_input", "path/to/file.txt")

# 文件下载
with page.expect_download() as download_info:
    page.click("#download_btn")
download = download_info.value
download.save_as("downloaded_file.zip")

注意:需监听下载事件并处理路径。

移动端模拟
iphone_12 = p.devices["iPhone 12 Pro"]
browser = p.chromium.launch()
context = browser.new_context(**iphone_12)
page = context.new_page()
page.goto("https://m.example.com")
page.screenshot(path="mobile_view.png")

特点:模拟设备分辨率、User-Agent等。


3. 实际应用场景

登录流程测试
def test_login():
    page.goto("https://example.com/login")
    page.fill("#username", "testuser")
    page.fill("#password", "password123")
    page.click("#login_button")
    assert page.url == "https://example.com/dashboard"

最佳实践:结合 pytest 框架和断言验证。

动态选择框处理
# 等待选项加载后选择
page.wait_for_selector("#fruit option[value='banana']")
page.select_option("#fruit", "banana")

# 多选框操作
page.select_option("#fruits", ["apple", "cherry"])

适用场景:依赖动态数据的表单。


4. 测试框架集成

Pytest + Playwright
import pytest
from playwright.sync_api import Page

@pytest.fixture(scope="module")
def browser():
    with sync_playwright() as p:
        browser = p.chromium.launch()
        yield browser
        browser.close()

def test_search(browser):
    page = browser.new_page()
    page.goto("https://google.com")
    page.fill('input[name="q"]', "Playwright")
    page.press('input[name="q"]', "Enter")
    assert "Playwright" in page.title()

优势:模块化测试用例和资源管理。

录制生成测试脚本
# 通过录制生成代码
playwright codegen https://example.com

功能:自动生成操作代码,适合快速原型设计。


5. 调试与优化

追踪与截图
# 启用追踪
context.tracing.start(screenshots=True, snapshots=True)
context.tracing.stop(path="trace.zip")

# 元素截图
page.locator(".header").screenshot(path="header.png")

用途:调试失败用例时分析操作步骤。

并行测试
# 使用pytest-xdist并行执行
pytest --numprocesses auto

性能优化:减少测试总时长。


总结

Playwright的核心优势包括:

  1. 跨浏览器支持:Chromium、Firefox、WebKit。
  2. 自动等待机制:减少因元素未加载导致的失败。
  3. 多语言兼容:Python、JavaScript、Java等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学亮编程手记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值