test(ui): capture console errors and exceptions during the UI check (V10 3)
- verify-ui.cjs collects console error/warning, uncaught exceptions, and log entries over the whole run; prints CONSOLE_EVENTS - run with the user's three-sheet workbook: 0 events Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
353931c767
commit
0b7ae1ef3f
1 file changed
+14
-1
+14
-1
@@ -25,11 +25,21 @@ async function main() {
|
|||||||
|
|
||||||
let seq = 0;
|
let seq = 0;
|
||||||
const waiting = new Map();
|
const waiting = new Map();
|
||||||
|
// Console and exception events, collected from the first navigation onward (V10 ③).
|
||||||
|
const consoleEvents = [];
|
||||||
ws.onmessage = (ev) => {
|
ws.onmessage = (ev) => {
|
||||||
const m = JSON.parse(ev.data);
|
const m = JSON.parse(ev.data);
|
||||||
if (m.id && waiting.has(m.id)) {
|
if (m.id && waiting.has(m.id)) {
|
||||||
waiting.get(m.id)(m);
|
waiting.get(m.id)(m);
|
||||||
waiting.delete(m.id);
|
waiting.delete(m.id);
|
||||||
|
} else if (m.method === 'Runtime.consoleAPICalled' && ['error', 'warning'].includes(m.params.type)) {
|
||||||
|
const text = m.params.args.map((a) => a.value ?? a.description ?? '').join(' ');
|
||||||
|
consoleEvents.push(`console.${m.params.type}: ${text}`);
|
||||||
|
} else if (m.method === 'Runtime.exceptionThrown') {
|
||||||
|
const d = m.params.exceptionDetails;
|
||||||
|
consoleEvents.push(`exception: ${d.exception?.description || d.text}`);
|
||||||
|
} else if (m.method === 'Log.entryAdded' && ['error', 'warning'].includes(m.params.entry.level)) {
|
||||||
|
consoleEvents.push(`log.${m.params.entry.level}: ${m.params.entry.text} ${m.params.entry.url || ''}`.trim());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
const send = (method, params = {}) =>
|
const send = (method, params = {}) =>
|
||||||
@@ -51,6 +61,7 @@ async function main() {
|
|||||||
|
|
||||||
await send('Page.enable');
|
await send('Page.enable');
|
||||||
await send('Runtime.enable');
|
await send('Runtime.enable');
|
||||||
|
await send('Log.enable');
|
||||||
await send('DOM.enable');
|
await send('DOM.enable');
|
||||||
await send('Emulation.setDeviceMetricsOverride', { width: 1600, height: 1000, deviceScaleFactor: 1, mobile: false });
|
await send('Emulation.setDeviceMetricsOverride', { width: 1600, height: 1000, deviceScaleFactor: 1, mobile: false });
|
||||||
await send('Page.navigate', { url: APP_URL });
|
await send('Page.navigate', { url: APP_URL });
|
||||||
@@ -90,7 +101,9 @@ async function main() {
|
|||||||
console.log('PRESSED', label, await evalJs(`[...document.querySelectorAll('#views button')].filter((b) => b.getAttribute('aria-pressed') === 'true').map((b) => b.textContent).join(',')`));
|
console.log('PRESSED', label, await evalJs(`[...document.querySelectorAll('#views button')].filter((b) => b.getAttribute('aria-pressed') === 'true').map((b) => b.textContent).join(',')`));
|
||||||
}
|
}
|
||||||
|
|
||||||
// V10 ③ — console errors surfaced by the page (checked via a reload with error capture).
|
// V10 ③ — every console error/warning and uncaught exception seen during the run above.
|
||||||
|
console.log(`CONSOLE_EVENTS ${consoleEvents.length}`);
|
||||||
|
for (const e of consoleEvents) console.log(` ${e}`);
|
||||||
ws.close();
|
ws.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user