news 2026/7/7 1:58:48

Playwright 网络拦截

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Playwright 网络拦截

Playwright 网络拦截(Route & Request Interception)(2025 年最新版)

网络拦截是 Playwright 最强大的功能之一,允许你拦截、修改、mock 或中止浏览器发出的任何网络请求(XHR、fetch、API 调用、图片、CSS 等)。常用于:

  • Mock API 响应(加速测试、避免真实后端依赖)
  • 测试错误场景(404、500、超时)
  • 修改请求头/参数
  • 模拟网络延迟或离线
  • 捕获 API 数据进行断言

Playwright 使用page.route()route.handler()实现拦截,支持通配符匹配。

1.基本用法:拦截并 Mock 响应
// tests/mock-api.spec.tsimport{test,expect}from'@playwright/test';test('Mock API 返回固定数据',async({page})=>{// 拦截所有 /api/users 请求awaitpage.route('**/api/users',asyncroute=>{// Mock 一个成功的 JSON 响应awaitroute.fulfill({status:200,contentType:'application/json',headers:{'Access-Control-Allow-Origin':'*'},// 可选:处理 CORSbody:JSON.stringify([{id:1,name:'Mock 用户1'},{id:2,name:'Mock 用户2'},]),});});awaitpage.goto('https://your-app.com/users');// 页面会显示我们 mock 的数据awaitexpect(page.getByRole('heading')).toHaveText('用户列表');awaitexpect(page.getByText('Mock 用户1')).toBeVisible();});
2.常见拦截模式
场景代码示例说明
继续原请求(不修改)await route.continue();默认行为,常用于日志记录
修改请求(添加头/参数)```await
中止请求(模拟失败)await route.abort('failed');await route.abort();触发 network error
模拟错误响应await route.fulfill({<br> status: 500,<br> body: 'Server Error'<br>});返回 4xx/5xx
重定向await route.fulfill({ status: 301, headers: { location: '/new-url' } });模拟重定向
模拟网络延迟await page.route('**/*', async route => {<br> await new Promise(r => setTimeout(r, 2000)); // 延迟 2s<br> await route.continue();<br>});测试 loading 状态
拦截特定类型资源await page.route('**/*.{png,jpg,jpeg}', route => route.abort());阻塞图片加载(加速测试)
3.高级:根据请求动态决定
awaitpage.route('**/api/**',asyncroute=>{constmethod=route.request().method();if(method==='GET'&&route.request().url().includes('users/1')){awaitroute.fulfill({json:{id:1,name:'特殊用户',vip:true}});// shorthand for JSON}elseif(method==='POST'){// 记录请求体用于断言constpostData=route.request().postDataJSON();console.log('收到 POST 数据:',postData);awaitroute.fulfill({status:201,json:{success:true}});}else{awaitroute.continue();}});
4.捕获响应进行断言
// 等待特定响应并验证const[response]=awaitPromise.all([page.waitForResponse('**/api/login'),page.getByRole('button',{name:'登录'}).click(),]);expect(response.status()).toBe(200);constjson=awaitresponse.json();expect(json.token).toBeTruthy();
5.拦截 WebSocket(Playwright v1.30+ 支持)
awaitpage.route('wss://example.com/socket',route=>{// WebSocket 拦截目前有限制,通常用 route.continue() + page.on('websocket')route.continue();});page.on('websocket',ws=>{console.log(`WebSocket 打开:${ws.url()}`);ws.on('framesent',frame=>console.log('发送:',frame));});
6.Python 版示例(Mock API)
defhandle_route(route):if"api/users"inroute.request.url:route.fulfill(status=200,content_type="application/json",body='[{"id":1,"name":"Mock 用户"}]')else:route.continue_()page.route("**/api/**",handle_route)page.goto("https://your-app.com")
最佳实践总结
  • 匹配规则:使用**/通配符(如**/api/**)覆盖所有子路径。
  • 优先级:先定义具体路由,后定义通用路由(后定义的优先)。
  • 清理:测试结束无需手动 unroute,Playwright 会自动清理。
  • 生产测试:结合route.fulfill()mock 不稳定第三方 API。
  • 调试:用page.on('request')page.on('response')打印日志观察拦截效果。

网络拦截能让你完全掌控测试环境,避免外部依赖导致的 flaky 测试。下一步建议:实现一个完整的登录流程,使用网络拦截 mock 登录 API 并验证返回 token。

需要更复杂的场景(如文件下载拦截、GraphQL Mock、多环境切换),随时告诉我!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/7 14:00:45

【高危漏洞预警】Open-AutoGLM认证体系缺失MFA?立即检查这4项配置

第一章&#xff1a;Open-AutoGLM 多因素认证集成在现代身份验证架构中&#xff0c;多因素认证&#xff08;MFA&#xff09;已成为保障系统安全的核心机制。Open-AutoGLM 通过灵活的插件化设计&#xff0c;支持多种 MFA 方式的无缝集成&#xff0c;包括基于时间的一次性密码&…

作者头像 李华
网站建设 2026/7/7 8:22:23

紧急预警能力提升300%!Open-AutoGLM行为分析的4个黄金法则

第一章&#xff1a;紧急预警能力提升300%&#xff01;Open-AutoGLM行为分析的4个黄金法则在现代智能系统中&#xff0c;Open-AutoGLM凭借其强大的语义理解与行为建模能力&#xff0c;显著提升了异常检测和紧急预警的响应效率。通过优化模型推理路径与上下文感知机制&#xff0c…

作者头像 李华
网站建设 2026/7/7 18:58:24

文献综述“魔法棒”:书匠策AI解锁科研信息整合新姿势

在科研的漫漫征途中&#xff0c;文献综述就像是一座关键的桥梁&#xff0c;它连接着过去的研究成果与未来的探索方向。一份高质量的文献综述&#xff0c;能够帮助科研人员站在巨人的肩膀上&#xff0c;洞察研究领域的发展脉络、前沿动态以及潜在的研究空白&#xff0c;为后续的…

作者头像 李华
网站建设 2026/7/7 9:53:00

科研“探照灯”:借书匠策AI文献综述功能照亮学术未知疆域

在科研的广袤天地中&#xff0c;每一项研究都是一次对未知的大胆探索。而文献综述&#xff0c;恰似那高悬于夜空的探照灯&#xff0c;为我们照亮前行的道路&#xff0c;让我们看清前人留下的足迹&#xff0c;避免在重复的道路上徘徊&#xff0c;指引我们走向更具价值的科研方向…

作者头像 李华
网站建设 2026/7/7 5:45:52

无需编程!用LangFlow镜像轻松拖拽搭建LangChain智能体

无需编程&#xff01;用LangFlow镜像轻松拖拽搭建LangChain智能体 在大模型技术席卷各行各业的今天&#xff0c;越来越多团队希望快速构建属于自己的AI应用——无论是智能客服、知识问答系统&#xff0c;还是自动化内容生成工具。但现实往往令人望而却步&#xff1a;LangChain功…

作者头像 李华
网站建设 2026/7/6 9:35:53

【企业安全防线重建】:基于Open-AutoGLM的日志查询权限分级方案详解

第一章&#xff1a;企业日志安全新挑战在数字化转型加速的背景下&#xff0c;企业信息系统产生的日志数据呈指数级增长。这些日志不仅记录了系统运行状态、用户行为和安全事件&#xff0c;更成为攻击者觊觎的重要目标。传统的日志管理方式已难以应对当前复杂的安全威胁&#xf…

作者头像 李华