Testwitness
How it works Examples Pricing FAQ
Sign in Start free

The AI tester
for your app.

Describe what to check in plain words. An AI tester runs it in a real browser or a phone simulator and shows you what it saw, step by step.

No password. The link signs you in, and creates your account if you're new. Free while in beta.

Have a password? Sign in with it instead
Check your inbox

We sent a sign-in link to . Open it to sign in. It can take a minute to arrive, and may land in spam.

By signing in you agree to the terms and the privacy notice.

see how it works
[ the test, as you wrote it ]

Save a recipe to favourites

  1. Open the recipe “Lemon pancakes” and tap the heart.
  2. Go to Favourites.
  3. Lemon pancakes should be in the list.
[ what the tester saw ]
Failed

The heart turned red, but Favourites stayed empty.

  • 1 Tapped the heart on Lemon pancakes
  • 2 Opened Favourites
  • 3 List empty, expected Lemon pancakes screenshot
web · chromium · 41 sCopy bug report
Free while in beta Bring your own model key Runs on your Mac No selectors, no scripts
[ how it works ]

Write it. Run it. Read what it saw.

No test framework, no recorder, no selectors. The tester reads the screen the way a person does, and tells you what it found the way a person would.

Step 01
test cases · new
Sign up with a used email
1 Open the app and tap Create account.
2 Enter anna@example.com and any password.
3 The app should say the address is already in use.

Write the test like you'd brief a colleague

A title and a few numbered lines: what to do, what should be on screen. Attach a design image to a step when the pixels matter.

Step 02
run 3 tests
WhereYour Mac · iPhone simulator TesterClaudeGPTGemini Paid byYour Anthropic key
Run

Run it on your own Mac

The helper app pairs your Mac with the site and checks the tooling for you. Websites run in Chromium, apps in the iOS Simulator or an Android emulator.

Step 03
run & results · today 14:02
Sign up with a used emailPassed
Save a recipe to favouritesFailed · the app
Map shows current positionInconclusive

Read what it saw, step by step

Every step gets a verdict and a screenshot. Failed means the app did something wrong; what the tester couldn't tell is marked inconclusive, with the reason. One click turns a failure into a bug report.

[ a run, live ]

Watch it read the screen.

This is what a run looks like while it happens: the tester says what it sees, does one thing at a time, and flags the moment the app goes wrong.

9:41●●● ▮
BrewlyKungsgatan 12 · open
Order ahead
Flat whitedouble shot · 49 kr
›
Cappuccinofoamed milk · 49 kr
›
Cold brew16 h steep · 45 kr
›
Chai lattehouse spice · 52 kr
›
MenuOrdersMe
‹ Menu
Flat white 49 kr
Size
SmallRegular
Milk
Whole milk
Oat milk
Soy milk
Add to order
‹ Back
Your order
Flat white49 kr
Regular
Whole milk flagged
Pick up
Kungsgatan 12Ready in about 6 min
Pay 49 kr
Order with oat milk — running now · live log— failed · logs
[run] order-with-oat-milk · ios · iPhone 16 simulator · Claude → appium_get_source {} 🧠 Screen 1. Brewly's menu: Flat white, Cappuccino, Cold brew, Chai latte, each with a price. The test says tap Flat white. → appium_click {"text": "Flat white"} → appium_get_source {} 🧠 Screen 2. Flat white, 49 kr. Size is Small or Regular, milk is Whole, Oat or Soy as radio buttons, Whole preselected. Step 1 is done. Choosing Oat, then Add to order. → step_done {"step": 1, "status": "passed", "note": "Flat white opened its options"} → appium_click {"text": "Oat milk"} → appium_click {"text": "Add to order"} → appium_get_source {} 🧠 Screen 3. Your order: "Flat white · Regular · Whole milk · 49 kr". I chose Oat on screen 2 and its radio showed selected, so the app dropped the choice on the way here. Flagging it. → flag_screenshot {"screen": 3, "reason": "Summary says Whole milk after Oat milk was selected"} → step_done {"step": 2, "status": "passed", "note": "Oat milk selected and added"} → step_done {"step": 3, "status": "failed", "note": "Summary shows Whole milk, expected Oat milk"} 🧠 Verdict: Failed. The milk choice doesn't survive from the drink screen to the order summary.
Failed · 18 s replay →
[ examples ]

Catches what a script can't.

A scripted test breaks when a button moves. A tester that reads the screen just finds the button, and notices what's wrong around it.

web · chromiumsave-recipe-to-favourites
Failed

The heart turned red, but Favourites stayed empty.

  • 1 Tapped the heart on Lemon pancakes
  • 2 Opened Favourites
  • 3 List empty, expected Lemon pancakes screenshot
41 sCopy bug report
ios · simulatorsign-up-with-used-email
Passed

The app refused the address and said so in plain words.

  • 1 Tapped Create account
  • 2 Entered anna@example.com and a password
  • 3 Saw “This email is already in use”
28 sPassed for 4.2.0
android · emulatormap-shows-current-position
Inconclusive

The map tiles never loaded on the emulator, so I couldn't judge the position marker.

  • 1 Opened the map tab
  • 2 Waited 30 s for tiles — grey screen flagged
  • 3 Position marker not visible
63 sNot a bug yet
try it on your own app
[ your stack ]

Websites, iPhone apps, Android apps. Your model.

One tester for all three. The helper app on your Mac does the setup; the site keeps the tests and the results.

01

Websites

Runs in a headless Chromium on your Mac. Give it a URL and, when needed, a test account.

02

iPhone apps

A simulator build of your app in the iOS Simulator. Xcode on the Mac; the helper handles the rest.

03

Android apps

An APK on an Android emulator. The helper checks the tooling and shows you what's booted.

04

Your model

An Anthropic, OpenAI or Google Gemini key, stored encrypted. Each test shows what it cost.

[ why it holds up ]

Tests that don't rot.

The things that make scripted UI tests expensive to keep are the things the tester does for you.

01

No selectors to break

The tester reads the screen like a person. A moved button is still the button.

02

It keeps notes

Per project, the tester writes down what it learned — where the cookie dialog hides, which build is on the device — and reads them before the next run.

03

A pass sticks for a version

Passed tests skip reruns until your app's version name changes. Clear a pass whenever you want it rerun.

04

Design checks

Attach a design image to a step. If the live screen drifts from it, the test fails and shows you both.

05

Hints while it runs

Watch a run live. Type a hint — “the menu is behind the avatar” — and the tester takes it mid-test.

06

Bug reports in one click

A failure becomes a bug report with the steps, the screenshot and the cause, ready to paste into Jira or anywhere else.

[ pricing ]

Free, for now.

Every account starts on the free plan. Your model provider bills your key; the site itself costs nothing during the beta.

free plan
$0 per month · beta

Sign in with your email and you're on it. No card, no trial clock.

A paid plan comes later. When the free period ends, your projects, tests and results stay yours to read and edit; only starting new runs will need a plan. The site will say so before it happens.

what's in it
  • Up to 10 runs a day per account
  • Websites, iPhone apps and Android apps
  • As many projects and tests as you like
  • Results, screenshots and transcripts kept in your account
  • Your own Anthropic, OpenAI or Gemini key, encrypted at rest
[ faq ]

Questions.

Do I need to know how to code?

No. A test is a title and a few numbered lines in plain words. If you can brief a colleague on what to check, you can write one.

What does a run cost?

The site is free during the beta. The tester thinks with a model from a provider you choose — Anthropic, OpenAI or Google Gemini — using your own API key, and that provider bills you. Each test's result shows what it cost.

Where do tests run?

On a Mac of yours with the helper app installed (Apple silicon). Websites run in a headless Chromium there, iPhone apps in the iOS Simulator, Android apps in an emulator. The site queues the run and keeps the results.

What do I need to test an iPhone or Android app?

A simulator build (.app) for iOS or an APK for Android, and the simulator or emulator installed on the Mac. The helper's Doctor screen checks what's missing and tells you how to fix it.

Is my API key safe?

It's stored encrypted (AES-256-GCM) with a key that lives only in the API service, decrypted once per run, used only for your runs, and removable at any time under Providers & keys.

What does the tester send to the model?

Your test text, its notes, and the text and structure of the screens it reads. Screenshots are kept for you and are not sent to the model. See the privacy notice for the full picture.

What happens when the free period ends?

Your account keeps everything: projects, tests, notes and results stay readable and editable. Only starting new runs will need a paid plan, and the site will say so before it happens.

Write your first test in the time it takes to describe it.

Sign in with your email, pair a Mac, add a key. The first run is minutes away.

Start free Read the terms
[ my first test ]

The site loads

  1. Open the site.
  2. Sign in with the test account.
  3. The dashboard should show today's date.
Testwitness

An AI tester that runs your plain-words tests in a real browser or a phone simulator, on your own Mac, with your own model key.

product
  • How it works
  • Examples
  • Pricing
  • FAQ
download
  • Testwitness Helper for Mac
  • Apple silicon · macOS
legal
  • Terms of use
  • Privacy notice
  • Contact