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. Sign-in pageNext: Enter the demo email and password, then sign in. 
2. Signed in as Jordan LeeNext: Open the Store. 
3. The Store lists both itemsNext: Add each item to the cart, then open the cart. 
4. Cart: both items, total $147.00Next: Check out. 
5. Payment page, test mode, $147.00 dueNext: Fill in the card details. 
6. Card details filledNext: Pay. 
7. Payment processingNext: Wait for the confirmation. 
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 Cartographerimport { 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.