60 lines
2.4 KiB
JavaScript
60 lines
2.4 KiB
JavaScript
"use strict";
|
|
/**
|
|
* PlaywrightReproducer — serializes an action trace and generates a
|
|
* deterministic Playwright script for replay.
|
|
*/
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.PlaywrightReproducer = void 0;
|
|
class PlaywrightReproducer {
|
|
serialize(trace) {
|
|
return JSON.stringify(trace, null, 2);
|
|
}
|
|
deserialize(raw) {
|
|
const parsed = JSON.parse(raw);
|
|
if (!Array.isArray(parsed)) {
|
|
throw new Error('PlaywrightReproducer.deserialize: expected a JSON array');
|
|
}
|
|
return parsed;
|
|
}
|
|
generateScript(trace) {
|
|
const lines = [
|
|
'// Auto-generated replay script by ABE (Autonomous Bug Explorer)',
|
|
`// Generated at: ${new Date().toISOString()}`,
|
|
`// Steps: ${trace.length}`,
|
|
'',
|
|
"const { chromium } = require('playwright');",
|
|
'',
|
|
'(async () => {',
|
|
' const browser = await chromium.launch({ headless: true });',
|
|
' const context = await browser.newContext();',
|
|
' const page = await context.newPage();',
|
|
'',
|
|
];
|
|
for (let i = 0; i < trace.length; i++) {
|
|
const action = trace[i];
|
|
lines.push(` // Step ${i + 1}: ${action.type} (seed=${action.seed})`);
|
|
switch (action.type) {
|
|
case 'navigate':
|
|
lines.push(` await page.goto(${JSON.stringify(action.url)});`);
|
|
break;
|
|
case 'click':
|
|
lines.push(` await page.locator(${JSON.stringify(action.selector)}).first().click();`);
|
|
break;
|
|
case 'fill':
|
|
lines.push(` await page.locator(${JSON.stringify(action.selector)}).first().fill(${JSON.stringify(action.value ?? '')});`);
|
|
break;
|
|
case 'select':
|
|
lines.push(` await page.locator(${JSON.stringify(action.selector)}).first().selectOption(${JSON.stringify(action.value ?? '')});`);
|
|
break;
|
|
case 'submit':
|
|
lines.push(` await page.locator(${JSON.stringify(action.selector)}).first().dispatchEvent('submit');`);
|
|
break;
|
|
}
|
|
lines.push('');
|
|
}
|
|
lines.push(" console.log('Replay complete');", ' await browser.close();', '})();');
|
|
return lines.join('\n');
|
|
}
|
|
}
|
|
exports.PlaywrightReproducer = PlaywrightReproducer;
|