π One engine, five stacks β every suite is built on Playwright.
A multi-language Playwright automation portfolio demonstrating Page Object Model design, both UI and API layers, parallel-safe execution, failure artifacts, and a GitHub Actions CI pipeline β across TypeScript, C# (.NET 8 β NUnit and Reqnroll BDD), Java (Groovy/Spock), and Python.
Every stack runs the same 18 tests (15 UI + 3 API) so the five suites are directly comparable.
| Language | Location | Test Runner | UI | API | Test details |
|---|---|---|---|---|---|
| TypeScript | /js-ts-automation |
Playwright Test | 15 | 3 | README |
| C# / .NET 8 | /dotnet-automation |
NUnit | 15 | 3 | README |
| C# / .NET 8 (BDD) | /reqnroll-automation |
Reqnroll + NUnit | 15 | 3 | README |
| Java + Groovy | /java-automation |
JUnit 5 + Spock | 15 | 3 | README |
| Python | /python-automation |
pytest | 15 | 3 | README |
Each suite covers the same 15 UI scenarios (SauceDemo) plus 3 API contract tests
(JSONPlaceholder), with a consistent Page Object structure (pages / data / tests).
π For a per-test breakdown β exactly what each test does and what it asserts β see the respective folder's README (linked above). Each one documents all 15 cases grouped by Authentication / Inventory / Cart / Checkout.
- UI: https://www.saucedemo.com β credentials
standard_user/secret_sauce - API: https://jsonplaceholder.typicode.com β free public REST API
cd into the folder first. PWDEBUG=1 opens the Playwright Inspector (step through, pauses) and works in every stack.
npm install && npx playwright install # one-time
npm test # all (UI cross-browser + API)
npx playwright test --headed # headed
npx playwright test --debug # debug (Inspector)
npx playwright test --ui # UI mode β time-travel & watch
npx playwright show-report # open the HTML reportdotnet test # all (headless)
HEADED=1 dotnet test # headed
PWDEBUG=1 dotnet test # debug (Inspector)
dotnet test --filter "Name~Checkout" # run a subset
dotnet test --logger "trx;LogFileName=results.trx" # TRX reportdotnet build
pwsh bin/Debug/net8.0/playwright.ps1 install chromium # one-time
dotnet test # all Gherkin scenarios (headless)
HEADED=1 dotnet test # headed
PWDEBUG=1 dotnet test # debug (Inspector)
dotnet test --filter "FullyQualifiedName~Checkout" # a subsetmvn test # all (headless)
HEADLESS=false mvn test # headed
PWDEBUG=1 mvn test # debug (Inspector)
mvn test -Dtest=ApiSpec # just the Spock API spec
mvn surefire-report:report # β target/site/surefire-report.htmlpython -m venv venv && source venv/bin/activate # one-time
pip install -r requirements.txt && playwright install # one-time
pytest # all (headless)
pytest --headed --slowmo 500 # headed + slowed down
PWDEBUG=1 pytest # debug (Inspector)
pytest -n auto # parallel (xdist)
pytest --html=report.html --self-contained-html # report (pip install pytest-html)Headless is the default in every stack. Headed toggles:
--headed(TS / Python),HEADED=1(both C# suites),HEADLESS=false(Java). Debug anywhere withPWDEBUG=1(opens the Playwright Inspector). Failure artifacts land in each suite's report /screenshots/(target/screenshots/for Java).
UI β SauceDemo (15)
- Authentication (4) β valid login, locked-out user + error icon, invalid credentials, logout & route protection
- Inventory (4) β product count, sort by price, sort by name, product detail page
- Cart (3) β items shown with correct names, remove updates count, cart persists across navigation
- Checkout (4) β field validation, subtotal accuracy, price math (
subtotal + tax = total), full end-to-end flow
API β JSONPlaceholder (3)
- GET single resource β status + schema/contract assertions, data-driven over several ids
- GET collection β status + full-collection size
- POST resource β
201, payload echo, and a generated numeric id
- CI/CD β GitHub Actions runs all five suites on every push/PR (see the badges above); failure artifacts are uploaded per job
- Two test layers β UI (Playwright) and API/contract (Playwright
APIRequest/requests), so checks live at the cheapest reliable level - Parallel-safe by design β TypeScript
fullyParallel; Python isolates a browser per test (runs underpytest -n auto); Java uses aThreadLocalfactory; .NETPageTestgives each test its own context - Failure artifacts everywhere β trace + screenshot + video (TS) and screenshot-on-failure hooks (Python / Java / .NET)
- Genuinely data-driven β parameterized tests (
@TestCase,@pytest.mark.parametrize, Spockwhere:, TS loop), not just centralized constants - Real BDD β Reqnroll Gherkin features (with step-by-step logging) and the Java Spock API spec use true
given/when/then - Page Object Model + centralized test data across all 5 suites
- Resilient locators (
data-test) with auto-waiting β no hard sleeps - Financial assertion β
subtotal + tax = totalverified in every UI suite
Devbrat Verma β Senior QA Automation Engineer
GitHub
π Oracle Cloud Infrastructure 2025 Certified Generative AI Professional β view credential
MIT