《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档

Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括:

  • 支持所有主流浏览器(Chromium、Firefox、WebKit)
  • 自动等待元素加载和状态变化
  • 支持浏览器上下文(Context)和多页面操作
  • 生成可阅读的测试报告
  • 录制测试脚本功能
  • 支持无头模式和有头模式(可视化调试)

安装 Playwright

首先需要安装 Playwright 包及其依赖的浏览器:

|-------------------------------------------------------------------------------------------------------------------------------|
| # 使用 npm 安装(JavaScript/TypeScript) npm init playwright@latest # 或者使用 pip 安装(Python) pip install playwright playwright install |

基本使用示例

以下是使用 Playwright 进行自动化测试的基本流程:

|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| # Python 示例 from playwright.sync_api import sync_playwright def run(playwright): # 选择浏览器类型(chromium、firefox、webkit) browser = playwright.chromium.launch(headless=False) # headless=False 显示浏览器窗口 context = browser.new_context() # 打开新页面 page = context.new_page() # 导航到网页 page.goto("https://www.example.com") # 执行操作 page.fill("input[name='q']", "Playwright") # 填写表单 page.click("text=搜索") # 点击按钮 # 断言检查 assert page.is_visible("text=Playwright") # 关闭浏览器 browser.close() # 运行测试 with sync_playwright() as playwright: run(playwright) |

核心 API 介绍

浏览器与上下文

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| # 启动浏览器 browser = playwright.chromium.launch(headless=False) # 有头模式 # 创建带代理的上下文 context = browser.new_context( proxy={"server": "http://proxy.example.com:8080"} ) # 创建带用户存储的上下文(保持登录状态) context = browser.new_context(storage_state="auth.json") |

页面操作

|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| # 导航 page.goto("https://example.com", wait_until="networkidle") # 点击元素 page.click("button.login") page.click("text=提交") # 按文本内容选择 # 填写表单 page.fill("input[name='username']", "testuser") page.select_option("select[name='country']", value="US") page.check("input[type='checkbox']") # 上传文件 page.set_input_files("input[type='file']", "path/to/file.txt") # 等待元素 page.wait_for_selector("div.loading", state="hidden") |

断言与验证

|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| # 检查元素是否可见 assert page.is_visible("text=欢迎") # 检查文本内容 text = page.inner_text("h1") assert "标题" in text # 检查元素属性 value = page.get_attribute("input", "value") assert value == "预期值" # 检查URL assert page.url == "https://example.com/result" |

处理弹窗与对话框

|-------------------------------------------------------------------------------------------------------------------------------------------------|
| # 处理确认对话框 with page.expect_dialog() as dialog_info: page.click("button.delete") dialog = dialog_info.value dialog.accept() # 或 dialog.dismiss() |

多页面处理

|-------------------------------------------------------------------------------------------------------------------------------------------------|
| # 监听新页面打开 with page.expect_popup() as popup_info: page.click("a[target='_blank']") new_page = popup_info.value new_page.wait_for_load_state() |

高级技巧

截图与录制

|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| # 全页截图 page.screenshot(path="screenshot.png", full_page=True) # 录制视频 context = browser.new_context(record_video_dir="videos/") page = context.new_page() # 执行操作后 video_path = page.video.path() |

自定义选择器

|--------------------------------------------------------------------------------------------------------------------|
| # 使用文本内容和属性组合选择 page.click("text=登录[type='button']") # 使用 XPath page.click('//button[contains(text(), "提交")]') |

性能监控

|----------------------------------------------------------------------------------------------------------------------------------------------------------|
| # 记录网络请求 with page.context.tracing.start(screenshots=True, snapshots=True): page.goto("https://example.com") page.context.tracing.stop(path="trace.zip") |

测试框架集成

pytest(Python)

|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| # test_example.py import pytest from playwright.sync_api import Page @pytest.fixture(scope="function", autouse=True) def before_each_after_each(page: Page): page.goto("https://example.com") yield # 测试执行在这里 # 可以添加清理代码 def test_search(page: Page): page.fill("input[name='q']", "Playwright") page.click("text=搜索") assert page.is_visible("text=结果") |

调试技巧

  1. 使用 slow_mo 参数降低执行速度:

|---------------------------------------------------|
| browser = playwright.chromium.launch(slow_mo=500) |

  1. 使用 pause() 方法中断执行:

|----------------------------------|
| page.pause() # 执行到此暂停,可在浏览器中交互调试 |

  1. 使用 Codegen 录制脚本:

|----------------------------------------|
| playwright codegen https://example.com |

  1. 使用 Inspector 可视化调试:

|----------------------------------|
| PWDEBUG=1 pytest test_example.py |

常见问题解答

  1. 如何处理验证码?
    • 使用预录制的会话状态(storage_state)
    • 使用第三方验证码识别服务
    • 在测试环境中禁用验证码
  1. 如何处理动态加载的内容?
    • 使用 wait_for_selector 或 wait_for_load_state
    • 设置适当的超时时间
  1. 如何在 CI/CD 中运行?
    • 使用官方提供的 Docker 镜像
    • 确保安装了必要的依赖库

Playwright 是一个功能强大的自动化测试工具,适用于 Web 应用的 E2E 测试、UI 自动化和爬虫等场景。通过上面的介绍,你应该能够快速上手并开始编写自己的自动化脚本了。

(注:文档部分内容可能由 AI 生成)

相关推荐
weixin_472339463 小时前
单点登录(SSO)技术原理与实现指南
microsoft
Leinwin3 小时前
微软Copilot两大创新功能详解:SharePoint Agents vs. Copilot Notebooks
microsoft·copilot·sharepoint
layman05285 小时前
openEuler 虚拟机中 Shell 脚本实现自动化备份与清理实践
数据库·oracle·自动化
yutian060612 小时前
C# 支持 ToolTip 功能的控件,鼠标悬停弹提示框
开发语言·microsoft·c#
钢琴上的汽车软件12 小时前
ARXML可视化转换工具使用说明
自动化·二次开发·可视化·转换·arxml
测试杂货铺13 小时前
postman接口测试
自动化测试·软件测试·python·测试工具·测试用例·接口测试·postman
程序员的世界你不懂14 小时前
Appium+python自动化(二十一)- Monkey指令操作手机
python·appium·自动化
测试者家园1 天前
接口测试不再难:智能体自动生成 Postman 集合
软件测试·人工智能·测试工具·postman·agent·智能化测试·测试开发和测试
VR最前沿1 天前
Xsens动捕和Manus数据手套在元宇宙数字人制作中提供解决方案
大数据·人工智能·科技·机器人·自动化