Headless and repeatable native UI tests
Testing & CI
Run the same native UI intent interactively, headlessly, or through established automation ecosystems.
Explore source ↗Capability
Headless Avalonia execution, a global flow runner, Playwright and Puppeteer compatibility, Selenium and Appium orchestration, OS accessibility automation, screenshots, selectors, waits, assertions, and GitHub Actions support cover local through CI test lanes.
- 01
Zero-display Avalonia.Headless execution
- 02
Test Studio flow runner
- 03
Playwright, Selenium, Appium, and Puppeteer
- 04
CI screenshots, telemetry, and reports
How it composes
From intent
to working system.
Launch
The runner starts a headless or visible application and waits for CDP discovery.
Drive
Flows or external clients query selectors and dispatch input through protocol domains.
Assert
Visibility, text, state, properties, scripts, waits, and screenshots verify behavior.
Publish
CI retains logs, images, telemetry, and machine- or human-readable reports.
Quick start
Adopt this
capability.
Start with the primary module, then add the related packages only when the application needs those layers. Replace VERSION with the current NuGet version.
dotnet tool install --global Chrome.DevTools.Runner --prereleasedotnet add package Chrome.DevTools.Automation.Headless --prerelease# Execute a Test Studio flow without the desktop editor.cdp-runner tests/login.flow.yaml --app "dotnet run --project src/MyApp -- --headless" --report artifacts/test-report.htmlModules in this capability
Use one layer.
Compose the rest.
Avalonia.Headless driver and test helpers.
↗02Chrome.DevTools.RunnerGlobal .flow.yaml headless runner.
↗03Chrome.DevTools.Automation.SeleniumSelenium fixture and orchestration.
↗04Chrome.DevTools.Automation.AppiumAppium fixture and orchestration.
↗05Chrome.DevTools.Automation.OSmacOS, Windows, and Linux accessibility automation.
↗Source of truth
Read the module beside the complete system.
The implementation, samples, issues, and release notes stay in the parent repository so module details remain connected to the product architecture.