Skip to main content
Glama

AutoProbeMCP

by Wladastic
scroll-test-enhanced.mjs9.06 kB
#!/usr/bin/env node import { spawn } from 'child_process'; import { readFileSync } from 'fs'; import { fileURLToPath } from 'url'; import { dirname, join } from 'path'; const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); const colors = { reset: '\x1b[0m', bright: '\x1b[1m', red: '\x1b[31m', green: '\x1b[32m', yellow: '\x1b[33m', blue: '\x1b[34m', magenta: '\x1b[35m', cyan: '\x1b[36m' }; function log(message, color = colors.reset) { console.log(`${color}${message}${colors.reset}`); } function formatTool(tool, params) { return `${colors.cyan}🔧 ${tool}:${colors.reset} ${JSON.stringify(params, null, 2)}`; } async function testScrollFunctionality() { log('🚀 Starting MCP Browser Server for Enhanced Scroll Testing...', colors.bright); const serverProcess = spawn('node', ['build/index.js'], { stdio: ['pipe', 'pipe', 'pipe'] }); let messageId = 1; function sendMessage(method, params = {}) { const message = { jsonrpc: '2.0', id: messageId++, method, params }; serverProcess.stdin.write(JSON.stringify(message) + '\n'); return new Promise((resolve, reject) => { const timeout = setTimeout(() => { reject(new Error('Request timeout')); }, 30000); const onData = (chunk) => { clearTimeout(timeout); serverProcess.stdout.removeListener('data', onData); try { const response = JSON.parse(chunk.toString().trim()); resolve(response); } catch (error) { reject(error); } }; serverProcess.stdout.on('data', onData); }); } try { log('✅ MCP Browser Server started', colors.green); log('\n🔍 Testing Enhanced Scroll Functionality', colors.bright); log('==========================================', colors.bright); // 1. Launch browser log('\n1️⃣ Launching browser...', colors.blue); const launchParams = { browser: 'chromium', headless: false, viewport: { width: 1280, height: 720 } }; log(formatTool('launch_browser', launchParams)); const launchResult = await sendMessage('tools/call', { name: 'launch_browser', arguments: launchParams }); if (launchResult.result?.content?.[0]?.text) { log(`✅ launch_browser: ${launchResult.result.content[0].text}`, colors.green); } // 2. Navigate to our local test page log('\n2️⃣ Testing with local scrollable test page...', colors.blue); const testPagePath = `file://${join(__dirname, '..', 'test-page.html')}`; const navigateParams = { url: testPagePath }; log(formatTool('navigate', navigateParams)); const navigateResult = await sendMessage('tools/call', { name: 'navigate', arguments: navigateParams }); if (navigateResult.result?.content?.[0]?.text) { log(`✅ navigate: ${navigateResult.result.content[0].text}`, colors.green); } // 3. Check initial scrollability on test page log('\n3️⃣ Checking scrollability of test page...', colors.blue); const checkParams = { direction: 'both' }; log(formatTool('check_scrollability', checkParams)); const checkResult = await sendMessage('tools/call', { name: 'check_scrollability', arguments: checkParams }); if (checkResult.result?.content?.[0]?.text) { log(`✅ check_scrollability: ${checkResult.result.content[0].text}`, colors.green); } // 4. Test scrolling down log('\n4️⃣ Testing scroll down on test page...', colors.blue); const scrollDownParams = { direction: 'down', pixels: 500, behavior: 'smooth' }; log(formatTool('scroll', scrollDownParams)); const scrollDownResult = await sendMessage('tools/call', { name: 'scroll', arguments: scrollDownParams }); if (scrollDownResult.result?.content?.[0]?.text) { log(`✅ scroll: ${scrollDownResult.result.content[0].text}`, colors.green); } // 5. Check scrollability after scrolling log('\n5️⃣ Checking scrollability after scrolling...', colors.blue); const checkAfterParams = { direction: 'vertical' }; log(formatTool('check_scrollability', checkAfterParams)); const checkAfterResult = await sendMessage('tools/call', { name: 'check_scrollability', arguments: checkAfterParams }); if (checkAfterResult.result?.content?.[0]?.text) { log(`✅ check_scrollability: ${checkAfterResult.result.content[0].text}`, colors.green); } // 6. Test horizontal scrolling log('\n6️⃣ Testing horizontal scroll...', colors.blue); const scrollRightParams = { direction: 'right', pixels: 200, behavior: 'auto' }; log(formatTool('scroll', scrollRightParams)); const scrollRightResult = await sendMessage('tools/call', { name: 'scroll', arguments: scrollRightParams }); if (scrollRightResult.result?.content?.[0]?.text) { log(`✅ scroll: ${scrollRightResult.result.content[0].text}`, colors.green); } // 7. Test scrolling back up log('\n7️⃣ Testing scroll up...', colors.blue); const scrollUpParams = { direction: 'up', pixels: 300, behavior: 'smooth' }; log(formatTool('scroll', scrollUpParams)); const scrollUpResult = await sendMessage('tools/call', { name: 'scroll', arguments: scrollUpParams }); if (scrollUpResult.result?.content?.[0]?.text) { log(`✅ scroll: ${scrollUpResult.result.content[0].text}`, colors.green); } // 8. Test with a real website log('\n8️⃣ Testing with Wikipedia (real scrollable content)...', colors.blue); const wikiNavigateParams = { url: 'https://en.wikipedia.org/wiki/Web_browser' }; log(formatTool('navigate', wikiNavigateParams)); const wikiNavigateResult = await sendMessage('tools/call', { name: 'navigate', arguments: wikiNavigateParams }); if (wikiNavigateResult.result?.content?.[0]?.text) { log(`✅ navigate: ${wikiNavigateResult.result.content[0].text}`, colors.green); } // 9. Check Wikipedia scrollability log('\n9️⃣ Checking Wikipedia scrollability...', colors.blue); const wikiCheckParams = { direction: 'both' }; log(formatTool('check_scrollability', wikiCheckParams)); const wikiCheckResult = await sendMessage('tools/call', { name: 'check_scrollability', arguments: wikiCheckParams }); if (wikiCheckResult.result?.content?.[0]?.text) { log(`✅ check_scrollability: ${wikiCheckResult.result.content[0].text}`, colors.green); } // 10. Test default scroll on Wikipedia log('\n🔟 Testing default scroll on Wikipedia...', colors.blue); const defaultScrollParams = {}; // Should use defaults: down direction, 100px, auto behavior log(formatTool('scroll', defaultScrollParams)); const defaultScrollResult = await sendMessage('tools/call', { name: 'scroll', arguments: defaultScrollParams }); if (defaultScrollResult.result?.content?.[0]?.text) { log(`✅ scroll: ${defaultScrollResult.result.content[0].text}`, colors.green); } // 11. Take a screenshot to verify scroll position log('\n1️⃣1️⃣ Taking screenshot to verify scroll position...', colors.blue); const screenshotParams = { path: './scroll-test-result.png' }; log(formatTool('screenshot', screenshotParams)); const screenshotResult = await sendMessage('tools/call', { name: 'screenshot', arguments: screenshotParams }); if (screenshotResult.result?.content?.[0]?.text) { log(`✅ screenshot: ${screenshotResult.result.content[0].text}`, colors.green); } // 12. Close browser log('\n1️⃣2️⃣ Closing browser...', colors.blue); log(formatTool('close_browser', {})); const closeResult = await sendMessage('tools/call', { name: 'close_browser', arguments: {} }); if (closeResult.result?.content?.[0]?.text) { log(`✅ close_browser: ${closeResult.result.content[0].text}`, colors.green); } log('\n🎉 Enhanced scroll functionality test completed successfully!', colors.green); log('\n📋 Test Summary:', colors.yellow); log(' ✅ Local test page with guaranteed scrollable content', colors.green); log(' ✅ All four scroll directions tested (up/down/left/right)', colors.green); log(' ✅ Different pixel amounts and behaviors tested', colors.green); log(' ✅ Scrollability detection working correctly', colors.green); log(' ✅ Real-world website testing (Wikipedia)', colors.green); log(' ✅ Screenshot capture of scroll results', colors.green); } catch (error) { log(`❌ Error during testing: ${error.message}`, colors.red); console.error(error); } finally { serverProcess.kill(); log('🛑 MCP Browser Server stopped', colors.yellow); } } // Run the test testScrollFunctionality().catch(console.error);

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Wladastic/AutoProbeMCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server