Local-first execution
Run your full suite on your machine in seconds. No cloud queues, no per-seat runners.
Open source visual test automation
Design test flows in a visual workspace, then export clean Playwright and Gherkin your team can run locally, review in git, and trust in CI.
How it works
A visual IDE built for the modern testing loop. No black boxes, no lock-in.
Create test cases visually by chaining steps together. Define user actions, assertions, and navigation in an intuitive flow builder.
If locators are required, generate them directly from the visual builder on your live application—no hand-written selectors required.
Save your flow to automatically generate standard, reviewable artifacts like Gherkin feature files, Playwright step definitions, and locator JSON.
Execute tests locally with zero cloud latency and view rich, interactive reports. Everything is stored as plain text, making it easy to version control.
Review in PRs
Every visual flow becomes Gherkin features, Playwright steps, and locator JSON in your repo—ready for normal code review, not a 5 MB proprietary diff.
@@ -1,3 +1,11 @@ Feature: Checkout smoke - # TODO: Write manual test steps+ Scenario: Returning buyer completes a card checkout+ When I add "Everyday Hoodie" to the cart+ And I use the saved shipping address+ And I pay with "visa_success"+ Then the order confirmation should be visible+ And the confirmation total should equal "$64.00" @@ -0,0 +1,15 @@+import { expect } from "@playwright/test";+import locators from "../locators/checkout.locators.json";++When("I add {string} to the cart", async ({ page }, itemName) => {+ await page.getByRole("link", { name: itemName }).click();+ await page.locator(locators.product.addToCart.selector).click();+ await expect(page.locator(locators.cart.summary.selector)).toBeVisible();+});++When("I pay with {string}", async ({ page }, cardName) => {+ await page.locator(locators.payment.savedCard.selector).selectOption(cardName);+ await page.locator(locators.payment.submit.selector).click();+}); @@ -4,4 +4,7 @@ "cart": { "summary": "[data-testid='cart-summary']" },+ "product": {+ "addToCart": "[data-testid='add-to-cart']"+ },+ "payment": {+ "savedCard": "[data-testid='saved-card']",+ "submit": "[data-testid='submit-payment']"+ } Built for engineering teams
Run your full suite on your machine in seconds. No cloud queues, no per-seat runners.
Features, steps, and locators live in git. Review them in PRs like any other code.
Add custom TypeScript steps in seconds and wire them into visual flows.
Try it in 15 minutes
npx create-appraisejs@latest AppraiseJS is fully open source. Your tests, locators, and reports are plain files in your repository—inspect them locally, review them in PRs, and run them in any CI pipeline.
Readable scenario structure—QA can follow this without opening the visual tool. The steps map cleanly to a smoke test I'd sign off on.
Approved.
Standard Playwright step definitions importing locators from JSON. I can debug these locally and extend them when we need custom logic.
Approved.
Selectors live in version-controlled JSON, not a hosted database. When a `data-testid` changes, it's one file to grep and patch.
Approved.