# 屏幕截图与媒体 > **适用场景**:捕获页面状态的视觉证据——截图用于验证、视频录制用于演示或调试、PDF 导出用于文档、视口调整用于响应式测试。 > **前置条件**:[core-commands.md](core-commands.md) 了解基本 CLI 用法 ## 快速参考 ```bash # 屏幕截图 playwright-cli screenshot # 全页截图 playwright-cli screenshot e5 # 元素截图 playwright-cli screenshot --filename=checkout.png # 自定义文件名 # PDF playwright-cli pdf --filename=report.pdf # 将页面保存为 PDF # 视频 playwright-cli video-start # 开始录制 playwright-cli video-stop demo.webm # 停止并保存 # 视口 playwright-cli resize 1920 1080 # 桌面端 playwright-cli resize 375 812 # 移动端 ``` ## 屏幕截图 ### 页面截图 捕获当前可见视口: ```bash # 自动生成文件名 playwright-cli screenshot # 自定义文件名 playwright-cli screenshot --filename=homepage.png playwright-cli screenshot --filename=screenshots/checkout-step3.png ``` ### 元素截图 仅捕获特定元素——适用于组件级别的验证: ```bash # 按引用截取单个元素 playwright-cli snapshot # 先获取引用 playwright-cli screenshot e5 # 仅捕获元素 e5 # 自定义文件名 playwright-cli screenshot e5 --filename=product-card.png ``` ### 全页截图 捕获整个可滚动页面,而不仅仅是当前视口: ```bash playwright-cli run-code "async page => { await page.screenshot({ path: 'full-page.png', fullPage: true }); return '已保存全页截图'; }" ``` ### 带选项的截图 使用 `run-code` 实现高级截图选项: ```bash # 全页加质量设置(JPEG) playwright-cli run-code "async page => { await page.screenshot({ path: 'optimized.jpg', type: 'jpeg', quality: 80, fullPage: true }); }" # 裁剪到指定区域 playwright-cli run-code "async page => { await page.screenshot({ path: 'header-region.png', clip: { x: 0, y: 0, width: 1280, height: 200 } }); }" # 透明背景(适用于带透明度的元素) playwright-cli run-code "async page => { await page.screenshot({ path: 'transparent.png', omitBackground: true }); }" # 带遮罩的截图(隐藏动态内容) playwright-cli run-code "async page => { await page.screenshot({ path: 'masked.png', mask: [ page.locator('.timestamp'), page.locator('.user-avatar'), page.locator('.ad-banner') ] }); }" # 截图前禁用动画 playwright-cli run-code "async page => { await page.evaluate(() => { document.querySelectorAll('*').forEach(el => { el.style.animation = 'none'; el.style.transition = 'none'; }); }); await page.screenshot({ path: 'no-animations.png' }); }" ``` ### 带选项的元素截图 ```bash playwright-cli run-code "async page => { const element = page.getByTestId('pricing-card'); await element.screenshot({ path: 'pricing-card.png', omitBackground: true }); }" ``` ## 响应式截图 捕获页面在不同视口尺寸下的表现: ```bash # 桌面端(1920x1080) playwright-cli resize 1920 1080 playwright-cli screenshot --filename=desktop.png # 笔记本电脑(1366x768) playwright-cli resize 1366 768 playwright-cli screenshot --filename=laptop.png # 平板横屏(1024x768) playwright-cli resize 1024 768 playwright-cli screenshot --filename=tablet-landscape.png # 平板竖屏(768x1024) playwright-cli resize 768 1024 playwright-cli screenshot --filename=tablet-portrait.png # 移动端(375x812 — iPhone X) playwright-cli resize 375 812 playwright-cli screenshot --filename=mobile.png # 小屏移动端(320x568 — iPhone SE) playwright-cli resize 320 568 playwright-cli screenshot --filename=mobile-small.png ``` ### 自动化响应式截图 ```bash playwright-cli run-code "async page => { const viewports = [ { name: 'desktop', width: 1920, height: 1080 }, { name: 'laptop', width: 1366, height: 768 }, { name: 'tablet', width: 768, height: 1024 }, { name: 'mobile', width: 375, height: 812 }, { name: 'mobile-sm', width: 320, height: 568 } ]; for (const vp of viewports) { await page.setViewportSize({ width: vp.width, height: vp.height }); await page.waitForTimeout(500); // 等待布局稳定 await page.screenshot({ path: \`responsive-\${vp.name}.png\` }); } return '已捕获 ' + viewports.length + ' 张响应式截图'; }" ``` ## PDF 导出 从网页生成 PDF 文档——适用于报告、发票和文档。 ```bash # 基础 PDF playwright-cli pdf --filename=page.pdf ``` ### 高级 PDF 选项 ```bash # 带自定义选项的 PDF playwright-cli run-code "async page => { await page.pdf({ path: 'report.pdf', format: 'A4', printBackground: true, margin: { top: '1cm', right: '1cm', bottom: '1cm', left: '1cm' } }); return 'PDF 已保存'; }" # Letter 格式加页眉/页脚 playwright-cli run-code "async page => { await page.pdf({ path: 'document.pdf', format: 'Letter', printBackground: true, displayHeaderFooter: true, headerTemplate: '