WinApp benchmark
A WinUI 3 desktop app of self-contained scenarios that are hard to automate, and the suites that drive it with WinAppEngine. It is the Windows counterpart of upstream’s apps/mobile-benchmark: the same scenario names, and the same AutomationId where upstream has a testID.
- App:
apps/WinAppBenchmark, written with Microsoft.UI.Reactor and run unpackaged. - Tests:
apps/WinAppBenchmark.E2ETests, derived fromWinAppTest. - Scenarios: Login Form, Modal Flow, Bottom Tabs, Async States, Choice Controls, Sequential Onboarding, Infinite Scroll List, Huge Virtualized List, Control Inventory, Gestures, Broken Accessibility, Vision Only, Flattened forms, and more.
Fixtures/BenchmarkTest.cs holds the shared base class and helpers the suites use.
Every scenario ends in a deterministic success state, usually an element with AutomationId success-message. The adversarial scenarios put their controls in the raw view with no ids, so success is visible only in pixels.
The suites
Section titled “The suites”| Directory | What it runs |
|---|---|
Smoke, LoginForm, Flows, FlowsLists |
Locator-only runs through the scenarios. No model. |
Controls |
Every locator verb, read, and matcher on the Control Inventory. No model. |
Device, DeviceFixture |
The Window fixture and the onboarding wizard. No model. |
Scenarios |
One Agent.ActAsync per scenario, checked with a locator or, for hidden-tree scenarios, a vision assert. |
Run it
Section titled “Run it”On a Windows desktop that is unlocked and not in use:
dotnet build apps/WinAppBenchmark -p:Platform=x64e2e login github-copilot # once, for the agent testsdotnet test --project apps/WinAppBenchmark.E2ETests # everythingdotnet test --project apps/WinAppBenchmark.E2ETests --filter "FullyQualifiedName!~Scenarios" # no modelThe Login Form account is tester@tester.army / benchmark123. To drive the app with e2e explore or e2e mcp, point a windows target at bin/x64/Debug/net10.0-windows10.0.22621.0/WinAppBenchmark.exe.