test-lifecycle-hooks.jsβ’4.69 kB
/**
* Test lifecycle hooks and automatic cleanup on navigation
*/
import { FirefoxDevTools } from '../dist/index.js';
async function testLifecycleHooks() {
console.log('π§ͺ Testing lifecycle hooks...\n');
const client = new FirefoxDevTools({
headless: true,
args: ['--width=1280', '--height=720'],
});
try {
await client.connect();
console.log('β
Connected to Firefox\n');
// Navigate to example.com
console.log('π Navigating to example.com...');
await client.navigate('https://example.com');
console.log('β
Page loaded\n');
// Take snapshot and get a UID
console.log('πΈ Taking snapshot...');
const snapshot1 = await client.takeSnapshot();
const uid1 = snapshot1.json.root.uid;
console.log(`β
Snapshot 1 taken, root UID: ${uid1}\n`);
// Verify UID works
console.log('π§ͺ Testing UID resolution before navigation...');
const selector1 = client.resolveUidToSelector(uid1);
console.log(`β
UID ${uid1} resolves to: ${selector1}\n`);
// Start network monitoring
console.log('π Starting network monitoring...');
await client.startNetworkMonitoring();
console.log('β
Network monitoring started\n');
// Make some network requests by navigating
console.log('π Navigating to mozilla.org (triggers lifecycle hooks)...');
await client.navigate('https://www.mozilla.org');
console.log('β
Navigation completed\n');
// Wait a bit for network requests
await new Promise((resolve) => setTimeout(resolve, 2000));
// Check network requests (should have some from mozilla.org)
const requests1 = await client.getNetworkRequests();
console.log(`π Network requests captured: ${requests1.length}`);
if (requests1.length > 0) {
console.log(` First request: ${requests1[0].method} ${requests1[0].url}\n`);
}
// Test staleness: old UID should fail
console.log('π§ͺ Testing staleness detection (old UID should fail)...');
try {
client.resolveUidToSelector(uid1);
console.log('β FAIL: Old UID should have been invalidated!\n');
} catch (err) {
console.log(`β
PASS: Old UID correctly rejected: ${err.message}\n`);
}
// Take new snapshot
console.log('πΈ Taking new snapshot...');
const snapshot2 = await client.takeSnapshot();
const uid2 = snapshot2.json.root.uid;
console.log(`β
Snapshot 2 taken, root UID: ${uid2}\n`);
// Navigate again
console.log('π Navigating to example.com again (triggers lifecycle hooks)...');
await client.navigate('https://example.com');
console.log('β
Navigation completed\n');
// Wait for page to settle
await new Promise((resolve) => setTimeout(resolve, 1000));
// Check network requests after navigation (should be cleared automatically)
const requests2 = await client.getNetworkRequests();
console.log(`π Network requests after 2nd navigation: ${requests2.length}`);
console.log(
requests2.length === 0
? 'β
PASS: Network requests auto-cleared on navigation\n'
: 'β οΈ WARN: Network requests not cleared (check lifecycle hook)\n'
);
// Test console messages
console.log('π Checking console messages...');
const consoleMessages1 = await client.getConsoleMessages();
console.log(` Console messages: ${consoleMessages1.length}\n`);
// Trigger console message
await client.evaluate(`console.log('Test message from lifecycle hook test')`);
await new Promise((resolve) => setTimeout(resolve, 500));
const consoleMessages2 = await client.getConsoleMessages();
console.log(` Console messages after log: ${consoleMessages2.length}`);
console.log(
` Last message: ${consoleMessages2[consoleMessages2.length - 1]?.text || 'none'}\n`
);
// Navigate again and check if console was cleared
console.log('π Navigating one more time to check console clearing...');
await client.navigate('https://example.com');
await new Promise((resolve) => setTimeout(resolve, 1000));
const consoleMessages3 = await client.getConsoleMessages();
console.log(`π Console messages after 3rd navigation: ${consoleMessages3.length}`);
console.log(
consoleMessages3.length === 0
? 'β
PASS: Console auto-cleared on navigation\n'
: 'β οΈ INFO: Console has messages (from new page)\n'
);
console.log('β
All lifecycle hook tests completed! π\n');
} catch (error) {
console.error('β Test failed:', error);
} finally {
console.log('π§Ή Closing connection...');
await client.close();
console.log('β
Done');
}
}
testLifecycleHooks();