This sample shows how to run xUnit + Reqnroll + Playwright tests on BrowserStack using the BrowserStack .NET SDK. The SDK reads browserstack.yml, fans your scenarios out across the platforms listed there, starts and stops BrowserStack Local automatically, and reports test status to the BrowserStack dashboard. Your test code stays pure Microsoft.Playwright + Reqnroll -- no manual ConnectAsync, no caps in code.
- Clone the repo
- Open the solution
XunitReqnrollPlaywrightBrowserstack.slnin Visual Studio (or your IDE of choice) - Build the solution (
dotnet build) - Replace the
userNameandaccessKeyplaceholders inbrowserstack.ymlwith your BrowserStack Username and Access Key. Alternatively, remove those two lines from the yml and setBROWSERSTACK_USERNAMEandBROWSERSTACK_ACCESS_KEYas environment variables -- the SDK falls back to env vars only when the yml fields are absent
cd XunitReqnrollPlaywrightBrowserstack.Tests
dotnet testThe sample runs across both platforms declared in browserstack.yml (Windows 11 / Chrome and macOS / WebKit) in parallel.
Understand how many parallel sessions you need by using our Parallel Test Calculator.
If your app lives on localhost, a staging host, or behind a firewall, set browserstackLocal: true in browserstack.yml and rerun dotnet test. The SDK starts and stops the BrowserStack Local tunnel for you -- no manual binary download or lifecycle management. Then point your scenarios at http://bs-local.com:<port>/ (a hostname BrowserStack Local resolves to your machine) instead of a public URL.
This repository uses the BrowserStack SDK to run tests on BrowserStack. To wire the SDK into your own test suite:
-
Create a
browserstack.ymlat the project root with your BrowserStack credentials and platform list (see this repo for a working template) -
Add the
BrowserStack.TestAdapterNuGet package:dotnet add package BrowserStack.TestAdapter
-
Build the project (
dotnet build); the SDK installs thebrowserstack-sdkdotnet tool and patches the test assembly so Playwright launches are routed to BrowserStack at runtime
- One
browserstack.ymldeclares platforms, parallelism, the Local toggle, and reporting; the SDK picks them up automatically - The SDK runs platforms in parallel for you -- one xUnit run per
(platform x parallelsPerPlatform)cell, no per-platform branching needed - The SDK rewrites Playwright launches --
Hooks/PlaywrightHooks.cscallspw.Chromium.LaunchAsync()and the SDK transparently redirects to the per-platform browser configured in the yml (chrome/playwright-webkit/playwright-firefox/ etc.). NoChromium.ConnectAsync(wss_url)plumbing - The SDK starts and stops BrowserStack Local when
browserstackLocal: true-- no manual tunnel lifecycle management - Reqnroll generates xUnit test classes from
.featurefiles at build time, so behaviour-driven scenarios run as standard xUnit tests underdotnet test
.
├── XunitReqnrollPlaywrightBrowserstack.sln
└── XunitReqnrollPlaywrightBrowserstack.Tests/
├── XunitReqnrollPlaywrightBrowserstack.Tests.csproj
├── browserstack.yml # SDK config: credentials, platforms, Local toggle, reporting
├── Features/
│ └── Sample.feature # bstackdemo add-to-cart scenario
├── StepDefinitions/
│ └── SampleSteps.cs
└── Hooks/
└── PlaywrightHooks.cs # creates IPage per scenario; SDK routes the launch
-
You can view your test results on the BrowserStack Automate dashboard
-
To test on a different set of browsers, see our list of supported browsers and platforms
-
You can export the environment variables for the Username and Access Key of your BrowserStack account:
- For Unix-like or Mac machines:
export BROWSERSTACK_USERNAME=<browserstack-username> && export BROWSERSTACK_ACCESS_KEY=<browserstack-access-key>
- For Windows Cmd:
set BROWSERSTACK_USERNAME=<browserstack-username> set BROWSERSTACK_ACCESS_KEY=<browserstack-access-key>
- For Windows Powershell:
$env:BROWSERSTACK_USERNAME=<browserstack-username> $env:BROWSERSTACK_ACCESS_KEY=<browserstack-access-key>
- xUnit
- Reqnroll
- Playwright .NET
- BrowserStack documentation for Playwright in C#
- BrowserStack.TestAdapter on NuGet
- NUnit reference sample
Happy Testing!
