Skip to content

Current limits

Dyno tests web UI. Keep platform UI tests for native iOS and macOS apps, and real-device checks for behavior a desktop viewport can’t prove.

The runner needs ES2022 and modern APIs: AbortSignal.timeout, AbortSignal.any, Promise.withResolvers, crypto.getRandomValues, and EventSource. Older browsers, including historical WebOS builds, need compatibility work. Phones, iOS, and TVs still need verification of companion popups and background execution. See browser setup.

Ordinary Interactor actions use DOM methods and synthetic events. Use explicit native actions for browser defaults or trusted input. Closed shadow roots, downloads, video, visual baselines, and HTTPS gateway serving are outside this version.

The gateway uses HTTP. Secure cookies and secure-context features may need a different test origin. HTML routes, including fixtures, need the app’s opener and agent-cluster isolation headers; changing policy can disconnect the companion even on the same origin.

Avoid changing window.name during a run; Dyno uses it to keep the companion connected. Tests and app code have separate contexts but share an origin. This isn’t a security sandbox. An infinite loop can freeze the browser; Node can stop a managed browser, but can’t recover a manual browser’s event loop.

The gateway rejects unknown Host headers and foreign WebSocket origins. Event and command requests have a 1 MB limit. Large observer views stream in bounded records; a slow reader may disconnect without losing accepted results or saved output.

Up to 20 browser runs can be active. Dyno drops finished runs as new ones join. If all 20 are still active, finish or close one before joining again.