An agent buys two items
and checks the order.

A real run of Molar’s browser agent, step by step. It ran on October 24, 2026, on a developer machine, against Acme Shop: a test store we built with a test-mode payment page. It is not a customer app.

Goal
Sign in with the demo account, add the Packable Rain Jacket and the Merino Wool Socks, check out, pay with test card 4242 4242 4242 4242, then confirm the order and its total.
Result
Passed. “Order confirmed (AC-131604). Items: Merino Wool Socks and Packable Rain Jacket. Total: $147.00.”
Steps
8 steps in 39.7 seconds
Checks
4 passed: the confirmation text, each item name and the $147.00 total
  1. Step 1: Sign-in page
    1. Sign-in pageNext: Enter the demo email and password, then sign in.
  2. Step 2: Signed in as Jordan Lee
    2. Signed in as Jordan LeeNext: Open the Store.
  3. Step 3: The Store lists both items
    3. The Store lists both itemsNext: Add each item to the cart, then open the cart.
  4. Step 4: Cart: both items, total $147.00
    4. Cart: both items, total $147.00Next: Check out.
  5. Step 5: Payment page, test mode, $147.00 due
    5. Payment page, test mode, $147.00 dueNext: Fill in the card details.
  6. Step 6: Card details filled
    6. Card details filledNext: Pay.
  7. Step 7: Payment processing
    7. Payment processingNext: Wait for the confirmation.
  8. Step 8: Order confirmed: AC-131604, total $147.00
    8. Order confirmed: AC-131604, total $147.00Next: Check the items and the total.

The numbered boxes are the page elements the agent could act on at each step. We blurred the test store’s demo credentials in step 1.

The test it exported.

After the run, Molar exported the steps as a Playwright test. Replayed without the agent, the test passed in 5.8 seconds. Run against a broken copy of the store that never confirms the order, it failed. We replaced the store address and the demo password with environment variables. Current exports read passwords from a secret the same way.

Explore Cartographer
checkout.spec.ts · exported test
import { test, expect } from '@playwright/test';

test('buy two items and confirm the order', async ({ page }) => {
  await page.goto(process.env.BASE_URL + '/login');
  await page.locator('[id="email"]').fill('demo@acme.test');
  await page.locator('[id="password"]').fill(process.env.SHOP_PASSWORD);
  await page.getByRole('button', { name: 'Sign in', exact: true }).click();
  await page.getByRole('link', { name: 'Store', exact: true }).click();
  await page.getByRole('button', { name: 'Add Merino Wool Socks to cart', exact: true }).click();
  await page.getByRole('button', { name: 'Add Packable Rain Jacket to cart', exact: true }).click();
  await page.locator('[id="root"]').getByRole('link').nth(5).click();
  await page.locator('[id="checkout"]').click();
  await page.locator('[id="card-number"]').fill('4242 4242 4242 4242');
  await page.locator('[id="card-expiry"]').fill('12/30');
  await page.locator('[id="card-cvc"]').fill('123');
  await page.locator('[id="card-name"]').fill('Jordan Lee');
  await page.getByRole('button', { name: 'Pay $147.00', exact: true }).click();
  await expect(page.getByText('Order confirmed').first()).toBeVisible({ timeout: 15_000 });
  await expect(page.getByText('Merino Wool Socks').first()).toBeVisible({ timeout: 15_000 });
  await expect(page.getByText('Packable Rain Jacket').first()).toBeVisible({ timeout: 15_000 });
  await expect(page.locator('[data-testid="total"]')).toContainText('$147.00', { timeout: 15_000 });
});

Try it on your own app.

Create a free workspace and describe the first flow to test.

Free during the beta. No card.