All work
FlagshipOct 2021 – Oct 2022

Real-time browser test recorder

Captures every user action via Chrome DevTools Protocol in real time — before it hits the DOM. No selectors, no framework. Cited in Forrester Research 2022.

⭐ Forrester Research 2022 · 3× faster test authoring


The problem

Writing test scripts manually means mapping DOM selectors, coding every interaction, and updating scripts whenever the UI changes. Every automation vendor had the same approach: record clicks on the rendered page. The result was selector-based output that broke on any UI change.

The root problem was working at the wrong layer of abstraction — the DOM surface — rather than the browser's internal event model. At the DOM layer, you only see what the page renders. You miss the events Chrome itself is responding to.

What I built

Built a real-time recorder that embeds directly into Chrome using the Chrome DevTools Protocol over WebSocket. Every user action — clicks, typing, navigation, form interactions — is captured as a replayable test step in real time, without any DOM selectors or scripting framework.

The core browser controller is written in pure JavaScript ES6 modules, designed to be integrated into any application. View JSON (ACCELQ's element snapshot format) is calculated asynchronously in a parallel worker thread — 700–900 ms for typical 20–30k element pages, 15 seconds for extreme 1,30,000-element pages — without impacting the user's recording experience.

Integrated with Live Playback to give immediate feedback on each recorded step. Designed around ACCELQ's existing views/context/action model so it feels native to existing users.

Approaches considered

Selenium/WebDriver recording — rejected: operates at the rendered page surface, misses internal browser state, produces selector-based output that breaks on any UI change
Browser extension injection — considered: simpler to implement, but limited to what the extension can observe — no access to CDP's internal event stream
Puppeteer script generation — rejected: still selector-dependent, requires post-processing, can't integrate with live playback
Chrome DevTools Protocol over WebSocket — chosen: accesses Chrome's own internal event pipeline, captures events before they hit the DOM, gives perfect fidelity with no selectors

Architecture

CDP WebSocket connection established when recorder opens → user interacts with the page → CDP emits internal events (input, navigation, DOM changes) → parallel worker thread processes event stream and updates view JSON → step emitter normalises CDP events into ACCELQ's action model → each step immediately replayed via Live Playback for real-time feedback. Stateless — reconnects automatically on tab change.

Result

Cited in Forrester Research 2022: the Recorder & Playback feature was specifically recognised as a powerful addition to the product, and Self-Healing was acknowledged as best-in-industry. Currently the only solution on the market supporting JavaScript and auth prompts within an embedded browser. Used by 200+ enterprise clients.

Chrome DevTools ProtocolWebSocketJavaScript ES6
Back to all work