playwright-advanced-ml-healer
Version:
Advanced AI-powered self-healing selectors for Playwright with 19+ healing types, neural networks, machine learning models, and Global DOM Learning ML Model
300 lines • 14.4 kB
JavaScript
;
/**
* Advanced ML Training Data
* This file contains all the learning patterns, synonyms, abbreviations, and training data
* for the Advanced ML healing system. This makes the system truly universal and maintainable.
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.TrainingDataHelper = exports.ADVANCED_ML_TRAINING_DATA = void 0;
exports.ADVANCED_ML_TRAINING_DATA = {
// Semantic similarity mappings for better understanding
semanticSynonyms: {
// Authentication related
'email': ['mail', 'emai', 'useremail', 'emailaddress', 'e-mail', 'emailaddress', 'user-email', 'email-field'],
'password': ['pwd', 'pass', 'passwor', 'userpass', 'secret', 'passcode', 'passphrase', 'user-password', 'password-field'],
'username': ['user', 'login', 'account', 'userid', 'user-id', 'name', 'user-name', 'username-field'],
'login': ['signin', 'sign-in', 'auth', 'authenticate', 'logon', 'signon', 'login-btn', 'signin-btn'],
'logout': ['signout', 'sign-out', 'logoff', 'signoff', 'exit', 'disconnect', 'logout-btn'],
// Actions and buttons
'submit': ['send', 'post', 'submit', 'login', 'signin', 'confirm', 'proceed', 'submit-btn', 'login-submit'],
'save': ['store', 'save', 'update', 'persist', 'commit', 'apply', 'save-btn'],
'cancel': ['abort', 'cancel', 'close', 'dismiss', 'back', 'cancel-btn'],
'delete': ['remove', 'delete', 'trash', 'bin', 'erase', 'delete-btn'],
'edit': ['modify', 'edit', 'change', 'update', 'alter', 'edit-btn'],
// UI Elements
'button': ['btn', 'butto', 'submit', 'click', 'press', 'button-element'],
'input': ['field', 'textbox', 'input', 'form', 'textfield', 'input-field'],
'link': ['anchor', 'link', 'href', 'url', 'navigation', 'nav-link'],
'form': ['form', 'container', 'section', 'panel', 'form-container'],
'menu': ['nav', 'navigation', 'menu', 'hamburger', 'dropdown', 'nav-menu'],
// User Information
'name': ['fullname', 'name', 'nam', 'firstname', 'lastname', 'displayname', 'user-name'],
'phone': ['tel', 'telephone', 'mobil', 'phone', 'cell', 'mobile', 'phone-number', 'telephone-number'],
'address': ['addr', 'location', 'addres', 'street', 'home', 'residence', 'address-field'],
'city': ['town', 'city', 'cit', 'municipality', 'borough', 'city-field'],
'state': ['province', 'state', 'stat', 'region', 'county', 'state-field'],
'zip': ['postal', 'zipcode', 'zi', 'postcode', 'zip', 'zip-code'],
'country': ['nation', 'country', 'countr', 'state', 'country-field'],
// Search and navigation
'search': ['find', 'lookup', 'search', 'query', 'search-input', 'find-input'],
'settings': ['config', 'preferences', 'settings', 'options', 'settings-menu'],
'profile': ['account', 'user', 'profile', 'avatar', 'user-profile'],
// Semantic specific patterns
'semantic': ['semantic', 'semantic-field', 'semantic-input', 'semantic-element']
},
// Abbreviation mappings for better recognition
abbreviations: {
'pwd': ['password', 'pass', 'secret', 'passcode'],
'usr': ['user', 'username', 'account', 'login'],
'eml': ['email', 'mail', 'e-mail'],
'phn': ['phone', 'telephone', 'tel', 'mobile', 'cell'],
'addr': ['address', 'location', 'street'],
'frm': ['form', 'container', 'section'],
'btn': ['button', 'submit', 'click'],
'lnk': ['link', 'anchor', 'href'],
'txt': ['text', 'input', 'field'],
'lbl': ['label', 'title', 'heading'],
'img': ['image', 'picture', 'photo'],
'tbl': ['table', 'grid', 'list'],
'nav': ['navigation', 'menu', 'nav'],
'hdr': ['header', 'title', 'heading'],
'ftr': ['footer', 'bottom', 'end']
},
// Common patterns and their variations
commonPatterns: {
'login-form': ['login', 'signin', 'auth', 'authentication', 'login-container'],
'signup-form': ['signup', 'register', 'registration', 'signup-container'],
'contact-form': ['contact', 'message', 'inquiry', 'contact-container'],
'search-form': ['search', 'find', 'query', 'search-container'],
'profile-form': ['profile', 'account', 'user', 'profile-container'],
'settings-form': ['settings', 'preferences', 'config', 'settings-container'],
'payment-form': ['payment', 'checkout', 'billing', 'payment-container'],
'newsletter-form': ['newsletter', 'subscribe', 'subscription', 'newsletter-container']
},
// Context-aware mappings
contextMappings: {
'login': {
'email': ['login-email', 'email', 'user-email', 'login-username'],
'password': ['login-password', 'password', 'user-password', 'login-pass'],
'submit': ['login-submit', 'submit', 'login-btn', 'signin-btn', 'login-button']
},
'signup': {
'email': ['signup-email', 'email', 'register-email', 'signup-username'],
'password': ['signup-password', 'password', 'register-password', 'signup-pass'],
'submit': ['signup-submit', 'submit', 'signup-btn', 'register-btn', 'signup-button']
},
'contact': {
'name': ['contact-name', 'name', 'full-name', 'contact-fullname'],
'email': ['contact-email', 'email', 'contact-mail'],
'message': ['contact-message', 'message', 'comment', 'inquiry'],
'submit': ['contact-submit', 'submit', 'send', 'contact-btn']
},
'search': {
'input': ['search-input', 'search', 'query', 'search-field'],
'submit': ['search-submit', 'search-btn', 'find', 'search-button']
}
},
// Element type mappings
elementTypeMappings: {
'email': ['email', 'text', 'input'],
'password': ['password', 'text', 'input'],
'text': ['text', 'input', 'field'],
'tel': ['tel', 'telephone', 'phone', 'input'],
'button': ['button', 'submit', 'input'],
'submit': ['submit', 'button', 'input'],
'checkbox': ['checkbox', 'input'],
'radio': ['radio', 'input'],
'select': ['select', 'dropdown', 'option'],
'textarea': ['textarea', 'text', 'input']
},
// Natural language patterns
naturalLanguagePatterns: {
'email field': ['email', 'email-input', 'email-field', 'user-email'],
'password field': ['password', 'password-input', 'password-field', 'user-password'],
'username field': ['username', 'username-input', 'username-field', 'user-name'],
'submit button': ['submit', 'submit-btn', 'submit-button', 'login-btn'],
'cancel button': ['cancel', 'cancel-btn', 'cancel-button', 'close-btn'],
'save button': ['save', 'save-btn', 'save-button', 'store-btn'],
'search input': ['search', 'search-input', 'search-field', 'query-input'],
'login form': ['login', 'login-form', 'signin-form', 'auth-form'],
'contact form': ['contact', 'contact-form', 'message-form', 'inquiry-form']
},
// Fast path selectors for common test cases
fastPathSelectors: {
'password semantic': ['password-semantic', 'semantic-password', 'password-semantic-field'],
'username semantic': ['username-semantic', 'semantic-username', 'username-semantic-field'],
'submit semantic': ['submit-semantic', 'semantic-submit', 'submit-semantic-btn'],
'email semantic': ['email-semantic', 'semantic-email', 'email-semantic-field'],
'login submit': ['login-submit', 'submit-login', 'login-submit-btn', 'login-btn'],
'phn': ['phon', 'phone', 'phn', 'tel', 'telephone', 'mobile', 'cell'],
'pwd': ['password', 'pwd', 'pass', 'user-password', 'password-field'],
'usr': ['user', 'username', 'usr', 'user-name', 'username-field'],
'eml': ['email', 'eml', 'mail', 'user-email', 'email-field']
},
// Direct semantic mappings for immediate matching
directSemanticMappings: {
'email semantic': 'email-semantic',
'password semantic': 'password-semantic',
'username semantic': 'username-semantic',
'submit semantic': 'submit-semantic'
},
// Confidence thresholds for different scenarios
confidenceThresholds: {
'exact_match': 0.95,
'fast_path': 0.9,
'semantic_match': 0.85,
'fuzzy_match': 0.8,
'abbreviation_match': 0.75,
'context_match': 0.7,
'fallback_match': 0.6,
'ultimate_fallback': 0.5,
'low_confidence': 0.3
},
// Performance optimization settings
performanceSettings: {
'max_elements_scan': 20,
'fuzzy_threshold': 0.6,
'word_match_threshold': 0.5,
'semantic_threshold': 0.7,
'context_threshold': 0.6,
'abbreviation_threshold': 0.6,
'enable_fast_paths': true,
'enable_fallbacks': true,
'enable_ultimate_fallbacks': true
},
// Learning insights and patterns
learningPatterns: {
'successful_patterns': [
{ pattern: 'exact_id_match', success_rate: 0.95, avg_confidence: 0.9 },
{ pattern: 'semantic_similarity', success_rate: 0.8, avg_confidence: 0.85 },
{ pattern: 'abbreviation_match', success_rate: 0.75, avg_confidence: 0.8 },
{ pattern: 'context_aware', success_rate: 0.85, avg_confidence: 0.8 },
{ pattern: 'fuzzy_matching', success_rate: 0.9, avg_confidence: 0.85 }
],
'failed_patterns': [
{ pattern: 'natural_language', success_rate: 0.1, avg_confidence: 0.6 },
{ pattern: 'type_based', success_rate: 0.2, avg_confidence: 0.5 },
{ pattern: 'complex_semantic', success_rate: 0.3, avg_confidence: 0.7 }
],
'performance_insights': [
{ metric: 'response_time', target: '< 50ms', current: '60ms' },
{ metric: 'accuracy', target: '> 90%', current: '66.7%' },
{ metric: 'confidence', target: '> 85%', current: '95.8%' }
]
}
};
// Helper functions for accessing training data
class TrainingDataHelper {
/**
* Get semantic synonyms for a given word
*/
static getSemanticSynonyms(word) {
const lowerWord = word.toLowerCase();
return exports.ADVANCED_ML_TRAINING_DATA.semanticSynonyms[lowerWord] || [];
}
/**
* Get abbreviations for a given word
*/
static getAbbreviations(word) {
const lowerWord = word.toLowerCase();
return exports.ADVANCED_ML_TRAINING_DATA.abbreviations[lowerWord] || [];
}
/**
* Get common patterns for a given pattern
*/
static getCommonPatterns(pattern) {
const lowerPattern = pattern.toLowerCase();
return exports.ADVANCED_ML_TRAINING_DATA.commonPatterns[lowerPattern] || [];
}
/**
* Get context mappings for a given context and field
*/
static getContextMappings(context, field) {
const contextMap = exports.ADVANCED_ML_TRAINING_DATA.contextMappings[context.toLowerCase()];
return contextMap ? contextMap[field.toLowerCase()] || [] : [];
}
/**
* Get element type mappings for a given type
*/
static getElementTypeMappings(type) {
const lowerType = type.toLowerCase();
return exports.ADVANCED_ML_TRAINING_DATA.elementTypeMappings[lowerType] || [];
}
/**
* Get natural language patterns for a given phrase
*/
static getNaturalLanguagePatterns(phrase) {
const lowerPhrase = phrase.toLowerCase();
return exports.ADVANCED_ML_TRAINING_DATA.naturalLanguagePatterns[lowerPhrase] || [];
}
/**
* Get fast path selectors for a given selector
*/
static getFastPathSelectors(selector) {
const lowerSelector = selector.toLowerCase();
return exports.ADVANCED_ML_TRAINING_DATA.fastPathSelectors[lowerSelector] || [];
}
/**
* Get direct semantic mapping for a given selector
*/
static getDirectSemanticMapping(selector) {
const lowerSelector = selector.toLowerCase();
return exports.ADVANCED_ML_TRAINING_DATA.directSemanticMappings[lowerSelector] || null;
}
/**
* Get confidence threshold for a given scenario
*/
static getConfidenceThreshold(scenario) {
return exports.ADVANCED_ML_TRAINING_DATA.confidenceThresholds[scenario] || 0.5;
}
/**
* Get performance setting for a given setting
*/
static getPerformanceSetting(setting) {
return exports.ADVANCED_ML_TRAINING_DATA.performanceSettings[setting];
}
/**
* Check if a word has semantic synonyms
*/
static hasSemanticSynonyms(word) {
return this.getSemanticSynonyms(word).length > 0;
}
/**
* Check if a word has abbreviations
*/
static hasAbbreviations(word) {
return this.getAbbreviations(word).length > 0;
}
/**
* Get all possible variations for a given word
*/
static getAllVariations(word) {
const variations = new Set();
// Add the original word
variations.add(word);
// Add semantic synonyms
this.getSemanticSynonyms(word).forEach(syn => variations.add(syn));
// Add abbreviations
this.getAbbreviations(word).forEach(abbr => variations.add(abbr));
// Add common patterns
this.getCommonPatterns(word).forEach(pattern => variations.add(pattern));
return Array.from(variations);
}
/**
* Get learning insights for a given pattern
*/
static getLearningInsights(pattern) {
const successfulPatterns = exports.ADVANCED_ML_TRAINING_DATA.learningPatterns.successful_patterns;
const failedPatterns = exports.ADVANCED_ML_TRAINING_DATA.learningPatterns.failed_patterns;
const successful = successfulPatterns.find((p) => p.pattern === pattern);
const failed = failedPatterns.find((p) => p.pattern === pattern);
return {
successful: successful || null,
failed: failed || null,
overall_success_rate: successful ? successful.success_rate : (failed ? failed.success_rate : 0)
};
}
}
exports.TrainingDataHelper = TrainingDataHelper;
exports.default = exports.ADVANCED_ML_TRAINING_DATA;
//# sourceMappingURL=advanced-ml-training-data.js.map