A browser-based test automation solution utilizing Reqnroll (BDD) and Selenium WebDriver, driven by the MSTest framework and structured around the Page Object Model (POM) architectural pattern.
- BDD-driven testing powered by Reqnroll and Gherkin syntax for clear human-readable scenario specification.
- Cross-browser testing supporting Chrome and Edge in both headed and headless modes.
- Parallel execution capability using custom MSTest
.runsettingsconfigurations for accelerated pipeline feedback. - CI/CD integrated via GitHub Actions with automated artifact uploading, rerun handling, and custom NuGet authentication.
ReqnrollAutomation ├──.github │ └──
workflows │ ├──
reqnroll-automation-core.yml │ └──
reqnroll-automation.yml ├──
ReqnrollAutomation │ ├──
Config │ │ ├──
config.json │ │ ├──
ConfigAdapter.cs │ │ └──
ConfigManager.cs │ ├──
Drivers │ │ └──
DriverFactory.cs │ ├──
Features │ │ ├──
CarfaxCanadaWebsite │ │ │ ├──
AccessibilityVerification.feature │ │ │ ├──
FooterComponentVerification.feature │ │ │ └── ... │ │ └─
SwagLabs │ │ ├──
UserAuthenticationVerification.feature │ │ └── ... │ ├──
Helpers │ │ └──
CredentialManager.cs │ ├──
Hooks │ │ └──
TestHooks.cs │ ├──
Models │ │ └──
SwagLabsCredentials.cs │ ├──
Pages │ │ ├──
CarfaxCanadaWebsite │ │ │ ├──
HomePage.cs │ │ │ └── ... │ │ ├──
SwagLabs │ │ │ ├──
InventoryPage.cs │ │ │ ├──
LoginPage.cs │ │ │ └── ... │ │ └──
BasePage.cs │ ├──
StepDefinitions │ │ ├──
CarfaxCanadaWebsite │ │ │ ├──
CarfaxCanadaBaseStepDefinitions.cs │ │ │ ├──
AccessibilityStepDefinitions.cs │ │ │ ├──
FooterComponentStepDefinitions.cs │ │ │ └── ... │ │ ├──
SwagLabs │ │ │ ├──
SwagLabsBaseStepDefinitions.cs │ │ │ ├──
UserAuthenticationStepDefinitions.cs │ │ │ └── ... │ │ └──
BaseStepDefinitions.cs │ ├──
GlobalUsings.cs │ ├──
credentials.json │ ├──
reqnroll.json │ └──
ReqnrollAutomation.csproj ├──
ReqnrollAutomation.Core │ ├──
Config │ │ ├──
ConfigProvider.cs │ │ └──
IConfigAdapter.cs │ ├──
Extensions │ │ ├──
ReqnrollContextExtensions.cs │ │ ├──
WebDriverExtensions.cs │ │ └──
WebElementExtensions.cs │ └──
Helpers │ ├──
ExtentReportPatcher.cs │ ├──
LogMessageFormatter.cs │ ├──
PathHelper.cs │ └──
ReportManager.cs ├──
TestResults │ ├──
CarfaxCanadaWebsite │ │ ├──
2026-08-01_135952 │ │ │ ├──
Reports │ │ │ │ └──
ExtentReport.html │ │ │ └──
Screenshots │ │ │ ├──
PASSED_Accessibility_toggle_enables_theme_contrast_140001_8.png │ │ │ └── ... │ │ └── ... │ └──
SwagLabs │ └── ... ├──
nuget.config ├──
parallel.runsettings ├──
sequential.runsettings └──
ReqnrollAutomation.slnx
- .NET 10 SDK installed.
- Supported Web Browsers installed:
- Google Chrome
- Microsoft Edge
- Visual Studio 2026 set up (with Reqnroll for Visual Studio 2022 and 2026 extension configured).
The framework leverages MSTest .runsettings configurations to enforce an isolated multi-worker execution strategy, maximizing test throughput while preserving scenario independence.
To eliminate process initialization overhead, the test suite instantiates a persistent pool of 4 browser instances at execution start-up:
- Worker Allocation: Provisions 4 parallel threads, assigning a dedicated WebDriver instance to each worker.
- Session Lifecycle: Maintains active browser processes across sequential scenarios within the same execution thread.
- State Sanitation: Clears cookies, cache, and browser storage via scenario lifecycle hooks to ensure full test isolation.
| Mode | Command | Scope |
|---|---|---|
| Sequential | dotnet test --settings sequential.runsettings |
Single-threaded execution for local debugging. |
| Parallel | dotnet test --settings parallel.runsettings |
Multi-threaded execution across 4 concurrent worker instances. |
Tip
Worker thread capacity can be adjusted by modifying the <Workers>4</Workers> node within the <Parallelize> element in parallel.runsettings.