Skip to content

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 from WinAppTest.
  • 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.

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.

On a Windows desktop that is unlocked and not in use:

Terminal window
dotnet build apps/WinAppBenchmark -p:Platform=x64
e2e login github-copilot # once, for the agent tests
dotnet test --project apps/WinAppBenchmark.E2ETests # everything
dotnet test --project apps/WinAppBenchmark.E2ETests --filter "FullyQualifiedName!~Scenarios" # no model

The 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.