← ClaudeAtlas

windows-desktop-e2elisted

Use when writing or debugging E2E tests for Windows native desktop apps (WPF, WinForms, Win32/MFC, Qt) with pywinauto and Windows UI Automation (UIA). Covers per-framework UIA reliability, testability setup, the pywinauto locator/wait/action API, Qt version-specific gotchas (QT_ACCESSIBILITY, Qt5/Qt6 window class names), screenshot fallback with DPI rules, and Job Object process containment.
Mixard/fable-pack · ★ 1 · Testing & QA · score 74
Install: claude install-skill Mixard/fable-pack
# Windows Desktop E2E Testing End-to-end testing for Windows native desktop apps using **pywinauto** backed by Windows UI Automation (UIA). Covers WPF, WinForms, Win32/MFC, and Qt (5.x / 6.x). ## When NOT to Use - Web apps → use Playwright - Electron / CEF / WebView2 → the HTML layer needs browser automation, not UIA - Mobile → UIAutomator, XCUITest ## Core Concepts All Windows desktop automation relies on **UI Automation (UIA)**, a Windows-built-in accessibility API. Every supported framework exposes a tree of UIA elements: ``` Your test (Python) └── pywinauto (UIA backend) └── Windows UI Automation API ← built into Windows, framework-agnostic └── App's UIA provider ← each framework ships its own └── Running .exe ``` **UIA quality by framework:** | Framework | AutomationId source | Reliability | Notes | |-----------|---------------------|-------------|-------| | WPF | `x:Name` maps directly | Excellent | | | WinForms | `AccessibleName` = AutomationId | Good | | | UWP / WinUI 3 | native | Excellent | | | Qt 6.x | native | Excellent | Accessibility on by default; class names are `Qt6*` | | Qt 5.15+ | `objectName` / `accessibleName` | Good | Improved Accessibility module | | Qt 5.7–5.14 | manual | Fair | Needs `QT_ACCESSIBILITY=1` | | Win32 / MFC | control IDs | Fair | Text matching common | ## Setup ```bash # Python 3.8+, Windows only pip install pywinauto pytest pytest-html Pillow pytest-timeout ``` Verify UIA is reachable: `