Skip to main content

A zero-boilerplate Selenium WebDriver fixture for pytest

Project description

pytest-selenium-driver

PyPI version Python versions License: MIT

A zero-boilerplate Selenium WebDriver fixture for pytest with support for multiple browsers, headless mode, and both local and remote execution.

Features

  • Zero setup - Works out of the box with Selenium Manager
  • Multi-browser - Chrome, Firefox, and Edge support
  • Headless mode - Perfect for CI/CD pipelines
  • Remote execution - Selenium Grid compatibility
  • Parallel testing - pytest-xdist integration
  • Thread-safe - Isolated WebDriver instances
  • Type hints - Full typing support
  • Comprehensive logging - Debug-friendly output

Quick Start

Installation

pip install pytest-selenium-driver

Basic Usage

The plugin automatically registers with pytest and provides a driver fixture:

def test_example(driver):
    driver.get("https://example.com")
    assert "Example" in driver.title

def test_form_submission(driver):
    driver.get("https://httpbin.org/forms/post")
    driver.find_element("name", "custname").send_keys("John Doe")
    driver.find_element("css selector", "input[type='submit']").click()
    assert "John Doe" in driver.page_source

Command Line Options

Option Description Default
--browser Browser to use (chrome, firefox, edge) chrome
--headless Run browser in headless mode False
--remote Use remote WebDriver execution False
--grid-url Selenium Grid URL for remote execution None

Usage Examples

Local Testing

# Run tests with Chrome (default)
pytest

# Run tests with Firefox
pytest --browser=firefox

# Run tests with Edge (Chromium-based)
pytest --browser=edge

# Run in headless mode (great for CI)
pytest --browser=chrome --headless

Remote Testing (Selenium Grid)

# Run tests on remote Selenium Grid
pytest --remote --grid-url=http://selenium-grid:4444/wd/hub

# Remote with specific browser and headless mode
pytest --remote --grid-url=http://selenium-grid:4444/wd/hub --browser=firefox --headless

Parallel Testing

# Run tests in parallel (requires pytest-xdist)
pip install pytest-xdist
pytest -n 4 --browser=chrome --headless

Integration with Other Plugins

# Generate HTML reports with pytest-html
pytest --browser=firefox --html=report.html

# Run with coverage
pytest --browser=chrome --headless --cov=myapp

Advanced Configuration

Custom Fixture Scopes

# Function-scoped (default) - fresh driver for each test
def test_with_function_driver(driver):
    pass

# Class-scoped - shared driver across test class
def test_with_class_driver(class_scoped_driver):
    pass

# Session-scoped - shared driver across entire test session
def test_with_session_driver(session_scoped_driver):
    pass

Extending with Custom Arguments

Create a conftest.py to add custom CLI arguments:

def pytest_addoption(parser):
    group = parser.getgroup("selenium-driver")
    group.addoption("--timeout", type=int, default=10, 
                   help="Default timeout for WebDriver waits")

@pytest.fixture
def wait(request, driver):
    from selenium.webdriver.support.ui import WebDriverWait
    timeout = request.config.getoption("--timeout")
    return WebDriverWait(driver, timeout)

Requirements

  • Python 3.8+
  • pytest 7.0+
  • selenium 4.6+

Note: Browser drivers are automatically managed by Selenium Manager (no manual setup required!)

Contributing

Contributions are welcome! Please see CONTRIBUTING.md for development setup and guidelines.

CI PyPI version

License

This project is licensed under the MIT License - see the LICENSE file for details.

Author

Shubham Singh - shubham.fps@gmail.com

Acknowledgments

  • Built on top of the excellent Selenium project
  • Inspired by the pytest testing framework
  • Thanks to the Python testing community

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pytest_selenium_driver-0.2.0.tar.gz (18.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pytest_selenium_driver-0.2.0-py3-none-any.whl (16.1 kB view details)

Uploaded Python 3

File details

Details for the file pytest_selenium_driver-0.2.0.tar.gz.

File metadata

  • Download URL: pytest_selenium_driver-0.2.0.tar.gz
  • Upload date:
  • Size: 18.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.14

File hashes

Hashes for pytest_selenium_driver-0.2.0.tar.gz
Algorithm Hash digest
SHA256 5a39802286e818fbfbadf66b7896fba61f5daa9d4ae3cc509b52b792fb83707e
MD5 98b8f8a00578d788373d82f3d11d47d1
BLAKE2b-256 c40cb1a51264fc4889fe3f6882a55e645391685792c057ee6c31cf5a0898033d

See more details on using hashes here.

File details

Details for the file pytest_selenium_driver-0.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for pytest_selenium_driver-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d0d2c1c357ec83676db1d980ea16f7029ae954dc190f2b7d138b443a2783223c
MD5 01203b60f0a0aa8a64105f6e6680f5ee
BLAKE2b-256 bf5d276ce8a38bccb23f706a915da0d65aa019aa2577ad01242d998b438761a9

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page