Bird
Raised Fist0
Selenium Pythontesting~8 mins

Running Selenium in CI pipeline in Selenium Python - Framework Patterns

Choose your learning style10 modes available
Framework Mode - Running Selenium in CI pipeline
Folder Structure
selenium-python-project/
├── tests/
│   ├── test_login.py
│   ├── test_checkout.py
│   └── __init__.py
├── pages/
│   ├── login_page.py
│   ├── checkout_page.py
│   └── __init__.py
├── utils/
│   ├── driver_factory.py
│   ├── config.py
│   └── __init__.py
├── reports/
│   └── (test reports generated here)
├── requirements.txt
├── pytest.ini
├── conftest.py
└── .github/
    └── workflows/
        └── ci.yml
  
Test Framework Layers
  • Driver Layer: utils/driver_factory.py creates and manages Selenium WebDriver instances, supporting different browsers and headless mode for CI.
  • Page Objects: pages/ contains classes representing web pages with methods to interact with page elements.
  • Tests: tests/ holds test scripts using pytest that call page objects and assert expected behavior.
  • Utilities: utils/config.py manages environment variables and test settings; conftest.py defines pytest fixtures for setup and teardown.
  • Configuration: pytest.ini configures pytest options; requirements.txt lists dependencies.
  • CI Pipeline: .github/workflows/ci.yml defines GitHub Actions workflow to run tests on push or pull requests.
Configuration Patterns
  • Environment Variables: Use environment variables to set browser type, headless mode, and URLs to avoid hardcoding.
  • Driver Factory: Centralize WebDriver creation to switch browsers easily and enable headless mode for CI.
  • pytest.ini: Configure test markers, add options like verbosity, and specify test paths.
  • Secrets Management: Store sensitive data like credentials securely in CI environment variables, not in code.
  • CI Workflow: Define jobs to install dependencies, run tests with pytest, and collect reports.
Test Reporting and CI/CD Integration
  • Test Reports: Generate JUnit XML or HTML reports using pytest plugins for easy viewing and integration.
  • CI Integration: GitHub Actions workflow runs tests on code push or pull request, providing pass/fail status in PR checks.
  • Artifacts: Save test reports and screenshots as build artifacts for later review.
  • Notifications: Configure notifications (email, Slack) on test failures to alert the team quickly.
Best Practices
  • Use Headless Browsers in CI: Run tests in headless mode to save resources and speed up execution.
  • Isolate Tests: Ensure tests can run independently and clean up after themselves to avoid flaky results.
  • Centralize Configuration: Manage environment settings and driver options in one place for easy updates.
  • Use Explicit Waits: Avoid flaky tests by waiting for elements properly instead of fixed delays.
  • Keep Tests Fast and Focused: Run only essential UI tests in CI to keep feedback quick; use other tests for broader coverage.
Self Check

Where in this folder structure would you add a new page object for the "User Profile" page?

Key Result
Organize Selenium tests with clear layers and use CI pipelines to run headless browser tests automatically.

Practice

(1/5)
1. Why is it important to run Selenium tests in a CI pipeline?
easy
A. To slow down the deployment process
B. To automatically catch bugs early during development
C. To manually check the UI after deployment
D. To avoid writing test scripts

Solution

  1. Step 1: Understand the purpose of CI pipelines

    CI pipelines automate testing and building to catch issues early.
  2. Step 2: Relate Selenium tests to CI benefits

    Running Selenium tests in CI helps find UI bugs automatically before release.
  3. Final Answer:

    To automatically catch bugs early during development -> Option B
  4. Quick Check:

    CI + Selenium = Early bug detection [OK]
Hint: CI runs tests automatically to catch bugs early [OK]
Common Mistakes:
  • Thinking CI slows deployment
  • Believing tests run manually in CI
  • Ignoring automated testing benefits
2. Which of the following is the correct way to run Chrome in headless mode in Selenium Python?
easy
A. options.add_argument('--headless')
B. options.set_headless(True)
C. driver.headless = True
D. driver.set_option('headless')

Solution

  1. Step 1: Recall Selenium ChromeOptions usage

    To run Chrome headless, add the argument '--headless' to options.
  2. Step 2: Verify correct syntax

    Using options.add_argument('--headless') is the correct method in Selenium Python.
  3. Final Answer:

    options.add_argument('--headless') -> Option A
  4. Quick Check:

    Headless Chrome = add_argument('--headless') [OK]
Hint: Use add_argument('--headless') to enable headless mode [OK]
Common Mistakes:
  • Using non-existent methods like set_headless
  • Trying to set driver.headless directly
  • Confusing driver and options methods
3. What will be the output when running this Selenium Python snippet in a CI environment without a display server?
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument('--headless')
driver = webdriver.Chrome(options=options)
driver.get('https://example.com')
print(driver.title)
driver.quit()
medium
A. Prints 'ChromeDriver not found' error
B. Throws an error about missing display server
C. Prints an empty string
D. Prints the page title 'Example Domain'

Solution

  1. Step 1: Understand headless mode effect

    Headless mode allows Chrome to run without a display server in CI.
  2. Step 2: Analyze code behavior

    The code opens example.com headlessly and prints the page title successfully.
  3. Final Answer:

    Prints the page title 'Example Domain' -> Option D
  4. Quick Check:

    Headless mode avoids display errors, prints title [OK]
Hint: Headless mode avoids display errors, so title prints [OK]
Common Mistakes:
  • Assuming display server is always needed
  • Expecting empty output without display
  • Confusing driver errors with headless mode
4. You added Selenium tests to your CI pipeline but they fail with the error: selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in PATH. How do you fix this?
medium
A. Install ChromeDriver and add it to the system PATH in the CI environment
B. Remove the ChromeDriver and use Firefox instead
C. Run tests without specifying any driver
D. Disable headless mode in Chrome options

Solution

  1. Step 1: Understand the error message

    The error says ChromeDriver is missing or not found in PATH.
  2. Step 2: Fix by installing ChromeDriver in CI

    Install ChromeDriver and ensure its location is in the PATH environment variable.
  3. Final Answer:

    Install ChromeDriver and add it to the system PATH in the CI environment -> Option A
  4. Quick Check:

    Driver missing error = install and add to PATH [OK]
Hint: Add ChromeDriver to PATH in CI to fix driver not found [OK]
Common Mistakes:
  • Ignoring driver installation
  • Switching browsers without fixing driver
  • Disabling headless mode unrelated to driver error
5. You want to run Selenium tests in a CI pipeline using Docker. Which setup ensures tests run headlessly and ChromeDriver is available inside the container?
hard
A. Run Selenium tests on host machine, not inside Docker
B. Use a plain Python image and install ChromeDriver only, no Chrome needed
C. Use a Docker image with Chrome and ChromeDriver installed, run Chrome with '--headless' option in Selenium
D. Use Firefox without headless mode inside Docker container

Solution

  1. Step 1: Identify requirements for Selenium in Docker

    Tests need both Chrome browser and ChromeDriver installed inside the container.
  2. Step 2: Choose correct Docker setup

    A Docker image with Chrome and ChromeDriver pre-installed and running Chrome headless is best practice.
  3. Final Answer:

    Use a Docker image with Chrome and ChromeDriver installed, run Chrome with '--headless' option in Selenium -> Option C
  4. Quick Check:

    Docker Selenium needs browser + driver + headless [OK]
Hint: Docker needs both Chrome and ChromeDriver installed [OK]
Common Mistakes:
  • Installing driver without browser
  • Running tests outside Docker when container needed
  • Using non-headless mode in CI Docker
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard