qe-visual-testing-advanced について
qe-visual-testing-advancedは、UIのビジュアル回帰テストを計画するスキルです。スクリーンショットのベースライン、差分比較、動的コンテンツのマスク、複数ビューポートでの確認を扱い、PlaywrightやAI比較の例も示します。
主な機能
- 01スクリーンショットのベースライン取得と差分比較
- 02タイムスタンプなど動的要素のマスク
- 03ピクセル、構造、AIによる比較
- 04デスクトップ、タブレット、モバイルのビューポート確認
- 05ビジュアル差分のレビューとCI/CDへの組み込み
活用シーン
- 01CSS変更後のレイアウトや色の回帰検出
- 02画面サイズごとのレスポンシブUI比較
- 03スクリーンショットのベースラインによるコンポーネント更新確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ proffesor-for-testing/ agentic-qe --skill qe-visual-testing-advancedインストール後、Claude Code で/qe-visual-testing-advancedを入力して読み込まれたか確認します。
詳細
高度なビジュアルテスト
<default_to_action> ビジュアルのリグレッションを検出するときや UI を検証するときは、次の手順に従います。
- ベースラインのスクリーンショットを撮影する(初回の実行でベースラインを確立します)
- 新しいスクリーンショットをベースラインと比較する(ピクセル単位または AI で比較します)
- 動的コンテンツ(タイムスタンプ、広告、ユーザー数)をマスクする
- デバイス(デスクトップ、タブレット、モバイルのビューポート)ごとにテストする
- 意図した変更をレビューして承認し、リグレッションがあれば失敗とする
ビジュアルテストの簡単な手順:
- main ブランチでベースラインを設定する
- フィーチャーブランチをベースラインと比較する
- 動的要素(タイムスタンプ、アバター)をマスクする
- AI を活用した比較を使って誤検出を減らす
- CI/CD に統合してビジュアルのリグレッションをブロックする
重要な成功要因:
- 機能テストではビジュアルのバグを検出できません
- AI を活用したツールで誤検出を減らせます
- 差分をレビューし、自動承認だけに頼らないでください </default_to_action>
クイックリファレンスカード
使用する場面
- UI コンポーネントの変更
- CSS/スタイルの変更
- レスポンシブデザインの検証
- クロスブラウザーの一貫性チェック
ビジュアルバグの種類
| バグの種類 | 説明 |
|---|---|
| レイアウトシフト | 要素の位置が移動する |
| 色の変更 | 意図しない色の変更 |
| フォントのレンダリング | タイポグラフィの問題 |
| 配置 | 間隔や配置の問題 |
| 画像の欠落 | 画像パスの破損 |
| オーバーフロー | コンテンツのクリッピング |
比較アルゴリズム
| アルゴリズム | 最適な用途 |
|---|---|
| ピクセル差分 | 完全一致が必要な場合 |
| 構造的類似性 | アンチエイリアスへの対応 |
| AI セマンティック比較 | 重要でない変更を無視する場合 |
Playwright によるビジュアルリグレッション
import { test, expect } from '@playwright/test';
test('homepage visual regression', async ({ page }) => {
await page.goto('https://example.com');
// Capture and compare screenshot
await expect(page).toHaveScreenshot('homepage.png');
// First run: saves baseline
// Subsequent runs: compares to baseline
});
test('responsive design', async ({ page }) => {
// Mobile viewport
await page.setViewportSize({ width: 375, height: 667 });
await page.goto('https://example.com');
await expect(page).toHaveScreenshot('homepage-mobile.png');
// Tablet viewport
await page.setViewportSize({ width: 768, height: 1024 });
await expect(page).toHaveScreenshot('homepage-tablet.png');
});
動的コンテンツの処理
test('mask dynamic elements', async ({ page }) => {
await page.goto('https://example.com');
await expect(page).toHaveScreenshot({
mask: [
page.locator('.timestamp'), // Dynamic time
page.locator('.user-count'), // Live counter
page.locator('.advertisement'), // Ads
page.locator('.avatar') // User avatars
]
});
});
AI を活用したビジュアルテスト(Percy)
import percySnapshot from '@percy/playwright';
test('AI-powered visual test', async ({ page }) => {
await page.goto('https://example.com');
// Percy uses AI to ignore anti-aliasing, minor font differences
await percySnapshot(page, 'Homepage');
});
test('component visual test', async ({ page }) => {
await page.goto('https://example.com/components');
// Snapshot specific component
const button = page.locator('.primary-button');
await percySnapshot(page, 'Primary Button', {
scope: button
});
});
Playwright の設定
// playwright.config.js
export default {
expect: {
toHaveScreenshot: {
maxDiffPixels: 100, // Allow 100 pixel difference
maxDiffPixelRatio: 0.01, // Or 1% of image
threshold: 0.2, // Color similarity threshold
animations: 'disabled', // Disable animations
caret: 'hide' // Hide cursor
}
}
};
エージェント主導のビジュアルテスト
// Comprehensive visual regression
await Task("Visual Regression Suite", {
baseline: 'main-branch',
current: 'feature-branch',
pages: ['homepage', 'product', 'checkout'],
devices: ['desktop', 'tablet', 'mobile'],
browsers: ['chrome', 'firefox', 'safari'],
threshold: 0.01
}, "qe-visual-tester");
// Returns:
// {
// comparisons: 27, // 3 pages × 3 devices × 3 browsers
// differences: 2,
// report: 'visual-regression-report.html'
// }
エージェント連携のヒント
メモリの名前空間
aqe/visual-testing/
├── baselines/* - Baseline screenshots
├── comparisons/* - Diff results
├── components/* - Component snapshots
└── reports/* - Visual regression reports
フリートの連携
const visualFleet = await FleetManager.coordinate({
strategy: 'visual-testing',
agents: [
'qe-visual-tester', // Screenshot comparison
'qe-test-executor', // Cross-browser execution
'qe-quality-gate' // Block on visual regressions
],
topology: 'parallel'
});
関連スキル
- アクセシビリティテスト - ビジュアル面の a11y チェック
- 互換性テスト - クロスブラウザーのビジュアル
- リグレッションテスト - リグレッションテストスイート
覚えておくこと
機能テストではビジュアルのバグを検出できません。 レイアウトシフト、色の変更、フォントのレンダリング、配置の問題は、すべて機能テストでは見えませんが、ユーザーには見えます。
AI を活用したツールで誤検出を減らせます。 Percy や Applitools は AI を使って、重要でない差異(アンチエイリアス、軽微なフォントのレンダリング)を無視します。
エージェントを使用する場合: qe-visual-tester はブラウザーやデバイスをまたいだビジュアルリグレッションを自動化し、AI を使ってノイズを除去して、ビジュアル差分レポートを生成します。ユーザーに見られる前に UI のリグレッションを検出します。
コメント
Markdown 対応