Strongly-typed .NET automation framework demonstrating the C# async/await patterns expected in enterprise Microsoft-stack organisations — built against the same QA Lab target as all Cross-Stack Series frameworks.
Microsoft.Playwright 1.44 · C# 12 (.NET 8) · NUnit 3.14 · Playwright HTML Reporter · GitHub Actions
Playwright HTML report published to GitHub Pages after every CI run on main. Professional layout, test-by-test trace, pass/fail breakdown — zero extra tooling required.
Playwright HTML Reporter · GitHub Pages View Report →GitHub Actions workflow: smoke tests on every push, full regression on main, scheduled Monday 07:00 UTC before standup. TRX and HTML artifacts retained 30 days.
GitHub Actions · ubuntu-latest View Runs →Full C# project: Page Objects, PlaywrightFixture base class, C# records for test data, NUnit [TestCase] parametrization, .runsettings parallel config, GitHub Actions workflow.
Public · MIT License View Repository →Playwright + C# is the expected stack in any Microsoft-ecosystem organisation: .NET shops, Azure DevOps pipelines, and teams already invested in the C# toolchain. Hiring managers in these environments look for native async/await fluency, NUnit familiarity, and the ability to structure a test project as a proper .NET solution.
This is Stack 5 of the Cross-Stack Series — the same QA Lab target tested with Playwright but in C# rather than TypeScript. Both stacks use the identical Playwright engine, making this a clean apples-to-apples comparison of language ecosystem fit, not automation capability.
Stack choice is an engineering decision, not brand preference. This framework demonstrates what idiomatic C# automation looks like — strongly typed, compiled, zero sync-over-async anti-patterns.
Every decision reflects real .NET enterprise requirements:
await page.ClickAsync() is idiomatic, not bolted on13 QA Lab UI sections covered across 13 test files. Same automation surface targeted in every Cross-Stack Series framework.
Latest GitHub Actions run · May 6, 2026 · ubuntu-latest · View all runs →
.NET stack — every tool justified by real-world enterprise hiring requirements. Zero exotic NuGet packages.
Same target, different stacks. Five frameworks built against the same QA Lab UI to produce evidence-based comparisons — not vendor benchmarks.
.NET-native load testing embedded in the same solution. NBomber is ecosystem-native to the C# stack — same NuGet workflow, same IDE, same debugger as the NUnit suite. The argument is the principle: a .NET team picks a .NET tool. Part of the Cross-Stack Performance Series.
Dual-format output: interactive HTML dashboard and machine-readable JSON, both written to performance-results/. Retained 14 days as GitHub Actions artifacts. Three CLI scenarios selectable: dotnet run -- smoke|baseline|cold-warm.
Smoke on every push and PR. Baseline on main branch only. Weekly scheduled run every Monday at 07:00 UTC. Runs as a separate CI job after NUnit tests pass — needs: test dependency ensures quality gate ordering.
Standalone console project QALab.Performance.csproj with clean boundary from NUnit tests. TreatWarningsAsErrors applied. Typed assertions DSL: Assertion.ForScenario(). Load simulations: RampingConstant(), KeepConstant().