// the kit

Selenium Pro Automation KitPython

A production-ready Selenium framework. Python 3.11+. BasePage with 13 methods. POM pattern. pytest + pytest-xdist parallel. 5 custom ExpectedConditions. Retry decorators. Faker factories. Allure reporting. GitHub Actions matrix CI. 105 passing tests, with Ruff and strict production-code mypy checks clean. $995.

Buy the Kit — $995 →

Already own a kit? Sign in for $895 owner pricing.

##Everything included: BasePage, POM, custom waits, retries, CI

Twelve production-grade pieces of a Selenium test automation framework — wired together, documented, and ready to ship.

Real-Data Module ↓

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.

##What the code looks like

Real snippets from the kit. Type-hinted, Pythonic, retry-aware.

src/pages/login_page.pyfrom selenium.webdriver.common.by import By
from .base_page import BasePage

class LoginPage(BasePage):
    USERNAME = (By.CSS_SELECTOR, "[data-test='username']")
    PASSWORD = (By.CSS_SELECTOR, "[data-test='password']")
    LOGIN_BTN = (By.CSS_SELECTOR, "[data-test='login-button']")

    def login(self, username: str, password: str) -> "InventoryPage":
        self.type_text(self.USERNAME, username)
        self.type_text(self.PASSWORD, password)
        self.safe_click(self.LOGIN_BTN)
        return InventoryPage(self.driver)
tests/e2e/test_checkout.pyimport allure
import pytest
from src.factories import build_checkout

@allure.story("Checkout")
@pytest.mark.e2e
def test_checkout_completes(logged_in_inventory):
    checkout = build_checkout()
    with allure.step("Add item and start checkout"):
        cart = (logged_in_inventory
            .add_to_cart("sauce-labs-backpack")
            .go_to_cart())
    confirmation = (cart
        .checkout()
        .fill_information(checkout)
        .finish())
    assert confirmation.is_complete()
.github/workflows/e2e.ymlname: E2E Tests

on: [push, pull_request]

jobs:
  e2e:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        browser: [chrome, firefox]
        shard: [1, 2, 3]
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with: { python-version: '3.12' }
      - run: pip install -e ".[dev]"
      - run: pytest --browser=${{ matrix.browser }} --headless
        env: { PYTEST_SHARD: ${{ matrix.shard }}/3 }

##Plug into GitHub Actions in under an hour

Where Selenium Pro Python sits next to pip-installing Selenium yourself, other paid kits, and the Cypress / Playwright alternatives.

// vs. pip install selenium

pip install gives you the WebDriver client and nothing else. This kit gives you the entire production framework AND the CI pipeline AND 105 passing UI, API, database, and framework tests. You start at week 4, not day 1.

// vs. other paid kits ($200-$500)

Same scope as paid kits priced 2-5x higher. No subscription, no per-seat pricing, no vendor lock-in. One-time $995, lifetime access, instant download.

// vs. Cypress / Playwright

Pick Selenium if your team is already on Selenium, if you need the W3C WebDriver standard, or if your shop is Python-first and pytest is the test runner. Cypress Pro and Playwright Pro exist as sibling kits if your tooling points the other way.

// make the build-or-buy decision

##Is Selenium Pro (Python) the right investment for your team?

Buy the kit when the reusable engineering foundation is the work you need to avoid. Keep building internally when the framework itself is your team’s product or learning goal.

Good fit

  • Your Python team uses pytest and needs Selenium's mature WebDriver ecosystem or continuity with an established browser suite.
  • You need a maintainable framework, CI patterns, reporting, data handling, and documentation—not another sample test.
  • You want engineers focused on product coverage instead of rebuilding framework plumbing.
  • You value readable source with no subscription, per-seat fee, or runtime vendor lock-in.

Probably not a fit

  • You need only a tutorial, a proof of concept, or a few disposable smoke tests.
  • Your organization requires a fully managed testing service rather than source code your team owns.
  • Your team cannot allocate time to connect any framework to its application, credentials, environments, and data.
  • You are buying primarily to learn how to design the foundation from scratch.

The conservative break-even

$995÷$50/hour20 hours

If the kit avoids about 20 engineering hours at a $50/hour loaded cost, it has paid for itself. That threshold excludes future maintenance, design review, CI debugging, documentation, and onboarding time.

Use your own loaded labor cost and expected setup time; this is a decision aid, not a promised saving.
// release and compatibility

##Know what you are buying—and what it runs on

Compatibility is stated against the current published package. Connect the kit to your own application, credentials, environments, and data after download.

Current verified release

Release identity
Release metadata unavailable
Published
Release metadata unavailable
Source revision
Release metadata unavailable
Package
Release metadata unavailable

Compatibility profile

Runtime / language
Python 3.11+; tested on 3.11 and 3.12
Framework
Selenium 4.x with pytest
Browsers
Selenium/WebDriver browser matrix
CI / operating systems
GitHub Actions on Ubuntu; framework supports Windows, macOS, and Linux

Updates and upgrades

Your dashboard retains access to the version delivered with your purchase. Reasonable bug-fix and compatibility updates may be released, but no perpetual update cadence or operation of every future third-party dependency is promised.

Before adopting

Compare the profile above with your organization’s pinned runtime, browser, CI, proxy, and security requirements. For an unlisted constraint, ask before checkout rather than discovering it during setup.

Ask a compatibility question →
// real-data module

##Test against your real data, not mocks

Drop in a connection string and pull random rows straight from your Postgres, MySQL, or MongoDB. Unicode names, apostrophes, NULLs, weird locales — all the production data that breaks mock-based tests gets exercised every run.

Drop-in. No fixtures to maintain.

  • One line to connect — Postgres, MySQL, or MongoDB
  • Random rows or filtered rows, with seeded reproducibility
  • Unicode + apostrophe + locale safety baked in
  • Identifier-injection guard on every table/column name
  • UI assertions that compare DOM text to the actual DB row
tests/test_checkout.pyfrom framework.services.real_data import real_data

db = real_data(kind="postgres", url=os.environ["DB_URL"])
db.connect()

# Pull a real customer with a real order from your DB
customer = db.get_random_rows(
    "customers",
    count=1,
    where={"tier": {"op": "eq", "value": "enterprise"}},
    seed="checkout-fixture-1",  # reproducible across runs
)[0]

driver.get(f"/account/{customer['id']}")
assert driver.find_element(By.CSS_SELECTOR, "[data-test=name]").text    == customer["name"]
assert driver.find_element(By.CSS_SELECTOR, "[data-test=email]").text   == customer["email"]
assert driver.find_element(By.CSS_SELECTOR, "[data-test=country]").text == customer["country"]

Verified in CI every release

Every release runs the kit's full test suite against ephemeral Postgres, MySQL, and MongoDB containers in GitHub Actions. The proof image just below this section is the actual terminal output of that run — no edits, no rebuilds.

  • 30 round-trip tests against live DBs (10 per adapter)
  • Unicode round-trip: Müller, 山田, García, Lefèvre
  • Apostrophe round-trip: O'Hara
  • SQL identifier-injection guard test suite
  • Seeded reproducibility — same seed = same row, every run

See the proof image below ↓

##Proof it works

Reproducible Python 3.12 + Selenium 4 validation against saucedemo.com. Current approved CI evidence is shown when available; otherwise the dated archival capture remains clearly labeled.

Last updated . Archived terminal capture; use the approved CI result above when present.

##Questions QA engineers ask

Does it require a paid Selenium grid?

No. The kit ships with pure GitHub Actions parallel sharding via pytest-xdist — no Selenium Grid, Sauce Labs, or BrowserStack subscription required. The docs/CI_CD.md guide covers how to add a remote grid when you are ready.

What version of Selenium does this target?

Selenium 4.x. Selenium Manager (built into Selenium 4.6+) handles driver downloads automatically — no chromedriver/geckodriver pinning, ever.

How does it handle stale element references?

The retry_on_exception decorator (and its pre-configured retry_stale variant) re-runs the locator lookup on StaleElementReferenceException, not the dead reference. The full pattern is documented in docs/WAITS_AND_FLAKE.md.

Can I use this with Django, Flask, or FastAPI test setups?

Yes. The framework is application-agnostic — point the --base-url CLI option at your local dev server and the same suite runs against it.

Does it work on macOS, Windows, and Linux?

Yes. CI matrix runs on Ubuntu; the framework itself runs on all three OSes. macOS Apple Silicon supported.

Is this beginner-friendly?

Yes. The 15 KB README walks through every step, from pip install to your first passing test. docs/PAGE_OBJECT_PATTERN.md and docs/WAITS_AND_FLAKE.md then teach you the framework patterns so you can extend it.

Why Selenium instead of Playwright?

Selenium 4 is the W3C WebDriver standard. Pick this kit if your team is already on Selenium, if you need cross-browser coverage across the full browser matrix (Safari, IE-equivalents), or if your shop is Python-first and pytest is the test runner.

What Python version does it require?

Python 3.11+. Tested on 3.11 and 3.12. Uses modern type hints and pyproject.toml — no requirements.txt, no legacy setup.py.

Is there support?

Yes. Email support for setup questions and reproducible product defects is included with purchase. Response times vary with request volume; the contact form is also available for pre-sales questions.

// free sample

##See the architecture before you buy

An 11-page PDF walking through every directory, every pattern, and the exact flow from npx playwright test down to the system under test.

No spam. One-click unsubscribe.

Buy the Kit — $995 →
// instant download · production-ready · all sales final (it’s code)