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 13 Methods
413-line BasePage with find / find_visible / safe_click / type_text / hover / scroll_into_view / wait_for_url_contains / select_dropdown / screenshot — typed, logged, and retry-safe. Every page object inherits from it. Stop rewriting wait logic.
Page Object Model
LoginPage, InventoryPage, CartPage, CheckoutPage — real data-test selectors, chaining returns, module-level Locator constants. The canonical Python POM pattern, done right.
pytest 8 + pytest-xdist
A 346-line conftest.py with driver fixture, login fixture, auto-screenshot-on-failure hook, and Allure environment writer. --browser / --headless / --base-url CLI options out of the box. Same suite runs local and CI.
5 Custom ExpectedConditions
text_to_be_not_empty, text_to_contain, element_count_to_be, element_count_at_least, attribute_value_to_be — plus poll_until and wait_for_elements helpers. Replace every time.sleep() in your suite with a real condition.
retry_on_exception Decorator
StaleElementReferenceException is how Selenium works, not a bug to fight. The retry_on_exception decorator factory (and pre-configured retry_stale variant) re-runs the locator lookup, not the dead reference.
Faker Data Factories
build_user(), build_product(), build_checkout() — Faker-powered, seedable for repro. Plus JSON-backed canonical fixtures (users.json, products.json) for tests that need exact values.
Allure Reporting
Every test annotated with @allure.story, @allure.severity, and with allure.step() contexts. Auto-screenshot on failure via pytest_runtest_makereport. Environment metadata written via pytest_sessionstart.
Selenium Manager Built In
No chromedriver or geckodriver pinning. No webdriver-manager dependency. Selenium 4.6+ ships with Selenium Manager — drivers resolve automatically on every machine and every CI runner.
GitHub Actions Matrix CI
3 shards × 2 browsers (Chrome + Firefox) = 6 concurrent jobs. --reruns=2 for transient failures. Allure aggregation job uploads a single report artifact. E2E Complete status check for branch protection.
Ruff + black + mypy
pyproject.toml, ruff.toml, mypy.ini all pre-configured. Type-hinted end to end. Lint workflow runs ruff + black + mypy in three parallel jobs under 60 seconds.
24 Tests Against SauceDemo
Login, inventory, checkout, and API-vs-UI cart specs run against saucedemo.com. Clone, pip install, pytest — you see a real test suite go green in minutes.
Obsessive Documentation
15 KB README plus 7 deep-dive guides in docs/: PAGE_OBJECT_PATTERN, WAITS_AND_FLAKE, FIXTURES_AND_FACTORIES, PARALLEL_EXECUTION, CI_CD, TROUBLESHOOTING. 2,500+ lines of explanation.