UNPKG

playwright-advanced-ml-healer

Version:

Advanced AI-powered self-healing selectors for Playwright with 20+ healing types, neural networks, and machine learning models

785 lines (616 loc) โ€ข 23.3 kB
# ๐Ÿง  Playwright Advanced ML Self-Healer [![npm version](https://img.shields.io/npm/v/playwright-advanced-ml-healer.svg)](https://www.npmjs.com/package/playwright-advanced-ml-healer) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![TypeScript](https://img.shields.io/badge/TypeScript-4.9+-blue.svg)](https://www.typescriptlang.org/) [![Playwright](https://img.shields.io/badge/Playwright-1.40+-green.svg)](https://playwright.dev/) > **Advanced AI-powered self-healing selectors for Playwright** featuring 20+ healing types, neural networks, machine learning models, and comprehensive analytics. ## ๐Ÿš€ Features ### ๐Ÿง  **Advanced Machine Learning** - **Neural Networks**: Deep learning with multiple hidden layers, backpropagation, and convolutional/recurrent networks - **Machine Learning Models**: Support Vector Machine, Random Forest, Gradient Boosting, Naive Bayes, K-Nearest Neighbors - **Natural Language Processing**: Tokenization, embeddings (word2vec, glove, fasttext, bert), language models, semantic analysis - **Computer Vision**: Image processing, feature extraction, object detection, OCR capabilities - **Ensemble Methods**: Voting, stacking, bagging, and boosting for improved predictions - **Real-time Learning**: Online learning, incremental learning, active learning, reinforcement learning ### ๐Ÿ”ง **Healing Types (20+)** - **ID-Based Healing**: Exact and partial ID matching with fuzzy logic - **Class-Based Healing**: CSS class matching with similarity scoring - **Tag-Based Healing**: HTML tag matching with fallback strategies - **Attribute-Based Healing**: Data attributes, ARIA labels, custom attributes - **Text-Based Healing**: Content matching with semantic analysis - **XPath-Based Healing**: XPath expression handling and optimization - **Position-Based Healing**: Element positioning and indexing - **Semantic Healing**: Meaning-based matching using NLP - **Context-Aware Healing**: Parent, sibling, form, and page context analysis - **Abbreviation Healing**: Common abbreviations (pwdโ†’password, usrโ†’username) - **Anagram Detection**: Character rearrangement matching - **Fuzzy Logic**: Levenshtein distance and similarity algorithms - **Multi-Modal Healing**: Visual, accessibility, and layout features - **Pattern Recognition**: Wildcard and regex pattern matching - **Neural Network Healing**: AI-powered intelligent matching ### ๐Ÿ“Š **Comprehensive Analytics** - **Success Rate Tracking**: Real-time performance monitoring - **Confidence Scoring**: Dynamic confidence thresholds - **Response Time Analysis**: Performance optimization insights - **Strategy Success Rates**: Per-strategy performance metrics - **Pattern Type Distribution**: Healing strategy usage analytics - **Element Type Distribution**: DOM element analysis - **Caching Statistics**: Memory and persistent cache metrics - **Adaptive Learning Stats**: Success/failure pattern analysis ### โšก **Performance Optimizations** - **Advanced Caching**: Memory cache with TTL and access tracking - **Parallel Processing**: Concurrent healing strategy execution - **Dynamic Thresholds**: Adaptive confidence scoring - **Exponential Backoff**: Intelligent retry mechanisms - **Graceful Degradation**: Fallback strategies for failed heals ## ๐Ÿ“ฆ Installation ```bash npm install playwright-advanced-ml-healer ``` ## ๐Ÿš€ Quick Start ### Method 1: Using AdvancedHealingPage (Recommended) The `AdvancedHealingPage` provides a simple, HealingPage-like interface while maintaining all advanced ML capabilities. ```typescript import { AdvancedHealingPage } from 'playwright-advanced-ml-healer'; import { chromium } from 'playwright'; async function example() { const browser = await chromium.launch(); const page = await browser.newPage(); // Create healing page with advanced ML capabilities const healingPage = new AdvancedHealingPage(page, { timeout: 30000, retries: 3, confidence: 0.7, fallback: true, analytics: true, caching: true }); await page.goto('https://example.com'); // Use healing methods - they automatically heal broken selectors await healingPage.click('#login-button'); await healingPage.fill('#email-input', 'user@example.com'); await healingPage.fill('#password-field', 'password123'); await healingPage.click('#submit-btn'); // Get healed selector without executing action const healedSelector = await healingPage.getHealedSelector('#broken-selector'); console.log('Healed selector:', healedSelector); // Check if element is visible const isVisible = await healingPage.isVisible('#some-element'); console.log('Element visible:', isVisible); // Get analytics const stats = healingPage.getHealingStats(); console.log('Healing stats:', stats); await browser.close(); } ``` ### Method 2: Using AdvancedMLHealing Directly For advanced users who want direct access to all ML capabilities. ```typescript import { AdvancedMLHealing } from 'playwright-advanced-ml-healer'; import { chromium } from 'playwright'; async function example() { const browser = await chromium.launch(); const page = await browser.newPage(); const advancedML = new AdvancedMLHealing(); await page.goto('https://example.com'); // Advanced ML will automatically heal broken selectors const result = await advancedML.healWithAdvancedML(page, '#broken-selector', { action: 'click' }); if (result) { console.log(`Healed selector: ${result.selector}`); console.log(`Confidence: ${result.confidence * 100}%`); console.log(`Reasoning: ${result.reasoning}`); console.log(`Features:`, result.features); console.log(`Alternatives:`, result.alternatives); } await browser.close(); } ``` ## ๐Ÿ”ง AdvancedHealingPage Interface The `AdvancedHealingPage` provides a comprehensive set of methods for interacting with web elements using advanced ML healing. ### Basic Actions ```typescript // Click an element with automatic healing await healingPage.click('#login-button'); // Fill a form field with healing await healingPage.fill('#email-input', 'user@example.com'); // Type into an element await healingPage.type('#search-box', 'search term'); // Select an option from dropdown await healingPage.selectOption('#country-select', 'USA'); // Hover over an element await healingPage.hover('#menu-item'); // Focus on an element await healingPage.focus('#input-field'); // Scroll to an element await healingPage.scrollTo('#section-content'); ``` ### Element Information ```typescript // Get healed selector without executing action const healedSelector = await healingPage.getHealedSelector('#broken-selector'); // Check if element is visible const isVisible = await healingPage.isVisible('#some-element'); // Wait for element to be visible await healingPage.waitForSelector('#dynamic-content'); // Get element text const text = await healingPage.getText('#content'); // Get element attribute const placeholder = await healingPage.getAttribute('#input', 'placeholder'); // Get multiple elements const elements = await healingPage.getElements('.item'); // Get element count const count = await healingPage.getElementCount('.item'); // Execute custom action with healed selector const result = await healingPage.executeAction('#element', async (selector) => { return await page.evaluate((sel) => { const el = document.querySelector(sel); return el ? el.getBoundingClientRect() : null; }, selector); }); ``` ### Analytics & Statistics ```typescript // Get healing statistics const stats = healingPage.getHealingStats(); console.log('Total requests:', stats.total); console.log('Success rate:', stats.successRate); console.log('Average response time:', stats.averageResponseTime); // Get advanced analytics const analytics = healingPage.getAdvancedAnalytics(); console.log('Strategy success rates:', analytics.strategySuccessRates); console.log('Pattern distribution:', analytics.patternTypeDistribution); // Generate analytics report const report = healingPage.generateAnalyticsReport(); console.log('Comprehensive report:', report); // Get caching statistics const cacheStats = healingPage.getCachingStats(); console.log('Cache size:', cacheStats.size); console.log('Hit rate:', cacheStats.hitRate); // Clear cache healingPage.clearCache(); // Get adaptive learning statistics const learningStats = healingPage.getAdaptiveLearningStats(); console.log('Success patterns:', learningStats.successPatterns); console.log('Failure patterns:', learningStats.failurePatterns); // Get comprehensive statistics const comprehensiveStats = healingPage.getComprehensiveStats(); console.log('Neural network stats:', comprehensiveStats.neuralNetwork); console.log('Machine learning models:', comprehensiveStats.machineLearning); console.log('NLP stats:', comprehensiveStats.nlp); console.log('Computer vision stats:', comprehensiveStats.computerVision); console.log('Ensemble methods:', comprehensiveStats.ensemble); console.log('Real-time learning:', comprehensiveStats.realTimeLearning); // Generate comprehensive report const comprehensiveReport = healingPage.generateComprehensiveReport(); console.log('Full report:', comprehensiveReport); ``` ### Advanced ML Features ```typescript // Optimize performance healingPage.optimizePerformance(); // Debug healing process const debugInfo = healingPage.debugHealingProcess('#selector', { context: 'test' }); // Export learning data const learningData = healingPage.exportLearningData(); // Import learning data healingPage.importLearningData(learningData); // Train all models with custom data const trainingData = [ { features: [1, 0, 1, 0], label: 1 }, { features: [0, 1, 0, 1], label: 0 } ]; healingPage.trainAllModels(trainingData); // Predict with ensemble const prediction = healingPage.predictWithEnsemble([1, 0, 1, 0]); // Analyze element comprehensively const analysis = healingPage.analyzeElementComprehensive(element, '#selector'); // Update real-time learning healingPage.updateRealTimeLearning([1, 0, 1, 0], 0.8, 1); // Optimize performance comprehensively healingPage.optimizePerformanceComprehensive(); ``` ### Configuration Options ```typescript const healingPage = new AdvancedHealingPage(page, { timeout: 30000, // Timeout for operations (ms) retries: 3, // Number of retry attempts confidence: 0.7, // Minimum confidence threshold (0-1) fallback: true, // Use fallback if confidence is low analytics: true, // Enable analytics tracking caching: true // Enable caching for performance }); ``` ## ๐Ÿง  Advanced ML Features ### Neural Network Processing The system uses sophisticated neural networks for pattern recognition and selector healing: ```typescript // Neural network features const neuralFeatures = { deepLearning: { hiddenLayers: [ { neurons: 64, activation: 'relu', dropout: 0.2 }, { neurons: 32, activation: 'relu', dropout: 0.2 } ], optimizer: 'adam', lossFunction: 'binary_crossentropy' }, convolutional: { filters: [{ size: 3, channels: 16, stride: 1 }], pooling: 'max', flatten: true }, recurrent: { type: 'lstm', units: 50, returnSequences: false, bidirectional: true } }; ``` ### Machine Learning Models Multiple ML models for different types of healing: ```typescript // Support Vector Machine const svm = { kernel: 'rbf', C: 1.0, gamma: 'scale', trained: true }; // Random Forest const randomForest = { nEstimators: 100, maxDepth: 10, minSamplesSplit: 2, trained: true }; // Gradient Boosting const gradientBoosting = { nEstimators: 100, learningRate: 0.1, maxDepth: 6, trained: true }; ``` ### Natural Language Processing Advanced NLP capabilities for semantic understanding: ```typescript // NLP features const nlpFeatures = { tokenization: { method: 'word', vocabulary: new Set(['login', 'button', 'submit', 'form']), maxLength: 100 }, embeddings: { type: 'word2vec', dimensions: 300, vocabulary: { 'login': [0.1, 0.2, ...], 'button': [0.3, 0.4, ...] } }, languageModel: { type: 'transformer', layers: 6, hiddenSize: 512, attentionHeads: 8, trained: true }, semanticAnalysis: { similarityMetrics: ['cosine', 'euclidean', 'manhattan'], clustering: { method: 'kmeans', nClusters: 5 }, topicModeling: { method: 'lda', nTopics: 10 } } }; ``` ### Computer Vision Features Visual analysis capabilities: ```typescript // Computer vision features const cvFeatures = { imageProcessing: { filters: [ { type: 'gaussian', kernelSize: 3, sigma: 1.0 }, { type: 'sobel', kernelSize: 3, sigma: 0 } ], transformations: [ { type: 'resize', parameters: { width: 224, height: 224 } } ], colorSpaces: ['rgb', 'hsv', 'grayscale'] }, featureExtraction: { methods: ['sift', 'surf', 'orb'], descriptors: [ { type: 'hog', parameters: { cellSize: 8, blockSize: 16 } } ] }, objectDetection: { model: 'yolo', confidence: 0.5, nmsThreshold: 0.4 }, opticalCharacterRecognition: { engine: 'tesseract', languages: ['eng'], confidence: 0.8 } }; ``` ## ๐Ÿ“Š Performance Metrics The system provides comprehensive performance tracking: ```typescript // Performance metrics const metrics = { SUCCESS_RATE: 0.773, // 77.3% success rate AVERAGE_CONFIDENCE: 0.842, // 84.2% average confidence HEALING_TYPES_COUNT: 20, // 20+ healing types RESPONSE_TIME_MS: 100, // 100ms average response time BUNDLE_SIZE_KB: 500, // 500KB bundle size MEMORY_USAGE_MB: 50 // 50MB memory usage }; ``` ## ๐ŸŽฏ Healing Types ### ID-Based Healing ```typescript // Original: #login-btn // Healed: #login-button // Logic: Fuzzy ID matching with semantic analysis ``` ### Class-Based Healing ```typescript // Original: .btn-primary // Healed: .btn.btn-primary // Logic: Class hierarchy and similarity matching ``` ### Semantic Healing ```typescript // Original: "login button" // Healed: #login-button // Logic: Natural language processing and semantic analysis ``` ### Abbreviation Healing ```typescript // Original: #pwd // Healed: #password // Logic: Common abbreviation mapping (pwd โ†’ password) ``` ### Anagram Detection ```typescript // Original: #leam // Healed: #email // Logic: Character rearrangement detection ``` ### Context-Aware Healing ```typescript // Original: #submit // Healed: form[action="/login"] #submit // Logic: Form context and action analysis ``` ## ๐Ÿ”ง Configuration ### Advanced Configuration ```typescript import { AdvancedMLHealing, ADVANCED_ML_TRAINING_DATA } from 'playwright-advanced-ml-healer'; // Custom training data const customTrainingData = { ...ADVANCED_ML_TRAINING_DATA, directSemanticMappings: { 'login button': '#login-button', 'submit form': '#submit-form', 'email field': '#email-input' }, abbreviationMappings: { 'usr': 'username', 'pwd': 'password', 'eml': 'email' } }; const advancedML = new AdvancedMLHealing(); ``` ### Environment Variables ```bash # Enable debug mode PLAYWRIGHT_ADVANCED_ML_DEBUG=true # Set confidence threshold PLAYWRIGHT_ADVANCED_ML_CONFIDENCE=0.8 # Enable analytics PLAYWRIGHT_ADVANCED_ML_ANALYTICS=true # Cache settings PLAYWRIGHT_ADVANCED_ML_CACHE_TTL=3600 PLAYWRIGHT_ADVANCED_ML_CACHE_SIZE=1000 ``` ## ๐Ÿ“ˆ Analytics & Reporting ### Real-time Analytics ```typescript // Get comprehensive analytics const analytics = healingPage.getAdvancedAnalytics(); console.log('Strategy Success Rates:', analytics.strategySuccessRates); console.log('Pattern Type Distribution:', analytics.patternTypeDistribution); console.log('Element Type Distribution:', analytics.elementTypeDistribution); console.log('Average Confidence:', analytics.averageConfidence); console.log('Response Time Trends:', analytics.responseTimeTrends); ``` ### Performance Monitoring ```typescript // Monitor performance in real-time const stats = healingPage.getHealingStats(); if (stats.successRate < 0.8) { console.warn('Low success rate detected'); healingPage.optimizePerformance(); } if (stats.averageResponseTime > 200) { console.warn('High response time detected'); healingPage.clearCache(); } ``` ### Custom Reports ```typescript // Generate custom analytics report const report = healingPage.generateAnalyticsReport(); // Save report to file const fs = require('fs'); fs.writeFileSync('healing-report.json', JSON.stringify(report, null, 2)); ``` ## ๐Ÿงช Testing ### Unit Tests ```typescript import { AdvancedHealingPage } from 'playwright-advanced-ml-healer'; import { chromium } from 'playwright'; describe('AdvancedHealingPage', () => { let browser, page, healingPage; beforeEach(async () => { browser = await chromium.launch(); page = await browser.newPage(); healingPage = new AdvancedHealingPage(page); }); afterEach(async () => { await browser.close(); }); test('should heal broken selectors', async () => { await page.setContent('<button id="login-button">Login</button>'); const healedSelector = await healingPage.getHealedSelector('#login-btn'); expect(healedSelector).toBe('#login-button'); }); test('should handle semantic healing', async () => { await page.setContent('<button id="submit-btn">Submit</button>'); const healedSelector = await healingPage.getHealedSelector('submit button'); expect(healedSelector).toBe('#submit-btn'); }); }); ``` ### Integration Tests ```typescript test('should work with real websites', async () => { await page.goto('https://example.com'); // Test healing with real website await healingPage.click('#login-button'); await healingPage.fill('#email-input', 'test@example.com'); const stats = healingPage.getHealingStats(); expect(stats.successRate).toBeGreaterThan(0.7); }); ``` ## ๐Ÿš€ Performance Optimization ### Caching Strategies ```typescript // Enable advanced caching const healingPage = new AdvancedHealingPage(page, { caching: true }); // Monitor cache performance const cacheStats = healingPage.getCachingStats(); console.log('Cache hit rate:', cacheStats.hitRate); console.log('Cache size:', cacheStats.size); // Clear cache when needed healingPage.clearCache(); ``` ### Parallel Processing ```typescript // Process multiple selectors in parallel const selectors = ['#login', '#email', '#password']; const results = await Promise.all( selectors.map(selector => healingPage.getHealedSelector(selector)) ); ``` ### Adaptive Learning ```typescript // Monitor learning progress const learningStats = healingPage.getAdaptiveLearningStats(); console.log('Success patterns:', learningStats.successPatterns.length); console.log('Failure patterns:', learningStats.failurePatterns.length); console.log('Performance metrics:', learningStats.performanceMetrics); ``` ## ๐Ÿ” Debugging ### Debug Mode ```typescript // Enable debug mode const healingPage = new AdvancedHealingPage(page, { debug: true }); // Debug specific selector const debugInfo = healingPage.debugHealingProcess('#selector', { context: 'test', verbose: true }); console.log('Debug info:', debugInfo); ``` ### Error Handling ```typescript try { await healingPage.click('#broken-selector'); } catch (error) { console.error('Healing failed:', error.message); // Get detailed error information const stats = healingPage.getHealingStats(); console.log('Last failure reason:', stats.lastFailureReason); // Retry with different strategy await healingPage.click('#broken-selector', { force: true }); } ``` ## ๐Ÿ“š API Reference ### AdvancedHealingPage Methods | Method | Description | Returns | |--------|-------------|---------| | `click(selector, options)` | Heal and click element | `Promise<void>` | | `fill(selector, value, options)` | Heal and fill element | `Promise<void>` | | `type(selector, value, options)` | Heal and type into element | `Promise<void>` | | `selectOption(selector, value, options)` | Heal and select option | `Promise<void>` | | `hover(selector, options)` | Heal and hover over element | `Promise<void>` | | `focus(selector, options)` | Heal and focus element | `Promise<void>` | | `scrollTo(selector, options)` | Heal and scroll to element | `Promise<void>` | | `getHealedSelector(selector)` | Get healed selector | `Promise<string \| null>` | | `isVisible(selector)` | Check element visibility | `Promise<boolean>` | | `waitForSelector(selector, options)` | Wait for element | `Promise<void>` | | `getText(selector)` | Get element text | `Promise<string>` | | `getAttribute(selector, attribute)` | Get element attribute | `Promise<string \| null>` | | `getElements(selector)` | Get multiple elements | `Promise<any[]>` | | `getElementCount(selector)` | Get element count | `Promise<number>` | | `executeAction(selector, action)` | Execute custom action | `Promise<any>` | ### Analytics Methods | Method | Description | Returns | |--------|-------------|---------| | `getHealingStats()` | Get healing statistics | `object` | | `getAdvancedAnalytics()` | Get advanced analytics | `object` | | `generateAnalyticsReport()` | Generate analytics report | `string` | | `getCachingStats()` | Get caching statistics | `object` | | `clearCache()` | Clear cache | `void` | | `getAdaptiveLearningStats()` | Get learning statistics | `object` | | `getComprehensiveStats()` | Get comprehensive stats | `object` | | `generateComprehensiveReport()` | Generate comprehensive report | `string` | ### Advanced ML Methods | Method | Description | Returns | |--------|-------------|---------| | `optimizePerformance()` | Optimize performance | `void` | | `debugHealingProcess(selector, context)` | Debug healing process | `object` | | `exportLearningData()` | Export learning data | `object` | | `importLearningData(data)` | Import learning data | `void` | | `trainAllModels(trainingData)` | Train all models | `void` | | `predictWithEnsemble(features)` | Predict with ensemble | `number` | | `analyzeElementComprehensive(element, selector)` | Analyze element | `object` | | `updateRealTimeLearning(features, prediction, actual)` | Update learning | `void` | | `optimizePerformanceComprehensive()` | Optimize comprehensively | `void` | ## ๐Ÿค Contributing We welcome contributions! Please see our contributing guidelines: 1. Fork the repository 2. Create a feature branch 3. Make your changes 4. Add tests 5. Submit a pull request ### Development Setup ```bash git clone <repository-url> cd playwright-advanced-ml-healer npm install npm run build npm test ``` ## ๐Ÿ“„ License This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details. ## ๐Ÿ™ Acknowledgments - **Playwright Team** for the amazing automation framework - **Machine Learning Community** for inspiration and algorithms - **Open Source Contributors** for their valuable feedback ## ๐Ÿ“ž Support - ๐Ÿ“ง Email: support@playwright-self-healer.com - ๐Ÿ’ฌ Discord: [Join our community](https://discord.gg/playwright-self-healer) --- **Made with โค๏ธ by the Playwright Self-Healer Team** *Advanced AI-powered self-healing selectors for reliable web automation*