mcpField
Q
qe-visual-testing-advanced

qe-visual-testing-advanced

github.com/proffesor-for-testingテスト・品質51984 回インストール今日更新
リポジトリ

qe-visual-testing-advanced について

qe-visual-testing-advancedは、UIのビジュアル回帰テストを計画するスキルです。スクリーンショットのベースライン、差分比較、動的コンテンツのマスク、複数ビューポートでの確認を扱い、PlaywrightやAI比較の例も示します。

主な機能

  1. 01スクリーンショットのベースライン取得と差分比較
  2. 02タイムスタンプなど動的要素のマスク
  3. 03ピクセル、構造、AIによる比較
  4. 04デスクトップ、タブレット、モバイルのビューポート確認
  5. 05ビジュアル差分のレビューとCI/CDへの組み込み

活用シーン

  1. 01CSS変更後のレイアウトや色の回帰検出
  2. 02画面サイズごとのレスポンシブUI比較
  3. 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 を検証するときは、次の手順に従います。

  1. ベースラインのスクリーンショットを撮影する(初回の実行でベースラインを確立します)
  2. 新しいスクリーンショットをベースラインと比較する(ピクセル単位または AI で比較します)
  3. 動的コンテンツ(タイムスタンプ、広告、ユーザー数)をマスクする
  4. デバイス(デスクトップ、タブレット、モバイルのビューポート)ごとにテストする
  5. 意図した変更をレビューして承認し、リグレッションがあれば失敗とする

ビジュアルテストの簡単な手順:

  • 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'
});

関連スキル


覚えておくこと

機能テストではビジュアルのバグを検出できません。 レイアウトシフト、色の変更、フォントのレンダリング、配置の問題は、すべて機能テストでは見えませんが、ユーザーには見えます。

AI を活用したツールで誤検出を減らせます。 Percy や Applitools は AI を使って、重要でない差異(アンチエイリアス、軽微なフォントのレンダリング)を無視します。

エージェントを使用する場合: qe-visual-tester はブラウザーやデバイスをまたいだビジュアルリグレッションを自動化し、AI を使ってノイズを除去して、ビジュアル差分レポートを生成します。ユーザーに見られる前に UI のリグレッションを検出します。

コメント