A recorded visual test running in a browser on a tester VM

AI-in-the-loop visual testing

Test any webpage the way a human does

OpenFactory drives a real browser on a real VM, checks each result by sight, and records a run you can scrub step by step. Describe a test in a sentence — or paste a URL and watch one run right now.

OpenFactory App Testing is AI-in-the-loop visual testing: describe a workflow in plain language and the platform opens your app on a real machine, drives it by sight, checks each result with image recognition, signs in with a one-time code when it has to, and hands you a video of the whole run with a marker on every step.

Create a test right now

Paste any public URL. We'll spin up a real browser on a real VM, drive it by sight, and record the run — no signup, no install. Runs as a guest.

Demo tests run a no-credentials smoke check (load + visual baseline + stability). For sign-in flows, 2FA, click/type steps and saved suites, open the console.

How it works

Perceive → Reason → Act

Every step runs a tight loop: capture the screen, decide what to do, do it, then look again to confirm. The test reacts to what's actually on screen, not to a script frozen in time.

Testing by sight, not selectors

No CSS selectors, no brittle DOM paths. Rename a class or swap a component library and the test still works, because it looks at the page the way a person does.

Real browsers on real VMs

Firefox on a vanilla Ubuntu tester VM — no headless simulators, no mocks. Your app runs at its real URL and the tester sees exactly what your users see.

A demo test for OpenFactory

Here's a real sign-in smoke test for the OpenFactory console — a scenario named console-login-smoke. Each step is written in plain English; the tester resolves every target visually as it goes.

  1. Open the OpenFactory console sign-in page
  2. Type the test email into the email field
  3. Type the password (pulled from the encrypted store, never logged)
  4. Click the Sign In button
  5. Fetch the one-time 2FA code from email and enter it
  6. Assert the “Test Panel” dashboard is visible
  7. Capture a visual baseline — fail later runs if an error banner appears
  8. Confirm the dashboard stays stable for 10s (no flicker, nothing vanishes)

Result: 8/8 passed in ~18s, with a scrubbable video and a shareable report. The next run replays the learned steps in a fraction of the time — tests get faster, not slower.

Every kind of step

No selectors, no pixel coordinates — every step is described in plain language and grounded on screen for you.

open_url

Navigate to a URL and confirm the page loaded.

click

Click an element described in plain language.

type

Type into a field; supports ${secrets} and variables.

key

Press a key — Enter, Tab, Escape, Shift+Tab…

wait

Pause, or wait until an element appears.

assert_text

Check that text is visible on screen (OCR).

assert_visual

Perceptual-hash baseline — catch layout & render drift.

assert_stable

Soak a region over time for flicker or disappearance.

drag

Drag-and-drop by pixel offset or onto another element.

email_otp

Fetch a one-time code from email and type it in.

Four ways to assert

Text match

Confirm a phrase is on screen — survives restyles and DOM churn.

Image recognition

Assert semantic states like “the Sign In button is visible.”

Perceptual-hash regression

Catch subtle layout drift a text check would miss.

Temporal stability

Detect flicker and disappearance over 1–120 seconds.

Built for a real test loop

Self-hardening

First run learns each step; later runs replay from cache up to 10× faster, re-learning only what changed.

Evidence by default

Per-step screenshots, a recorded MP4 with a seek marker on every step, and a shareable HTML report.

Group & re-run

Re-run everything, a project, or one app on a fleet of isolated tester VMs — with live pass/fail progress.

Secrets & 2FA

Encrypted passwords, TOTP seeds, and email one-time codes — fetched fresh at run time, never stored in the test.

Project → app → scenario

Organize tests in a tree with a run-history strip so you can spot solid, broken, and flaky at a glance.

Console, CLI & MCP

Drive it from the dashboard, the openfactory CLI, or AI agents via the MCP tools.

Test the app wherever it lives

  • Deployed on OpenFactory — a stable, health-checked *.apps.openfactory.tech URL.
  • Your own dev server — bind it to the network and the tester VM reaches it directly.
  • Any public URL — Vercel, AWS, Netlify, or your production site. If a browser can open it, OpenFactory can test it.

Frequently asked questions

How is this different from Playwright or Selenium?

Traditional UI tests bind to CSS selectors and DOM structure, so they break when markup changes even though users see nothing wrong. OpenFactory tests by sight: it looks at the screen, decides what to do, acts, and looks again to confirm. That makes tests robust to restyles and lets you write one by simply describing it.

Do I need to install anything to try it?

No. Paste a public URL into the box above and a real Firefox browser on a real tester VM will load it, capture a visual baseline, and check the page stays stable — then hand you a recorded report. It runs as a guest, no signup required.

Where can the app under test run?

Anywhere reachable: an app you deployed on OpenFactory (a stable *.apps.openfactory.tech URL), your own self-hosted dev server, or any publicly hosted site on Vercel, AWS, Netlify, and the like.

Can it sign in and handle 2FA?

Yes. Saved scenarios support encrypted passwords, time-based (TOTP) codes, and email one-time codes fetched at run time — so end-to-end sign-in flows work without ever putting a credential in the test definition. Those richer flows run from the console.

Build the image instead of hand-assembling it

Use OpenFactory to turn the same requirements into a bootable, testable Linux system.

Open console