--- name: windows-desktop-e2e description: E2E testing for Windows native desktop apps (WPF, WinForms, Win32/MFC, Qt) using pywinauto and Windows UI Automation. origin: ECC --- # Windows デスクトップ E2E テスト **pywinauto** と Windows UI Automation(UIA)を使用したWindowsネイティブデスクトップアプリケーションのエンドツーエンドテスト。WPF、WinForms、Win32/MFC、Qt(5.x / 6.x)をカバーし、Qt固有のガイダンスは専用セクションとして提供します。 ## アクティベートするタイミング - Windowsネイティブデスクトップアプリケーションのエンドツーエンドテストを書くまたは実行するとき - デスクトップGUIテストスイートをゼロから設定するとき - 不安定または失敗するデスクトップオートメーションテストを診断するとき - 既存のアプリにテスタビリティ(AutomationId、アクセシブルな名前)を追加するとき - デスクトップエンドツーエンドをCI/CDパイプライン(GitHub Actions `windows-latest`)に統合するとき ### 使用しないタイミング - Webアプリケーション → `e2e-testing` スキル(Playwright)を使用する - Electron / CEF / WebView2 アプリ → HTMLレイヤーにはUIAではなくブラウザオートメーションが必要 - モバイルアプリ → プラットフォーム固有のツールを使用する(UIAutomator、XCUITest) - 実行中のGUIを必要としない純粋なユニットまたは統合テスト ## コアコンセプト すべてのWindowsデスクトップオートメーションは**UI Automation(UIA)**に依存します。これはWindowsに組み込まれたアクセシビリティAPIです。サポートされているすべてのフレームワークは、読み取りおよび操作可能なプロパティを持つUIA要素のツリーを公開します: ``` テスト(Python) └── pywinauto(UIAバックエンド) └── Windows UI Automation API ← Windowsに組み込み、フレームワーク非依存 └── アプリのUIAプロバイダー ← 各フレームワークが独自に実装 └── 実行中の .exe ``` **フレームワーク別UIA品質:** | フレームワーク | AutomationId | 信頼性 | 注記 | |-----------|-------------|-------------|-------| | WPF | ★★★★★ | 優秀 | `x:Name` が直接AutomationIdにマッピング | | WinForms | ★★★★☆ | 良好 | `AccessibleName` = AutomationId | | UWP / WinUI 3 | ★★★★★ | 優秀 | Microsoftの完全サポート | | Qt 6.x | ★★★★★ | 優秀 | アクセシビリティがデフォルトで有効;クラス名が `Qt6*` に変更 | | Qt 5.15+ | ★★★★☆ | 良好 | Accessibilityモジュールが改善 | | Qt 5.7–5.14 | ★★★☆☆ | 普通 | `QT_ACCESSIBILITY=1` が必要;objectNameは手動設定 | | Win32 / MFC | ★★★☆☆ | 普通 | コントロールIDにアクセス可能;テキストマッチングが一般的 | ## セットアップと前提条件 ```bash # Python 3.8+、Windowsのみ pip install pywinauto pytest pytest-html Pillow pytest-timeout # オプション:画面録画 # ffmpegをインストールしてPATHに追加:https://ffmpeg.org/download.html ``` UIAが到達可能か確認: ```python from pywinauto import Desktop Desktop(backend="uia").windows() # すべてのトップレベルウィンドウを一覧表示 ``` **Accessibility Insights for Windows**をインストールしてください(Microsoft提供、無料)— テストを書く前にUIA要素ツリーを検査するためのDevTools相当のツールです。 ## テスタビリティのセットアップ(フレームワーク別) テストを書く前に**全てのインタラクティブなコントロールに安定したAutomationIdを設定すること**が最も効果的です。 ### WPF ```xml