From three sentences to a bug report: how we test a checkout

By The TestWise team • 16th November, 2026 • 5 min read
From three sentences to a bug report: how we test a checkout

"Test failed" is where the work starts. What a team needs next is why it failed, whether it's really a bug, and enough detail for a developer to fix it without guessing.

This post follows one flow through TestWise, from its description to the bug report. The store is Acme, a sample shop we use for examples, and the screenshots are TestWise's own report and replay views.

It starts as three sentences

Acme wants to know that customers can pay with a gift card. Here's the flow, as written:

  • Add any item to the cart. Expected: the cart shows 1 item.
  • Go to checkout and choose Gift card. Expected: a gift card field appears.
  • Apply code TEST-1234. Expected: the total is reduced.

There are no selectors and no script. Each step says what a person would do, and each expected result says what a person would check. You can write flows like this yourself, or describe them to us and we'll write them with you. When a flow really changes, we update it with you.

An AI agent runs it in real browsers

The agent reads one step at a time and works the page the way a person would. To add an item, it looks for the button that says "Add to bag", not for a CSS class that the next redesign will rename. That's why small UI changes don't break a flow.

Each flow runs in Chrome, Firefox and Safari's WebKit engine, at desktop and phone sizes. Every run is recorded: a video, plus the page at each step with its console and every network request.

Step 2 fails

On Chrome at desktop size, the payment step lists card, bank transfer and instalments. There's no gift card option, so the agent can't choose one. It marks step 2 as failed and says why in plain words.

The failed flow in the report: Checkout with a gift card, failed at step 2 of 3, with the bug title, the reason from the run, the three steps and a recording of the payment page.
The failed flow in the report: the step where it broke, the reason, the bug it became and a recording of the run.

That tells you what went wrong. The recording tells you why.

The run replayed step by step: the list of actions, the payment page at the failed step, and the network panel with the payment-methods request highlighted in red with status 500.
The same run, replayed step by step. At the failed step, the request for the payment methods returned a 500 error.

When the payment page loaded, it asked the server for the list of payment methods, and the server answered with a 500 error. The page's script then tried to read the gift card setting from a response that didn't have one, logged a TypeError, and fell back to a built-in list: card, bank transfer, instalments.

So the page didn't crash. It quietly showed less. Bugs like this are easy to miss: there's no error page for a customer to report, and a screenshot looks fine. Only the customer who wanted to pay with a gift card notices, and they rarely write in. They leave.

A person reviews every failure

Before anything reaches you, someone on our team watches the recording and decides one thing: is this the app or the test?

Plenty of failures are the test's fault:

  • a cookie banner or a promotion popup covering the button
  • a step that can be read two ways
  • a page that was slow on one run, where the agent gave up too early
  • a test account that expired or got locked

We fix those ourselves, and you never hear about them. This one is the app: the payment methods request fails, so gift cards can't be used at checkout. It becomes a bug, filed with the steps, the video and the technical details.

Why a person? Because a check that's often wrong gets ignored. Once a team learns that red usually means the test, it stops looking, and the real bug lands in a channel nobody reads. Review is what keeps a red result worth reading.

What you get

A report link that needs no login. For each flow, it shows whether the flow passed, where it failed and why, and a recording of the run. Under each failure are the technical findings: console errors and failed or slow requests, each with the step it happened at. Developers usually start there.

Technical findings for the failed flow: a console TypeError at step 2, GET /api/checkout/payment-methods returned 500 at step 2, and POST /api/cart took 3.8 seconds at step 1.
Technical findings for the failed flow: the JavaScript error and the 500 at step 2, and a slow cart request at step 1.

On Release QA, the bugs go into TestWise, shared with your team, and your flows run again on every release, or nightly.

What the agent can't do on its own

An AI agent isn't a tester with years on your product, and we don't pretend it is.

  • Vague steps get vague results. "Check the total" can mean several things, so we rewrite steps like that with you until each has one clear expected result.
  • Some doors need a key. CAPTCHAs, one-time codes and email confirmations stop the agent, as they're meant to. A dedicated test account with those checks turned off usually solves it.
  • It tests flows, not load or security. We don't load-test your servers or try to break in.

That's the other reason a person reviews every failure. The agent is fast and never gets bored; a person knows when it's wrong.

Try it on your app

Pick up to five flows that matter, such as sign-up, checkout and search, and get a free QA report. The report link arrives within 48 hours, and we never need your code.