当前位置: 首页 > news >正文

Playwright UI自动化实战速成指南

如果你也厌倦了Selenium里没完没了的等待、动不动就失效的选择器,还有各种浏览器兼容的坑,那Playwright绝对是你的救星。用它写脚本不仅跑得快,写起来也更舒心。下面就用实际代码,带你看看Playwright的四个提速绝招。

一、 为何选择Playwright?速度与智能的融合

Playwright不是一个简单的Selenium替代品,它是一个为现代Web应用量身定制的自动化核武器。其核心优势在于:

  • 跨浏览器王者:原生支持Chromium、Firefox和WebKit(Safari),确保你的应用在所有核心引擎上表现一致。

  • 自动等待智能:内置智能等待机制,自动等待元素可操作、网络请求完成,彻底告别time.sleep()和不可靠的隐式等待。

  • 多上下文隔离:轻松模拟多标签页、多用户场景,互不干扰。

  • 强大的选择器引擎:支持文本选择、React/Vue组件选择等,编写选择器更直观、更健壮。

  • 网络拦截与Mock:直接拦截和修改网络请求,无需修改生产代码即可测试各种场景。

二、 极速起飞:四大实战提速秘籍

让我们通过代码来看看Playwright如何解决传统自动化中的痛点。

秘籍一:智能等待(Auto-waiting) - 告别time.sleep

传统脚本需要手动添加等待,否则元素未加载就会报错。Playwright的几乎所有操作(如clickfill)都内置了智能等待。

# ✅ Playwright 方式 (正确)
from playwright.sync_api import sync_playwrightwith sync_playwright() as p:browser = p.chromium.launch(headless=False)page = browser.new_page()page.goto("https://demoqa.com/login")# 以下操作会自动等待元素出现、可见、可操作(如未被遮挡、可点击)page.fill("#userName", "testuser") # 自动等待输入框page.fill("#password", "Password123")page.click("#login") # 自动等待按钮可点击# 无需手动等待页面跳转,可直接断言新页面的元素assert page.is_visible("text=Profile") # 等待并断言“Profile”文本出现browser.close()# ❌ 传统方式 (错误示范)
# from selenium import webdriver
# from selenium.webdriver.common.by import By
# from selenium.webdriver.support.ui import WebDriverWait
# ... 需要大量 try-catch 和显式等待,代码冗长易失败

秘籍二:无敌选择器(Powerful Selectors) - 精准定位元素

Playwright的选择器引擎极其强大,支持CSS、文本内容、甚至XPath和自定义引擎组合。

# 1. 文本选择器 - 点击文本为"Login"的按钮
page.click("text=Login")# 2. CSS选择器 + 文本组合 - 选择class为`btn`且文本为`Submit`的按钮
page.click(".btn:has-text('Submit')")# 3. React/Vue组件选择器 (需配合playwright实验性功能)
# page.click("_react=SubmitButton[value='OK']")
# page.click("_vue=my-component[value='OK']")# 4. 选择第N个元素
page.click("li >> nth=2") # 选择第三个li元素# 5. 过滤:选择包含特定文本的div下的按钮
page.click("div:has-text('Welcome') >> .btn")

秘籍三:网络操纵(Network Mocking) - 模拟任意API响应

无需启动后端服务,直接拦截和修改API请求,测试极端场景快如闪电。

# 拦截所有JSON请求并修改响应
def handle_route(route):if"/api/user"in route.request.url:# 模拟返回一个自定义的JSON响应route.fulfill(status=200,content_type="application/json",body='{"name": "mocked_user", "isAdmin": true}')else:# 其他请求继续正常处理route.continue_()# 启用请求拦截
page.route("**/*", handle_route)# 现在执行的操作,所有对 `/api/user` 的请求都会返回我们自定义的数据
page.goto("https://example.com/dashboard")
# 页面会显示 mocked_user 的信息,从而测试UI逻辑

秘籍四:移动端模拟(Device Emulation) - 一键测试响应式

轻松模拟手机浏览器、GPS、触摸等设备特性。

from playwright.sync_api import sync_playwright# 1. 使用Playwright自带的设备模拟预设(如iPhone 13)
iphone_13 = playwright.devices["iPhone 13"]
browser = p.chromium.launch()
# 在上下文中直接模拟设备
context = browser.new_context(**iphone_13)
page = context.new_page()
page.goto("https://m.example.com")# 2. 自定义视口、User-Agent等
context = browser.new_context(viewport={"width": 375, "height": 812},user_agent="Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X) ...",is_mobile=True
)

三、 实战:编写一个“抢购”脚本

假设我们要编写一个秒杀脚本,结合上述秘籍,代码将非常清晰和健壮。

from playwright.sync_api import sync_playwright
import timeTARGET_URL = "https://example-limited-sale.com"
USERNAME = "your_email@example.com"
PASSWORD = "your_password"with sync_playwright() as p:# 启动浏览器browser = p.chromium.launch(headless=False) # 调试时设为False,查看运行过程context = browser.new_context()page = context.new_page()try:# 1. 导航到目标页面page.goto(TARGET_URL)# 2. 自动等待并点击登录按钮,然后填写表单page.click("text=Login")page.fill("#email", USERNAME)page.fill("#password", PASSWORD)page.click("#login-btn")# 3. 智能等待登录成功,跳转到商品页page.wait_for_url("**/product/**")# 4. (可选) 拦截可能影响速度的图片请求,加速页面加载page.route("**/*.{png,jpg,jpeg}", lambda route: route.abort())# 5. 核心:循环检查“立即购买”按钮是否可点击buy_btn = page.locator("text=立即购买")buy_btn.wait_for(state="visible") # 等待按钮出现whileTrue:if buy_btn.is_enabled():buy_btn.click()print("✅ 成功点击购买按钮!")breakelse:print("⏳ 按钮还未可用,半秒后重试...")page.wait_for_timeout(500) # 微小间隔,避免频繁检查# 6. 提交订单page.click("text=提交订单")print("🎉 抢购成功!")except Exception as e:print(f"❌ 脚本运行失败: {e}")# 出错截图,便于调试page.screenshot(path="error_screenshot.png")finally:browser.close()

四、 总结:让你的测试飞起来

通过以上实战示例,我们可以看到Playwright如何通过:

  1. 智能等待:根除了Flaky Tests(不稳定的测试),让脚本无比可靠。

  2. 强大选择器:让元素定位变得直观而健壮,减少了脚本的维护成本。

  3. 网络操纵:实现了前端能力的极限测试,速度极快且覆盖场景全面。

  4. 设备模拟:一站式解决移动端测试需求。

行动建议

  1. 安装尝试pip install playwright && playwright install

  2. 录制起步:使用playwright codegen <url>命令打开录制工具,快速生成初始脚本。

  3. 改造旧脚本:尝试用Playwright的思维重写一个你以前觉得很难维护的Selenium脚本,体验其中的差异。

告别等待与彷徨,拥抱Playwright,让你的UI自动化测试真正实现“速度与激情”!

测试开发全景图:AI测试、智能驱动、自动化、测试开发、左移右移与DevOps的持续交付 

推荐学习

Playwright自动化测试框架与AI智能体应用课程,限时免费,机会难得。扫码报名,参与直播,希望您在这场公开课中收获满满,开启智能自动化测试的新篇章!

图片


推荐阅读

精选技术干货

精选文章

从零开始打造AI测试平台:文档解析与知识库构建详解
MCP、LLM与Agent:企业AI实施的新基建设计方案
2025大语言模型部署实战指南:从个人开发到企业落地全栈解决方案
10分钟无痛部署!字节Coze开源版喂饭教程
一文搞定 AI 智能体架构设计的10大核心技术
Agent的深度解析:从原理到实践

技术平台与工具

自研工具与开放资源

  • 爱测智能化测试平台

  • ceshiren.com 技术社区

  • 开源工具 AppCrawler

  • AI测试助手霍格沃兹测试开发学社

  • 开源工具Hogwarts-Browser-Use

人工智能测试开发学习专区
  • 人工智能/AI/为什么测试工程师需要掌握AI

  • 人工智能在音频、视觉、多模态领域的应用

  • 从0到1打造AI工作流:测试用例/测试架构图/测试报告/简历/PPT全自动生成

  • 视觉识别在自动化测试中的应用-UI测试与游戏测试

  • 人工智能产品测试:从理论到实战

  • AI驱动的全栈测试自动化与智能体开发

  • 大语言模型应用开发框架 LangChain

http://www.dtcms.com/a/399082.html

相关文章:

  • 【11408学习记录】考研数学线性代数核心突破:初等变换与初等矩阵完全攻略
  • 两学一做知识竞赛试题网站怎样做营销型网站推广ppt
  • 在HTTP请求上运行SQLMap靶机(打靶记录)
  • 全球外贸网站排名wordpress 媒体播放
  • wordpress 多站点配置文件市场调研公司是做什么业务的
  • Linux/Ubuntu 终端常用压缩工具XZ/BZip2/Gzip
  • 做网站的应用公司做网站要花多少钱
  • 医药行业从OCR到IDP的应用延申
  • 想自己做点飘纱素材到网站上买网站友情链接连接
  • 企业级一体化信创DevOps平台选型指南:如何平衡效率、安全与合规?
  • 网站页面打开速度哈尔滨网站营销推广
  • python+spingboot+vue学生宿舍报修及缴费系统 故障报修 工单处理 在线缴费查询 后勤服务管理平台 报修申请+缴费记录+维修进度跟踪系统
  • 汽车网络安全 CyberSecurity ISO/SAE 21434 测试之三
  • 超级分享 局域网文件互传 Easy Share WiFi File Transfer v1.5.22 解锁高级会员版
  • Redis 监听过期Key
  • 随身WiFi二合一设备开发深度解析:Wi-Fi 6模块集成与三网切换算法优化
  • 国内做外单的网站有哪些200元网站建设
  • 口碑好的江苏网站建设wix做的网站在国内访问不
  • 学习目标:HTML快捷键
  • RoadCLIP 笔记 针对自动驾驶优化的 CLIP 变体 vlm
  • 一文可视化分析2025年8月arXiv机器学习前沿热点
  • 网站闭关保护怎么做找人做的网站怎么看ftp
  • 高性能内存池(一)----项目整体架构设计
  • 笔记(C++篇)—— Day 10
  • Express使用教程(三 - 集成mysql)
  • Universal bovine identification via depth data and deep metric learning 阅读笔记
  • MySQL中limit 1的用法
  • 西门子840d sl 学习笔记 持续更新中。。。
  • 大良网站建设公司网站空间推荐
  • 数学教学网站开发商务网站建设PDF下载