Skip to main content

Automatic Selenium selector correction using AI when elements fail to be found

Project description

Selenium Selector AutoCorrect

A Python package that automatically corrects Selenium element selectors using AI when they fail, reducing test maintenance and improving test reliability.

Features

  • Automatic Selector Correction: When a WebDriverWait times out, the package uses AI to analyze the page and suggest working alternatives
  • Local AI Integration: Uses a local AI service with OpenAI-compatible API
  • Correction Tracking: Records all corrections with source file and line information
  • Optional Auto-Update: Can automatically update test files with corrected selectors
  • Zero Code Changes: Works by hooking into Selenium's WebDriverWait

Installation

pip install selenium-selector-autocorrect

Quick Start

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium_selector_autocorrect import install_auto_correct_hook

install_auto_correct_hook()

driver = webdriver.Chrome()
driver.get("https://example.com")

element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "some-element"))
)

AI Service Setup

This package requires a local AI service with an OpenAI-compatible API. We recommend using VS Code Copilot as Service, which exposes GitHub Copilot through a local HTTP server.

Installing VS Code Copilot as Service

  1. Install from VS Code Marketplace or run:

    code --install-extension MartyZhou.vscode-copilot-as-service
    
  2. The extension automatically starts a server on http://localhost:8765

  3. Requires an active GitHub Copilot subscription

Configuration

Configure via environment variables:

  • LOCAL_AI_API_URL: URL of local AI service (default: http://localhost:8765)
  • SELENIUM_AUTO_CORRECT: Enable/disable auto-correction (default: "1")
  • SELENIUM_SUGGEST_BETTER: Suggest better selectors for found elements (default: "0")
  • SELENIUM_AUTO_UPDATE_TESTS: Auto-update test files with corrections (default: "0")

Example

import os

os.environ['LOCAL_AI_API_URL'] = 'http://localhost:8765'
os.environ['SELENIUM_AUTO_CORRECT'] = '1'
os.environ['SELENIUM_AUTO_UPDATE_TESTS'] = '1'  # Enable auto-update

Usage

Basic Usage

from selenium_selector_autocorrect import install_auto_correct_hook

install_auto_correct_hook()

Advanced Usage

from selenium_selector_autocorrect import (
    install_auto_correct_hook,
    get_auto_correct,
    get_correction_tracker,
    export_corrections_report
)

install_auto_correct_hook()

auto_correct = get_auto_correct()
auto_correct.enabled = True
auto_correct.suggest_better_selectors = False

# Export corrections report at end of test run
tracker = get_correction_tracker()
export_corrections_report("corrections_report.json")
tracker = get_correction_tracker()
export_corrections_report("corrections_report.json")

print(f"Total corrections: {len(tracker.get_corrections())}")
print(f"Successful corrections: {len(tracker.get_successful_corrections())}")

Custom AI Provider

from selenium_selector_autocorrect import AIProvider, configure_provider

class CustomAIProvider(AIProvider):
    def is_available(self) -> bool:
        return True
    
    def suggest_selector(self, system_prompt: str, user_prompt: str):))

How It Works

  1. Hook Installation: Patches WebDriverWait.until() to add auto-correction
  2. Timeout Detection: When a selector times out, the original exception is caught
  3. Page Analysis: JavaScript extracts visible elements and their attributes
  4. AI Suggestion: Sends page context to AI provider for selector suggestion
  5. Verification: Tests the suggested selector
  6. Success Handling: If successful, records the correction and optionally updates the test file
  7. Fallback: If correction fails, raises the original TimeoutException

AI Provider Setup

Local AI Service

The package requires a local AI service with OpenAI-compatible API:

POST http://localhost:8765/v1/chat/completions

For file auto-updates:

POST http://localhost:8765/v1/workspace/files/read
POST http://localhost:8765/v1/workspace/files/edit
## Correction Reports

Export correction reports in JSON format:

```python
from selenium_selector_autocorrect import export_corrections_report

export_corrections_report("corrections_report.json")

Report format:

{
  "corrections": [
    {
      "original_by": "id",
      "original_value": "old-selector",
      "corrected_by": "css selector",
      "corrected_value": ".new-selector",
      "success": true,
      "test_file": "/path/to/test.py",
      "test_line": 42,
      "timestamp": "2024-01-31T10:30:00"
    }
  ],
  "summary": {
    "total": 10,
    "successful": 8,
    "generated_at": "2024-01-31T10:35:00"
  }
}

Best Practices

  1. Install Once: Call install_auto_correct_hook() once at test suite startup (e.g., in conftest.py)
  2. Review Corrections: Regularly review correction reports to identify brittle selectors
  3. Update Tests: Use auto-update sparingly and review changes before committing
  4. Monitor AI Service: Ensure your AI service is running and responsive
  5. Use Strong Selectors: The tool helps with failures but writing robust selectors is still preferred

Requirements

  • Python >= 3.8
  • selenium >= 4.0.0
  • requests >= 2.25.0

License

MITInstall hook once at test suite startup (e.g., in conftest.py) 2. Review correction reports regularly to identify brittle selectors 3. Use auto-update sparingly and review changes before committing 4. Ensure your AI service is running and responsive 5. Write robust selectors - the tool helps with failures but prevention is better

When contributing:

  1. Follow PEP 8 style guidelines
  2. Add tests for new features
  3. Update documentation
  4. No emojis in code or documentation

Troubleshooting

AI Service Not Available

Contributions are welcome! Please:

  1. Follow PEP 8 style guidelines
  2. Add tests for new features
  3. Update documentation
  4. Maintain consistency with existing code

Possible causes:

  • SELENIUM_AUTO_UPDATE_TESTS not set to "1"
  • Test file path not detected correctly
  • Selector string not found in source file (check quotes)

No Corrections Happening

Solution: Ensure your local AI service is running on the configured port.

Test File Not Updated

Possible causes:

  • SELENIUM_AUTO_UPDATE_TESTS not set to "1"
  • Test file path not detected correctly
  • Selector string not found in source file

No Corrections Happening

Check:

  1. Hook is installed - look for log message
  2. AI service is available - check get_auto_correct().is_service_available()
  3. Auto-correct is enabled - c See CHANGELOG.md for version history and changes.

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

selenium_selector_autocorrect-0.1.1.tar.gz (16.7 kB view details)

Uploaded Source

Built Distribution

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

selenium_selector_autocorrect-0.1.1-py3-none-any.whl (15.6 kB view details)

Uploaded Python 3

File details

Details for the file selenium_selector_autocorrect-0.1.1.tar.gz.

File metadata

File hashes

Hashes for selenium_selector_autocorrect-0.1.1.tar.gz
Algorithm Hash digest
SHA256 5c50469de5e5604448775fa13f1b3ee6216bfd0751197e19bbbae53ec1e1cec0
MD5 4ec08e5c41ccaf607e30bb00ab88c74b
BLAKE2b-256 e25c17bbd34d292fb4fdfae7e2cf6eca255210caa2f22dc55059a2fa7c8ac7b9

See more details on using hashes here.

File details

Details for the file selenium_selector_autocorrect-0.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for selenium_selector_autocorrect-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 0c377b54bbeb5ac53480823c9a0efd257e512ba99a5ea42f305a64cda944048c
MD5 0695c354aa7b45923cec54b8e2662ea9
BLAKE2b-256 b57ad2bf814813213f6b8978c17d58afdf44d6b4cf4212fe9de6926729ce9028

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