MCP Test Automation Framework
README.md
# π€ MCP Test Automation Framework
> **SQA Test Automation** powered by **Claude/Deepseek AI** with **self-healing locators** and **auto GitHub checkin**
---
## ποΈ Architecture
```
mcp-automation/
βββ src/
β βββ mcp/ # MCP Server (connects AI to browser)
β β βββ mcp-server.ts # MCP tool definitions & handlers
β β βββ index.ts
β βββ core/ # Core modules
β β βββ browser-manager.ts # Playwright browser lifecycle
β β βββ config.ts # Settings loader
β β βββ logger.ts # Logging utility
β βββ healing/ # Self-Healing Engine
β β βββ locator-healer.ts # Alternative locator strategies
β βββ scripts/ # Utility scripts
β β βββ git-auto-checkin.ts # Auto commit & push to GitHub
β βββ tests/ # Test definitions
β β βββ types.ts
β β βββ google-search.ts
β βββ mcp-server-entry.ts # MCP server entry point
β βββ runner.ts # Direct test runner
βββ config/
β βββ settings.json # Framework configuration
βββ logs/ # Run logs & screenshots
βββ .github/workflows/ # CI/CD pipeline
βββ package.json
βββ tsconfig.json
βββ README.md
```
---
## π How It Works
```
1. AI (Claude/Deepseek) calls MCP tool
β
βΌ
2. Playwright executes browser action
β
βΌ
3. Element not found?
β
βΌ
4. Self-Healing Engine kicks in
βββββββββββββββββββββββββββββββ
β Tries: role β text β β
β placeholder β label β testIdβ
β β CSS β XPath β aria-label β
βββββββββββββββββββββββββββββββ
β
βΌ
5. Found? β Logs healing action, proceeds
Not found? β Screenshot, reports failure
β
βΌ
6. GitHub Auto Checkin
βββββββββββββββββββββββββββββββ
β Creates branch β
β test-run/<name>-<timestamp> β
β Stages & commits all files β
β Pushes to remote β
βββββββββββββββββββββββββββββββ
```
---
## π Quick Start
### 1. Install dependencies
```bash
npm install
npx playwright install chromium
```
### 2. Configure
Edit `config/settings.json`:
- Set AI provider and API keys (via env vars)
- Configure browser options
- Set GitHub remote URL
### 3. Set API Keys (optional β for AI features)
```bash
set ANTHROPIC_API_KEY=sk-ant-... # For Claude
set DEEPSEEK_API_KEY=sk-... # For Deepseek
```
### 4. Run tests directly
```bash
npm run dev
```
### 5. Start MCP Server (for AI assistant connection)
```bash
npm run mcp-server
```
Then connect your AI assistant (Claude/Deepseek) to this MCP server.
---
## π οΈ MCP Tools Available to AI
| Tool | Description |
|------|-------------|
| `navigate` | Navigate to a URL |
| `click` | Click an element (with self-healing) |
| `type` / `fill` | Type text into fields (with self-healing) |
| `get_text` | Get element text (with self-healing) |
| `wait_for_selector` | Wait for element to appear |
| `screenshot` | Capture page screenshot |
| `press_key` | Press keyboard keys |
| `run_test` | Execute a full test case |
| `auto_checkin` | Commit & push to GitHub |
| `get_healing_summary` | View self-healing stats |
---
## π§ͺ Self-Healing
When a locator fails, the engine tries these strategies in order:
1. `getByRole` β Find by ARIA role
2. `getByText` β Find by text content
3. `getByPlaceholder` β Find by placeholder attribute
4. `getByLabel` β Find by associated label
5. `getByTestId` β Find by `data-testid`
6. CSS selector β Try original selector as CSS
7. CSS alternatives β e.g., `textarea` β `input`, attribute variations
8. `[aria-label]` β Find by aria-label attribute
All healing actions are logged to `logs/healing-log.json`.
---
## π€ GitHub Auto Checkin
After each test run, the framework automatically:
1. Creates a new branch: `test-run/<test-name>-<timestamp>`
2. Stages all changed files (tests, logs, screenshots)
3. Commits with descriptive message
4. Pushes to remote
---
## π§ Configuration
See `config/settings.json` for all options:
| Section | Key | Description |
|---------|-----|-------------|
| `ai` | `provider` | `"auto"`, `"claude"`, or `"deepseek"` |
| `browser` | `headless` | `true`/`false` for headed mode |
| `selfHealing` | `enabled` | Enable/disable self-healing |
| `selfHealing` | `maxRetries` | Max healing attempts per locator |
| `github` | `autoCheckin` | Enable auto commit/push |
| `logging` | `level` | `"debug"`, `"info"`, `"warn"`, `"error"` |
---
## π License
MIT