Drop in a Postgres, MySQL, or MongoDB connection string and pull random rows straight from your real DB — no mocks, no fixtures to maintain. Unicode + apostrophe + locale safety, seeded reproducibility, and an identifier-injection guard on every query. CI-verified against live databases every release.
BasePage with Every Wait Helper
A single BasePage owns Find, FindVisible, FindClickable, SafeClick, TypeText, Hover, ScrollIntoView, WaitForUrlContains, SelectDropdown, and screenshot capture. Every page object inherits and stays small. Stop rewriting WebDriverWait boilerplate across 40 page objects.
Page Object Model — Done Right
LoginPage, InventoryPage, CartPage, CheckoutPage — real data-test selectors, fluent return types so tests chain, static readonly By locators. The canonical .NET POM pattern with the failure modes already designed out.
xUnit 2.9 + IClassFixture
A DriverFixture wired via IClassFixture<T> for per-collection driver lifecycle. xunit.runner.json tuned for parallel collections. [Trait("Category", "...")] tagging so you can run smoke, regression, or API suites in isolation.
Custom Wait Extensions
Extension methods on IWebDriver and IWebElement: WaitForVisible, WaitForClickable, WaitForCount, WaitForTextContains, WaitForAttribute. No more scattered WebDriverWait<IWebDriver> instantiation. Reads clearly, fails loudly.
Polly-Based Stale Retry
StaleElementReferenceException is how Selenium works, not a bug. The Retry helper (built on Polly) re-runs the locator lookup, not the dead reference — exponential backoff, configurable predicate, one line per call site.
Bogus Data Factories
UserFactory, ProductFactory, CheckoutFactory — Bogus-powered, seedable for reproducible failure runs. Plus real saucedemo.com standard users wired in as constants so tests are runnable on day one.
Allure.Xunit Reporting
Every test annotated with [AllureFeature], [AllureSeverity], and AllureLifecycle.Instance.RunStep(...). Automatic screenshot-on-failure via [ScreenshotOnFailure]. Environment metadata written at suite start.
Selenium Manager Built In
No ChromeDriver, GeckoDriver, or EdgeDriver pinning. No NuGet drift between dev and CI. Selenium 4 ships with Selenium Manager — drivers resolve at runtime on every machine and every CI runner, every time.
GitHub Actions Matrix CI
A workflow that runs across Chrome, Firefox, and Edge in parallel — NuGet caching, Allure report aggregation, artifact upload on every push. The full matrix completes in under 5 minutes on a stock ubuntu-latest runner.
Azure DevOps Pipeline
azure-pipelines.yml plus a reusable templates/run-tests.yml. UseDotNet@2, .trx publish, code coverage collector, parallel test stages. Drop in your service connection and ship — production-grade out of the box.
46 Tests Across 5 Suites
Login (7), Inventory (11), Checkout (9), API-vs-UI Cart (6), and a pure-HTTP API suite (10). Clone, dotnet restore, dotnet test — you see a real test suite go green against saucedemo.com in minutes.
Obsessive Documentation
11 KB README plus 7 deep-dive guides in docs/: PAGE_OBJECT_PATTERN, WAITS_AND_FLAKE, FIXTURES_AND_FACTORIES, PARALLEL_EXECUTION, CI_CD, TROUBLESHOOTING, GITHUB_PUSH. 2,000+ lines of explanation, not just reference.