test-dialog.jsβ’3.75 kB
#!/usr/bin/env node
/**
* Standalone test for dialog handling (Task 23)
*/
import { FirefoxDevTools } from '../dist/index.js';
async function main() {
console.log('π¬ Testing Dialog Handling (Task 23)...\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');
// Test 1: Alert dialog
console.log('1οΈβ£ Testing alert() dialog...');
await firefox.navigate('about:blank');
await firefox.evaluate('setTimeout(() => alert("This is a test alert!"), 100)');
await new Promise((r) => setTimeout(r, 300));
await firefox.acceptDialog();
console.log(' β
Alert accepted\n');
// Test 2: Confirm dialog - accept
console.log('2οΈβ£ Testing confirm() dialog - accept...');
await firefox.evaluate(
'setTimeout(() => { window.confirmResult = confirm("Click OK to accept"); }, 100)'
);
await new Promise((r) => setTimeout(r, 300));
await firefox.acceptDialog();
const confirmAccepted = await firefox.evaluate('return window.confirmResult');
console.log(` Result: ${confirmAccepted}`);
console.log(` ${confirmAccepted ? 'β
' : 'β'} Confirm was accepted\n`);
// Test 3: Confirm dialog - dismiss
console.log('3οΈβ£ Testing confirm() dialog - dismiss...');
await firefox.evaluate(
'setTimeout(() => { window.confirmResult2 = confirm("Click Cancel to dismiss"); }, 100)'
);
await new Promise((r) => setTimeout(r, 300));
await firefox.dismissDialog();
const confirmDismissed = await firefox.evaluate('return window.confirmResult2');
console.log(` Result: ${confirmDismissed}`);
console.log(` ${!confirmDismissed ? 'β
' : 'β'} Confirm was dismissed\n`);
// Test 4: Prompt dialog with text
console.log('4οΈβ£ Testing prompt() dialog with custom text...');
await firefox.evaluate(
'setTimeout(() => { window.promptResult = prompt("Enter your favorite color:"); }, 100)'
);
await new Promise((r) => setTimeout(r, 300));
await firefox.acceptDialog('Blue');
const promptResult = await firefox.evaluate('return window.promptResult');
console.log(` Result: ${promptResult}`);
console.log(` ${promptResult === 'Blue' ? 'β
' : 'β'} Prompt returned: "${promptResult}"\n`);
// Test 5: Prompt dialog dismissed
console.log('5οΈβ£ Testing prompt() dialog - dismiss...');
await firefox.evaluate(
'setTimeout(() => { window.promptResult2 = prompt("This will be dismissed"); }, 100)'
);
await new Promise((r) => setTimeout(r, 300));
await firefox.dismissDialog();
const promptDismissed = await firefox.evaluate('return window.promptResult2');
console.log(` Result: ${promptDismissed}`);
console.log(` ${promptDismissed === null ? 'β
' : 'β'} Prompt was dismissed (null)\n`);
// Test 6: Error handling - no dialog present
console.log('6οΈβ£ Testing error handling (no dialog present)...');
try {
await firefox.acceptDialog();
console.log(' β Should have thrown error');
} catch (e) {
console.log(` β
Error caught: ${e.message}\n`);
}
console.log('β
All dialog 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);
});