test-console.jsβ’5.11 kB
#!/usr/bin/env node
/**
* Standalone test for console message handling
* Tests console.log, console.warn, console.error capturing
*/
import { FirefoxDevTools } from '../dist/index.js';
async function main() {
console.log('π Testing Console Message Handling...\n');
const firefox = new FirefoxDevTools({
firefoxPath: undefined,
headless: false,
viewport: { width: 1024, height: 768 },
});
try {
// Connect
console.log('π‘ Connecting to Firefox...');
await firefox.connect();
console.log('β
Connected!\n');
// Navigate to blank page
console.log('π Navigating to about:blank...');
await firefox.navigate('about:blank');
console.log('β
Navigation complete\n');
// Clear existing console messages
console.log('π§Ή Clearing existing console messages...');
firefox.clearConsoleMessages();
const afterClear = await firefox.getConsoleMessages();
console.log(`β
Console cleared (${afterClear.length} messages)\n`);
// Test 1: Generate different log levels
console.log('1οΈβ£ Generating console messages of different levels...');
await firefox.evaluate(`
console.log('This is a log message');
console.info('This is an info message');
console.warn('This is a warning message');
console.error('This is an error message');
console.debug('This is a debug message');
`);
// Wait a bit for messages to be captured
await new Promise((r) => setTimeout(r, 500));
const allMessages = await firefox.getConsoleMessages();
console.log(` β
Captured ${allMessages.length} console messages\n`);
// Display all messages
console.log('π All console messages:');
for (const msg of allMessages) {
const emoji = {
log: 'π',
info: 'βΉοΈ',
warn: 'β οΈ',
error: 'β',
debug: 'π',
}[msg.level.toLowerCase()] || 'π';
console.log(` ${emoji} [${msg.level}] ${msg.text}`);
}
console.log();
// Test 2: Filter by level
console.log('2οΈβ£ Testing level filtering...');
const errors = allMessages.filter((msg) => msg.level.toLowerCase() === 'error');
const warnings = allMessages.filter((msg) => msg.level.toLowerCase() === 'warn');
console.log(` β
Found ${errors.length} error(s)`);
console.log(` β
Found ${warnings.length} warning(s)\n`);
// Test 3: Generate many messages and test limit
console.log('3οΈβ£ Testing message limit (generating 100 messages)...');
firefox.clearConsoleMessages();
await firefox.evaluate(`
for (let i = 0; i < 100; i++) {
console.log('Message ' + i);
}
`);
await new Promise((r) => setTimeout(r, 1000));
const manyMessages = await firefox.getConsoleMessages();
console.log(` β
Captured ${manyMessages.length} messages\n`);
// Test 4: Clear messages
console.log('4οΈβ£ Testing clear console messages...');
firefox.clearConsoleMessages();
const afterSecondClear = await firefox.getConsoleMessages();
console.log(` β
Console cleared (${afterSecondClear.length} messages remaining)\n`);
// Test 5: Test timestamps
console.log('5οΈβ£ Testing message timestamps...');
firefox.clearConsoleMessages();
const startTime = Date.now();
await firefox.evaluate(`console.log('Message at T=0')`);
await new Promise((r) => setTimeout(r, 500));
await firefox.evaluate(`console.log('Message at T=500ms')`);
await new Promise((r) => setTimeout(r, 500));
await firefox.evaluate(`console.log('Message at T=1000ms')`);
await new Promise((r) => setTimeout(r, 500));
const timedMessages = await firefox.getConsoleMessages();
console.log(` β
Captured ${timedMessages.length} timed messages`);
for (const msg of timedMessages) {
const elapsed = msg.timestamp ? msg.timestamp - startTime : 'N/A';
console.log(` π "${msg.text}" at +${elapsed}ms`);
}
console.log();
// Test 6: Test with objects and complex data
console.log('6οΈβ£ Testing console with objects and arrays...');
firefox.clearConsoleMessages();
await firefox.evaluate(`
console.log('Simple string');
console.log('Number:', 42);
console.log('Object:', { name: 'Test', value: 123 });
console.log('Array:', [1, 2, 3, 4, 5]);
`);
await new Promise((r) => setTimeout(r, 500));
const complexMessages = await firefox.getConsoleMessages();
console.log(` β
Captured ${complexMessages.length} messages with complex data`);
for (const msg of complexMessages) {
console.log(` π ${msg.text}`);
}
console.log();
console.log('β
All console tests passed! π\n');
} catch (error) {
console.error('β Test failed:', error.message);
if (error.stack) {
console.error(error.stack);
}
process.exit(1);
} finally {
console.log('π§Ή Closing Firefox...');
await firefox.close();
console.log('β
Done!');
}
}
main().catch((error) => {
console.error('π₯ Fatal error:', error);
process.exit(1);
});