assuremind
v1.6.2
Published
AI-powered codeless UI & API automation framework
Maintainers
Readme
AssureMind Studio
AI-powered codeless UI & API test automation framework
Describe tests in plain English. AI generates Playwright code. Run anywhere.
🌐 Website — https://assuremind.in
📧 Contact: Send us a message
🤝 Community
Join the AssureMind GitHub Discussions — ask questions, report bugs, share ideas, and connect with other users and the maintainers.
| Category | Link | Use it for | |---|---|---| | 📣 Announcements | View | Official releases, feature drops & roadmap updates | | 🐛 Bug Reports | Report a bug | Found something broken? Tell us here | | 💡 Ideas & Feedback | Request a feature and Give a Feedback | Ideas that could make AssureMind even better | | 💬 General | Join the conversation | Open discussions, thoughts & feedback | | 🙋 Q&A | Ask a question | Stuck? The community & maintainers have your back |
Why AssureMind?
| Capability | What it does |
|-----------|-------------|
| Zero coding | Write steps in plain English — AI generates Playwright code automatically |
| MCP-sighted generation | AI sees real page elements via Playwright MCP accessibility snapshots (~90-95% accuracy) |
| 3 suite types | UI (browser automation) · API (HTTP tests) · Audit (Playwright + Lighthouse) |
| 5-level self-healing | Broken selectors are auto-fixed by AI during runs — smart retry → AI regen → multi-selector → visual → decompose |
| 12 AI providers | Anthropic · OpenAI · Gemini · Groq · DeepSeek · Together · Qwen · Perplexity · Ollama · Bedrock · Azure OpenAI · Custom |
| Device emulation | iPhone, Pixel, iPad, Galaxy — full Playwright device descriptors from UI or --device CLI flag |
| Studio UI | Browser-based editor, run dashboard, reports, healing review, git control center — with dark mode |
| RAG memory | AI learns from every run — retrieves similar past steps & healing fixes for smarter generation |
| Test Recorder | Record tests by clicking in a real browser — locators verified against Playwright's accessibility tree, zero AI cost. Recorder + AI both handle iframes (click & fill), Shadow DOM, JS alerts, and keyboard actions |
| Cost-optimised | Template engine + code cache + RAG handle ~80% of steps with zero AI calls |
| CI-ready | npx assuremind run --all --ci — exit code 0/1, works with any pipeline |
| File-based | Plain JSON storage, fully Git-friendly, no database |
| Faker Data | 100+ @faker-js/faker generators across 16 categories — random emails, names, addresses, sequences — no code, no stale data |
| File upload & download | Upload fixtures from the Studio and insert as {{FILE:…}} tokens; downloads auto-captured per run and viewable in Reports |
| Visual regression | Pixel-diff screenshot comparison with baselines — approve/reject visual changes in Studio |
| CI/CD integration | Quality gates, PR comments (GitHub/GitLab), Slack/Teams notifications |
Quick Start
npm install assuremind
npx assuremind init # folders, config, Playwright browsers
npx playwright install # if browser install was skipped or failed during init
npx assuremind studio # opens http://localhost:4400First-time setup:
npx assuremind initinstalls the Playwright browsers automatically. If that step is skipped (--skip-playwright) or fails (network/permissions), install them manually withnpx playwright install(add--with-depson Linux to pull OS libraries). Runnpx assuremind doctorto verify your setup.
System Requirements
| | Minimum | Recommended | |---|---|---| | Node.js | 18 LTS | 20 LTS or newer | | OS | macOS / Linux / Windows 10+ | — | | RAM | 4 GB | 8 GB+ | | Disk | ~2 GB (app + Playwright browsers) | 5 GB+ | | Java | — | JDK 17+ — only for Allure HTML reports |
npx assuremind init installs the Playwright browsers. Using a cloud AI provider (Anthropic, OpenAI, Gemini, …) needs only an API key and the specs above. Running a local model via Ollama has heavier requirements — see below.
Configure AI Provider
Edit .env — pick one provider:
# Anthropic # OpenAI # Google
AI_PROVIDER=anthropic AI_PROVIDER=openai AI_PROVIDER=google
ANTHROPIC_API_KEY=sk-ant-... OPENAI_API_KEY=sk-... GOOGLE_API_KEY=AIza...
ANTHROPIC_MODEL=claude-sonnet.. OPENAI_MODEL=gpt-4o GOOGLE_MODEL=gemini-2.5-proSee .env.example for all 12 providers including Gemini, OpenAI, Anthropic, Ollama (local/free), etc.
Local & Free — Ollama
Run models entirely on your own machine (no API key, no cost). AssureMind uses the model to turn plain-English steps into Playwright code, so a code-tuned model with strong instruction-following works best.
# 1. Install Ollama → https://ollama.com/download
ollama serve # starts the server on http://localhost:11434
ollama pull qwen2.5-coder:7b # 2. pull the recommended model# 3. .env
AI_PROVIDER=ollama
OLLAMA_MODEL=qwen2.5-coder:7b
OLLAMA_BASE_URL=http://localhost:11434
AI_TIMEOUT=120 # local inference is slower than cloud APIsRecommended models (by hardware):
| Hardware | Model | Notes |
|----------|-------|-------|
| 16 GB+ RAM, GPU 8 GB+ VRAM | qwen2.5-coder:14b | Highest accuracy — best for complex steps / iframes |
| 16 GB RAM (GPU optional) ⭐ | qwen2.5-coder:7b | Best balance of quality & speed for this task |
| 8 GB RAM, no GPU | llama3.2 (3B) / qwen2.5-coder:3b | Usable; good for simpler steps |
| ≤4–6 GB RAM | llama3.2:1b / phi3:mini | Lightweight; navigation & clicks only |
Ollama system requirements:
- RAM is the floor — a model needs roughly its file size + ≈2 GB free. A 7B model (≈4.7 GB) wants 8 GB free RAM minimum, 16 GB comfortable; a 14B model wants ≈16 GB+.
- GPU is optional but transformative — CPU-only works (hence
AI_TIMEOUT=120), but a GPU with 8 GB+ VRAM (NVIDIA CUDA / Apple Silicon / modern AMD) makes 7B models fast. Apple Silicon (M-series) is excellent thanks to unified memory. - Disk — a few GB per model; keep 10–20 GB free if trying several.
- Tips — enable MCP (Settings → live page snapshots) for far more accurate locators with local
models. Avoid
deepseek-r1here: its<think>reasoning output is slow and pollutes generated code.
CLI
npx assuremind run --all # run everything
npx assuremind run --type ui --tag smoke # filter by type + tag
npx assuremind run --suite "Login" --browser chromium # run a suite
npx assuremind run --all --device "iPhone 15 Pro" --ci # mobile + CI mode
npx assuremind generate --story "User resets password" # AI generates full suite
npx assuremind apply-healing --yes # accept all healed selectors
npx assuremind validate # check config health
npx assuremind doctor # system diagnostics| Flag | Description |
|------|-------------|
| --all | Run every suite |
| --type <ui\|api\|audit> | Filter by suite type |
| --suite <name> | Partial name match |
| --tag <tag> | Filter by tag |
| --device <name> | Emulate device (e.g. "iPhone 15 Pro", "Pixel 7") |
| --browser <list> | chromium firefox webkit |
| --ci | CI mode — exit code reflects pass/fail |
| --headed | Show browser window |
| --no-healing | Disable self-healing |
Full reference → docs/CLI-REFERENCE.md
Studio UI
Start with npx assuremind studio — opens at http://localhost:4400.
Dashboard · Smart Tests · Test Editor · Run Config · Reports · Variables · Self-Healing · Step Library · Faker Data · CI/CD · Git Control · Settings · Docs
Full walkthrough → docs/STUDIO.md
MCP Integration
AI sees real page elements during code generation via the official @playwright/mcp server. Enabled by default.
| Mode | Accuracy | Latency | Config |
|------|----------|---------|--------|
| Blind (MCP off) | ~50-70% | Fastest | mcp.enabled: false |
| Snapshot-driven | ~90-95% | +2-5s first page | mcp.enabled: true (default) |
| Act-then-script | ~98-100% | +5-10s/step | mcp.actThenScript: true |
- MCP is only used during code generation — test execution is never affected
- Silent fallback — if MCP fails, generation continues blindly without error
- Configure in Settings → MCP Integration or
autotest.config.json
Test Recorder
Record tests by interacting with your application in a real browser — zero AI, zero cost, zero guesswork.
Click Record in the Test Editor, perform your actions, and stop. Each interaction becomes a step with verified Playwright code, ready to run.
How it works
Available for UI and Audit suites only (not API suites).
- A headed Chromium browser opens your app's URL
- Every click, fill, navigation, and keyboard action is captured in real time — including inside iframes and shadow roots
- Locators are resolved against Playwright's accessibility tree — the recorder tries 6 strategies (data-testid, getByRole, getByLabel, getByPlaceholder, getByText, CSS) and verifies each with
count() === 1 - Iframe-aware — elements inside iframes automatically generate
page.frameLocator('#iframe').getByRole(...)code with the correct frame chain - Shadow DOM —
composedPath()[0]pierces shadow roots; generateshost >> innerpierce locators automatically - JS dialogs — alerts/confirms are auto-accepted during recording;
page.once('dialog', ...)is prepended to the triggering step's code - Keyboard — Tab, Shift+Tab, arrows, Enter, Escape, Ctrl+A, and Space on buttons are all captured
- Assertions via keyboard shortcuts: Shift+Click (element visible), Ctrl+Shift+U (URL), Ctrl+Shift+T (page title)
- On stop, each action is added as a step with pre-generated Playwright code — no AI call needed
What makes it stand out vs other recorders
| Feature | Selenium IDE | Playwright Codegen | AssureMind Recorder |
|---------|-------------|-------------------|---------------------|
| Locator quality | CSS/XPath | Good | Best — 6 strategies, verified against live page |
| Accessibility tree | No | Partial | Full — every locator checked via Playwright API |
| Iframe support | Partial | Manual | Full — detects iframes, generates frameLocator() code — click and fill both work |
| Shadow DOM | No | Limited | >> pierce combinator — elements inside shadow roots are reachable |
| JS Alert handling | No | No | page.once('dialog', ...) registered automatically before triggering action |
| Keyboard actions | No | No | page.keyboard.press() / .type() for keys, shortcuts, and character input |
| Assertions | Manual | Manual | Shift+Click (hard), Ctrl+Shift+Click (soft), URL & title shortcuts |
| Plain-English steps | No | No | Yes — human-readable instructions auto-generated |
| Self-healing after | No | No | Yes — 5-level AI healing cascade |
| RAG memory | No | No | Yes — recorded steps feed the learning loop |
| Cost | Free | Free | Free |
Biggest pain points in test automation — solved
| Pain Point | How the Recorder Solves It |
|-----------|---------------------------|
| Writing tests is slow | Record a full test in 30 seconds |
| Selectors break constantly | Locators verified against Playwright's accessibility tree in real time |
| AI costs money | Recording + code generation = $0, zero AI calls |
| Non-technical testers can't write tests | Anyone who can click a browser can create tests |
| Assertions are hard to write | Shift+Click for hard, Ctrl+Shift+Click for soft, Ctrl+Shift+U for URL, Ctrl+Shift+T for title |
| Hard vs soft assertions | Soft assertions (expect.soft()) let the test continue — all failures reported at end |
| Recorded tests are fragile | 6-strategy locator resolution + post-run 5-level self-healing |
| Apps use iframes (SAP, Salesforce) | Recorder auto-detects iframe context, generates frameLocator() chains — click and fill both work |
| Shadow DOM / Web Components | Recorder pierces shadow roots via composedPath(), generates >> locators automatically |
| JavaScript alerts & popups | Recorder auto-accepts dialogs; page.once('dialog', ...) prepended to triggering step |
| Keyboard interactions | Recorder captures Tab, Shift+Tab, arrows, Ctrl+A, Enter, Escape, and Space |
RAG Memory (Retrieval-Augmented Generation)
The AI learns from every test run, building semantic memory that improves accuracy over time — zero setup required:
| Corpus | What it stores | When it's used | |--------|---------------|----------------| | Code Corpus | Instruction-to-code mappings from successful runs | During generation — similar past steps are retrieved as AI examples or used directly (score >= 0.90) | | Healing Corpus | Past healing events (error + fix pairs) | During self-healing — proven past fixes are injected into the repair prompt | | Error Catalog | Recurring error patterns per URL | During generation — the AI is warned about known-bad selectors to avoid |
Zero cost, zero database — uses local TF-IDF embeddings and file-based JSON storage (results/.rag/). Enabled by default — works automatically from the very first run.
How it improves over time
- Run 1 — memory is empty, AI generates code normally
- Run 2+ — RAG kicks in silently: similar instructions are retrieved instead of making API calls (free + faster), healing uses proven past fixes
- Run 10+ — most common steps are served from RAG memory at zero cost, self-healing resolves issues on the first attempt
Consumer FAQ
| Question | Answer |
|----------|--------|
| Do I need to configure anything? | No. RAG is ON by default with zero setup. |
| Does it cost anything? | No. TF-IDF embedder runs locally. RAG direct hits replace paid AI calls. |
| Does it slow down my tests? | No. RAG lookup is <1ms. It actually speeds up generation. |
| Does it work in CI/CD? | Yes. Cache results/.rag/ between CI runs to persist memory. |
| How do I share memory across team? | Commit results/.rag/ to Git or use a CI cache step. |
| How do I reset memory? | Delete the results/.rag/ folder. |
When to use Settings → RAG Memory
Most users never need to touch RAG settings. The Settings card exists for power-user scenarios:
| Scenario | Action | |----------|--------| | Debugging a flaky test | Turn OFF Code Corpus — forces fresh AI generation | | Healing keeps suggesting a bad fix | Turn OFF Healing Corpus — clears bad fix influence | | Major app redesign | Turn OFF RAG entirely — old memory is now misleading | | Error warnings are outdated | Turn OFF Error Catalog — stops avoiding selectors that are fine now | | Want deterministic CI runs | Disable RAG in CI config, keep ON locally |
Self-Healing
When your app's UI changes (button renamed, element moved, DOM restructured), tests break. Instead of failing immediately, AssureMind automatically attempts to fix the broken selector through a 5-level cascade — fully automated, no manual intervention needed:
| Level | What happens | Example | AI Cost |
|-------|-------------|---------|---------|
| 1 | Smart retry — waits for the element with exponential backoff | Element was loading slowly; retry finds it after 2s | Free |
| 2 | AI regeneration — AI rewrites the Playwright code using current page context | #login-btn removed → AI generates page.getByRole('button', { name: 'Sign In' }) | 1 call |
| 3 | Multi-selector — AI generates 5 alternative selector strategies, tries each | Tries role → label → placeholder → text → CSS until one works | 1 call |
| 4 | Visual analysis — takes a screenshot, AI visually locates the element | Button has no text/role but AI sees it in the screenshot | 1 call |
| 5 | Decompose — breaks the failing step into 3-5 simpler micro-actions | "Fill login form and submit" → separate fill email + fill password + click submit | 1 call |
If all 5 levels fail, the step is marked failed and saved to the healing report for your review.
How you use it
- During test runs — healing happens automatically. If Level 2 fixes a broken
#login-btn, your test passes and continues. - After the run — healed selectors are saved as pending suggestions (not auto-applied to source files).
- Review & accept — in Studio → Self-Healing page, or from CLI:
npx assuremind apply-healing # interactive review: accept/reject each fix npx assuremind apply-healing --yes # accept all in CI - Accepted fixes are written back to your
.test.jsonfiles — next run uses the healed code permanently.
CI/CD tip: Add
npx assuremind apply-healing --yesas a post-test step so healed selectors are committed back automatically. Enablehealing.autoPRin Settings to auto-create a GitHub PR with the fixes.
CI/CD
# GitHub Actions
- name: Run tests
env:
AI_PROVIDER: google
GOOGLE_API_KEY: ${{ secrets.GOOGLE_API_KEY }}
GOOGLE_MODEL: gemini-2.5-pro
run: npx assuremind run --all --ciAlso supports GitLab CI and Jenkins — or use the built-in CI Config Generator in Studio (Run Config → Generate CI Config).
CI Config Generator (Run Config → Generate CI Config):
- Generates a workflow for GitHub Actions, GitLab CI, or Jenkins from your current run config.
- The YAML is shown in a preview; click ✎ Edit to customise it (branches, Node version, extra steps…). Your edits apply to Copy, Download, and Write to repo. Use ↺ Reset to regenerate.
- Copy / Download are always available.
- Write to repo (opt-in) writes the file into your project at its standard path (
.github/workflows/assuremind.yml,.gitlab-ci.yml, orJenkinsfile). Enable it in Settings → CI/CD Integration → "Write CI files to repo". It only writes the file — it does not commit or push. Review the change and commit it from the Git Control Center when ready.
Exit code 0 = all passed · 1 = failures.
Enterprise Features
Faker Data
100+ @faker-js/faker generators across 16 categories — generate realistic random data without code.
| Generator | Example output |
|-----------|---------------|
| person.fullName | Sarah Johnson |
| internet.email | [email protected] |
| phone.number | +1-555-123-4567 |
| finance.amount | 249.99 |
| location.city | San Francisco |
| Sequence USER-{n} | USER-001, USER-002, USER-003 |
Browse by category or search, select multiple tokens at once — selected tokens appear as removable chips, and clicking "Insert N tokens" inserts them all comma-separated (e.g. {{FAKE_PERSON_FIRSTNAME}}, {{FAKE_PERSON_LASTNAME}}, {{FAKE_INTERNET_EMAIL}}). Great for form filling. Tokens resolve to fresh random values on every test run — no more "email already exists" failures.
File Upload & Download
Upload — In the Test Editor, click the Files button (next to Fake Data) to upload a fixture file. It's saved in the repo at fixtures/uploads/ (so it's committed and works in CI) and inserted into your step as a {{FILE:name}} token. The token resolves to the file's path at runtime:
Step: Upload {{FILE:resume.pdf}} to the Resume field
Code: await page.getByLabel('Resume').setInputFiles('{{FILE:resume.pdf}}');For a file-chooser button, register the listener before the click (in one step):
const fileChooserPromise = page.waitForEvent('filechooser');
await page.getByRole('button', { name: 'Choose File' }).click();
(await fileChooserPromise).setFiles('{{FILE:resume.pdf}}');Download — Downloads are captured automatically during a run (no saveAs, no fs needed) and saved to results/downloads/<runId>/. The step waits until the file finishes downloading. After the run, open Reports → Run Reports, expand the run, and the Downloads panel lists every captured file — click any to save it to your machine.
Example steps (type these in plain English):
# Upload
Upload {{FILE:resume.pdf}} to the Resume field
Upload {{FILE:resume.pdf}} to the Resume field and wait for 'Upload complete' # most reliable
Upload {{FILE:photo.png}} # page's file input
# Download (file finishes downloading before the step passes)
Download the "Export CSV" link
Click the "Export" button to download
Download the file by clicking "Report PDF"Tip: for uploads, the …and wait for '<success text>' form is the most reliable (uploads have no completion event); otherwise the step waits for the network to settle.
Visual Regression
Pixel-perfect screenshot comparison — catch UI changes that functional tests miss. Configure in Settings → Visual Regression. Review diffs in Reports → Visual Diffs tab.
- Enable in Settings → Visual Regression, then toggle the Eye icon on any step in the Test Editor
- First run captures baseline screenshots (committed to git)
- Subsequent runs compare pixel-by-pixel using
pixelmatch - Diff > threshold → step fails with highlighted diff image
- Review in Reports → Visual Diffs → Approve (update baseline) or Reject (it's a bug)
baselines/ # committed to git
├── login-suite/login-test/
│ ├── step-3-chromium-1920x1080.png
│ └── step-3-firefox-1920x1080.png
results/visual-diffs/{runId}/ # gitignored, per-run
├── step-3-baseline.png
├── step-3-actual.png
└── step-3-diff.png # red highlightsCI/CD Integration
Quality gates, PR comments, and notifications — configured from Studio, executed in pipelines.
| Feature | What it does | |---------|-------------| | Quality gates | Set min pass rate (95%), max duration, required tags — pipeline fails if gate fails | | PR comments | Auto-post test results as GitHub PR comment or GitLab MR note | | Notifications | Slack, Teams, Email, custom webhook — trigger on failure, every run, or healing events |
# GitHub Actions — full integration
- name: Run tests
env:
AI_PROVIDER: anthropic
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
run: npx assuremind run --all --ci
# Quality gate auto-evaluates, PR comment auto-posts, Slack notifies on failureDocumentation
| Resource | Location | |----------|----------| | Getting started | docs/GETTING-STARTED.md | | Writing test steps (UI & API examples) | docs/WRITING-STEPS.md | | Studio walkthrough | docs/STUDIO.md | | CLI reference | docs/CLI-REFERENCE.md | | Contributing | CONTRIBUTING.md | | All AI providers | .env.example | | Built-in docs | Studio → Docs page | | Enterprise features | Studio → Faker Data, CI/CD pages; Visual Regression in Settings + Reports |
🌐 Website: https://assuremind.in/
🗣️ GitHub Discussions: github.com/assuremind/assuremind-community/discussions
📧 Email: [email protected]
License
Apache 2.0 — see LICENSE for details.
Built with ❤️ by Deepak Hiremath
