
Windows Desktop E2e
Ship reliable E2E coverage for WPF, WinForms, Win32/MFC, or Qt Windows desktop apps with pywinauto and UIA, including flaky-test fixes and GitHub Actions CI.
Overview
Windows Desktop E2E is an agent skill for the Ship phase that teaches pywinauto-based end-to-end testing of Windows native desktop apps through UI Automation.
Install
npx skills add https://github.com/affaan-m/everything-claude-code --skill windows-desktop-e2eWhat is this skill?
- Automates WPF, WinForms, Win32/MFC, and Qt 5.x/6.x via pywinauto on the Windows UI Automation (UIA) backend
- Guides greenfield desktop GUI test suite layout, fixtures, and stable selectors (AutomationId, accessible names)
- Documents Qt-specific UIA quirks and dedicated patterns in a separate section
- Covers diagnosing flaky or timing-sensitive desktop automation failures
- Integrates desktop E2E into CI/CD on GitHub Actions `windows-latest` runners
- Covers WPF, WinForms, Win32/MFC, and Qt 5.x / 6.x
- Uses pywinauto with the Windows UI Automation (UIA) backend
- Documents CI integration on GitHub Actions windows-latest runners
Adoption & trust: 1.2k installs on skills.sh; 210k GitHub stars; 3/3 security scanners passed (skills.sh audits).
What problem does it solve?
You ship a WPF, WinForms, Win32, or Qt Windows app but have no repeatable way to click through real UI flows in CI without manual QA every release.
Who is it for?
Indie or solo developers maintaining a native Windows desktop product who already run Python and want GUI regression tests in local runs and GitHub Actions.
Skip if: Web-only apps, Electron/WebView2 shells, mobile clients, or backend tests that never launch a native Windows GUI—use Playwright, platform mobile tools, or unit/integration tests instead.
When should I use this skill?
Writing or running E2E tests for a Windows native desktop application, setting up a desktop GUI test suite, diagnosing flaky desktop automation, adding UIA testability hooks, or integrating desktop E2E into CI on windows
What do I get? / Deliverables
You get a UIA-backed pywinauto test suite with stable selectors, flake fixes, and optional GitHub Actions `windows-latest` integration so desktop regressions fail the pipeline before users see them.
- pywinauto E2E test modules and fixtures for the target desktop app
- Documented selector and wait patterns to reduce flaky UIA automation
- CI workflow snippet for running desktop E2E on GitHub Actions windows-latest
Recommended Skills
Journey fit
End-to-end GUI automation belongs in Ship because it validates the built product before release, alongside other quality gates rather than ideation or growth work. Testing is the canonical shelf for procedural E2E skills that drive a live Windows UI, distinct from unit tests or production monitoring.
How it compares
Use for native Windows UIA automation instead of Playwright `e2e-testing`, which targets browsers and embedded web layers.
Common Questions / FAQ
Who is windows-desktop-e2e for?
Solo and indie builders shipping WPF, WinForms, Win32/MFC, or Qt desktop apps on Windows who need automated GUI regression tests, not manual click-through before each release.
When should I use windows-desktop-e2e?
During Ship/testing when writing or running desktop E2E tests, bootstrapping a pywinauto suite, fixing flaky UIA timing, adding AutomationId for testability, or wiring `windows-latest` GitHub Actions—not for web, Electron, or mobile surfaces.
Is windows-desktop-e2e safe to install?
Treat it as procedural test automation guidance; review the Security Audits panel on this Prism page and inspect any generated scripts before granting shell or CI secrets in your repo.
SKILL.md
READMESKILL.md - Windows Desktop E2e
# Windows Desktop E2E Testing End-to-end testing for Windows native desktop applications using **pywinauto** backed by Windows UI Automation (UIA). Covers WPF, WinForms, Win32/MFC, and Qt (5.x / 6.x) — with Qt-specific guidance as a dedicated section. ## When to Activate - Writing or running E2E tests for a Windows native desktop application - Setting up a desktop GUI test suite from scratch - Diagnosing flaky or failing desktop automation tests - Adding testability (AutomationId, accessible names) to an existing app - Integrating desktop E2E into a CI/CD pipeline (GitHub Actions `windows-latest`) ### When NOT to Use - Web applications → use `e2e-testing` skill (Playwright) - Electron / CEF / WebView2 apps → the HTML layer needs browser automation, not UIA - Mobile apps → use platform-specific tools (UIAutomator, XCUITest) - Pure unit or integration tests that don't need a running GUI ## 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 with properties Claude can read and act on: ``` 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 | Reliability | Notes | |-----------|-------------|-------------|-------| | WPF | ★★★★★ | Excellent | `x:Name` maps directly to AutomationId | | WinForms | ★★★★☆ | Good | `AccessibleName` = AutomationId | | UWP / WinUI 3 | ★★★★★ | Excellent | Full Microsoft support | | Qt 6.x | ★★★★★ | Excellent | Accessibility enabled by default; class names change to `Qt6*` | | Qt 5.15+ | ★★★★☆ | Good | Improved Accessibility module | | Qt 5.7–5.14 | ★★★☆☆ | Fair | Needs `QT_ACCESSIBILITY=1`; objectName manual | | Win32 / MFC | ★★★☆☆ | Fair | Control IDs accessible; text matching common | ## Setup & Prerequisites ```bash # Python 3.8+, Windows only pip install pywinauto pytest pytest-html Pillow pytest-timeout # Optional: screen recording # Install ffmpeg and add to PATH: https://ffmpeg.org/download.html ``` Verify UIA is reachable: ```python from pywinauto import Desktop Desktop(backend="uia").windows() # lists all top-level windows ``` Install **Accessibility Insights for Windows** (free, from Microsoft) — your DevTools equivalent for inspecting the UIA element tree before writing any test. ## Testability Setup (by Framework) The single most impactful thing you can do is **give every interactive control a stable AutomationId** before writing tests. ### WPF ```xml <!-- XAML: x:Name becomes AutomationId automatically --> <TextBox x:Name="usernameInput" /> <PasswordBox x:Name="passwordInput" /> <Button x:Name="btnLogin" Content="Login" /> <TextBlock x:Name="lblError" /> ``` ### WinForms ```csharp // Set in designer or code usernameInput.AccessibleName = "usernameInput"; passwordInput.AccessibleName = "passwordInput"; btnLogin.AccessibleName = "btnLogin"; lblError.AccessibleName = "lblError"; ``` ### Win32 / MFC ```cpp // Control resource IDs in .rc file are exposed as AutomationId strings // IDC_EDIT_USERNAME -> AutomationId "1001" // Prefer SetWindowText for Name; add IAccessible for richer support ``` ### Qt — see dedicated section below --- ## Page Object Model ``` tests/ ├── conftest.py # app launch fixture, failure screenshot ├── pytest.ini ├── config.py ├── pages/ │ ├── __init__.py # required for imports │ ├── base_page.py # locators, wait, screenshot helpers │ ├── login_page.py │ └── main_page.py ├── tests/ │ ├── __init__.py │ ├── test_login.py │ └── test_main_flow.py └── artifacts/ # screenshots, v