mihir2007/Cyber-Risk
0
1// Script to test all 5 continuous storytelling scenes via Chrome DevTools Protocol2import { spawn } from 'child_process'3import fs from 'fs'4 5const chromePath = 'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe'6const port = 92227 8// 1. Launch Chrome with remote debugging9const chromeProc = spawn(chromePath, [10 `--remote-debugging-port=${port}`,11 '--headless=new',12 '--enable-webgl',13 '--ignore-gpu-blocklist',14 '--use-gl=angle',15 '--window-size=1920,1080',16 '--no-first-run',17 '--no-default-browser-check',18 'about:blank'19])20 21// Wait for Chrome to listen22await new Promise(r => setTimeout(r, 1500))23 24try {25 // Query targets26 const versionRes = await fetch(`http://127.0.0.1:${port}/json/version`)27 const versionData = await versionRes.json()28 const webSocketDebuggerUrl = versionData.webSocketDebuggerUrl29 30 const listRes = await fetch(`http://127.0.0.1:${port}/json/list`)31 const pages = await listRes.json()32 const targetPage = pages[0]33 const wsUrl = targetPage.webSocketDebuggerUrl34 35 console.log('Connected to Chrome DevTools WebSocket:', wsUrl)36 37 const ws = new WebSocket(wsUrl)38 39 let id = 140 const pending = new Map()41 42 ws.onmessage = (event) => {43 const msg = JSON.parse(event.data)44 if (msg.id && pending.has(msg.id)) {45 pending.get(msg.id)(msg)46 pending.delete(msg.id)47 }48 }49 50 await new Promise(r => ws.onopen = r)51 52 const send = (method, params = {}) => {53 const msgId = id++54 return new Promise((resolve) => {55 pending.set(msgId, resolve)56 ws.send(JSON.stringify({ id: msgId, method, params }))57 })58 }59 60 // Enable Page & Runtime61 await send('Page.enable')62 await send('Runtime.enable')63 64 // Navigate to http://localhost:5173/65 console.log('Navigating to http://localhost:5173/ ...')66 await send('Page.navigate', { url: 'http://localhost:5173/' })67 68 // Wait 4 seconds for full React Query + Three.js load69 await new Promise(r => setTimeout(r, 4000))70 71 // Helper to capture screenshot72 const capture = async (filename) => {73 const res = await send('Page.captureScreenshot', { format: 'png' })74 fs.writeFileSync(filename, Buffer.from(res.result.data, 'base64'))75 console.log(`Saved screenshot: ${filename}`)76 }77 78 // Capture Scene 0 (Exposure)79 console.log('Capturing Scene 0: Exposure...')80 await capture('c:\\cyber_risk\\scene_0_exposure.png')81 82 // Jump to Scene 1 (Impact)83 console.log('Scrolling to Scene 1: Impact...')84 await send('Runtime.evaluate', { expression: `window.scrollTo({ top: (1 / 4.15) * (document.querySelector('.command-scrolly-track').scrollHeight - window.innerHeight), behavior: 'instant' })` })85 await new Promise(r => setTimeout(r, 1200))86 await capture('c:\\cyber_risk\\scene_1_impact.png')87 88 // Jump to Scene 2 (Concentration)89 console.log('Scrolling to Scene 2: Concentration...')90 await send('Runtime.evaluate', { expression: `window.scrollTo({ top: (2 / 4.15) * (document.querySelector('.command-scrolly-track').scrollHeight - window.innerHeight), behavior: 'instant' })` })91 await new Promise(r => setTimeout(r, 1200))92 await capture('c:\\cyber_risk\\scene_2_concentration.png')93 94 // Jump to Scene 3 (Investment)95 console.log('Scrolling to Scene 3: Investment...')96 await send('Runtime.evaluate', { expression: `window.scrollTo({ top: (3 / 4.15) * (document.querySelector('.command-scrolly-track').scrollHeight - window.innerHeight), behavior: 'instant' })` })97 await new Promise(r => setTimeout(r, 1200))98 await capture('c:\\cyber_risk\\scene_3_investment.png')99 100 // Jump to Scene 4 (Decision)101 console.log('Scrolling to Scene 4: Decision...')102 await send('Runtime.evaluate', { expression: `window.scrollTo({ top: (4 / 4.15) * (document.querySelector('.command-scrolly-track').scrollHeight - window.innerHeight), behavior: 'instant' })` })103 await new Promise(r => setTimeout(r, 1200))104 await capture('c:\\cyber_risk\\scene_4_decision.png')105 106 ws.close()107} finally {108 chromeProc.kill()109 console.log('Done testing scenes!')110}111 