1. 前提:テストコードの共通骨格(Node.js 版)
page オブジェクトのメソッドを呼ぶだけで画像・PDF を手軽に取得できます。
2. スクリーンショット取得
| ニーズ | 代表的な呼び出し例 | 主なオプション |
|---|---|---|
| 画面全体 | await page.screenshot({ path:'full.png', fullPage:true }); |
fullPage(縦方向に自動スクロールして 1 枚に結合) |
| 現在のビューポートのみ | await page.screenshot({ path:'viewport.png' }); |
省略時はビューポート範囲 |
| 特定要素 | await page.locator('#hero').screenshot({ path:'hero.png' }); |
位置計算は Playwright が自動で実行 |
| 任意矩形(クリップ) | await page.screenshot({ path:'clip.png', clip:{ x:0, y:0, width:400, height:300 } }); |
ピクセル座標/幅高さで指定 |
| JPEG / 品質調整 | await page.screenshot({ type:'jpeg', quality:80, path:'view.jpg' }); |
png は可逆・品質指定なし |
補足機能
-
animations:'disabled'で GIF/CSS アニメを停止して安定した撮影。 -
mask:[locator]やmaskColor:'#ccc'で個人情報を塗りつぶし。 -
scale:'device'(デフォルト)とscale:'css'の違いで Retina 表示をコントロール。 -
Playwright Test では
test.info().attachments.push({ name:'screenshot', path, contentType:'image/png' })を使うと失敗時にレポートへ自動添付されます。
3. PDF 生成(Chromium 専用)
注意:
page.pdf()は Chromium のみ対応。Firefox・WebKit では例外が投げられます。
主なオプション
| オプション | 説明 |
|---|---|
format / width / height |
用紙サイズをプリセットまたは mm, cm, in, px で指定 |
printBackground |
CSS background を含めるか |
displayHeaderFooter/headerTemplate/footerTemplate |
ランタイム変数(title, url, date, pageNumber, totalPages)を使ったカスタムヘッダー・フッター |
scale |
0.1–2.0(CSS ピクセル基準) |
margin |
top/right/bottom/left を mm 等で調整 |
4. ベストプラクティス
-
読み込み完了を保証
-
動的コンテンツの安定化
-
必要に応じて
await page.waitForSelector('selector', { state:'attached' }); -
ローディングスピナーが消えるまで
waitForFunctionを使う。
-
-
CI/コンテナ環境
-
フォント不足で文字化けする場合:
fonts-noto-cjkなどを入れる。 -
--disable-gpuは不要(Chromium は headless で自動無効)。
-
-
データの秘匿
-
スクリーンショットに個人情報を含めないよう
mask・クリッピングで除外。
-
-
パフォーマンス
-
大量ページの PDF 生成はメモリを消費するので、ページごとにブラウザを再起動するか、
timeoutを調整。
-
5. 典型的なトラブルと対処
| 症状 | 原因 / 対処 |
|---|---|
| PDF が真っ白 | ページが prefers-color-scheme: dark などで黒地の場合、printBackground:true が抜けている/フォント読み込みエラー |
| 要素スクリーンショットで範囲がずれる | スクロールによる位置変動→ await locator.scrollIntoViewIfNeeded() |
WebKit で page.pdf がない |
仕様です。Chromium に切り替えるか、puppeteer など他ライブラリを検討 |
| 文字化け | システムフォント不足→ Docker file で apt-get install -y fonts-noto など |
まとめ
Playwright では page.screenshot() と page.pdf() が中心 API で、オプションを組み合わせるだけで高品質なキャプチャを自動取得できます。テストレポートや仕様書としての PDF 出力、回帰テスト用の差分比較スクリーンショットなど、幅広い自動化シーンで活用が可能です。
ChatGPT4o 生成日:2025/06/22