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
Markdown
# ๐ง Playwright Advanced ML Self-Healer
[](https://www.npmjs.com/package/playwright-advanced-ml-healer)
[](https://opensource.org/licenses/MIT)
[](https://www.typescriptlang.org/)
[](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*