@withkeystone/cli
Version:
Keystone CLI - Test automation for modern web apps
2 lines • 2.63 kB
TypeScript
export declare const RECORDING_SCRIPT = "\n(function() {\n // Avoid double injection\n if (window.__keystoneRecorder) return;\n\n window.__keystoneRecorder = {\n enabled: false,\n\n start() {\n this.enabled = true;\n this.attachListeners();\n console.log('[Keystone] Recording started');\n },\n\n stop() {\n this.enabled = false;\n console.log('[Keystone] Recording stopped');\n },\n\n attachListeners() {\n // Click events\n document.addEventListener('click', (e) => {\n if (!this.enabled) return;\n\n const target = e.target;\n const selector = this.generateSelector(target);\n\n this.sendAction({\n type: 'click',\n selector,\n text: target.textContent?.trim().substring(0, 50),\n position: { x: e.clientX, y: e.clientY }\n });\n }, true);\n\n // Input events\n document.addEventListener('input', (e) => {\n if (!this.enabled) return;\n\n const target = e.target;\n if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA') {\n this.sendAction({\n type: 'type',\n selector: this.generateSelector(target),\n value: target.value\n });\n }\n }, true);\n\n // Form submissions\n document.addEventListener('submit', (e) => {\n if (!this.enabled) return;\n\n this.sendAction({\n type: 'submit',\n selector: this.generateSelector(e.target)\n });\n }, true);\n },\n\n generateSelector(element) {\n // Priority: id > data-testid > aria-label > class > tag\n if (element.id) return '#' + element.id;\n if (element.dataset.testid) return '[data-testid=\"' + element.dataset.testid + '\"]';\n if (element.getAttribute('aria-label')) return '[aria-label=\"' + element.getAttribute('aria-label') + '\"]';\n\n // Fallback to path\n const path = [];\n while (element && element.nodeType === Node.ELEMENT_NODE) {\n let selector = element.nodeName.toLowerCase();\n if (element.className) {\n selector += '.' + element.className.split(' ').join('.');\n }\n path.unshift(selector);\n element = element.parentNode;\n }\n return path.join(' > ');\n },\n\n sendAction(action) {\n // Send to parent window (Studio)\n window.parent.postMessage({\n source: 'keystone-recorder',\n action: action,\n url: window.location.href,\n timestamp: Date.now()\n }, '*');\n }\n };\n})();\n";
//# sourceMappingURL=recorder.d.ts.map