loading…
Search for a command to run...
loading…
QA automation tool for browser testing with MCP server support
QA automation tool for browser testing with MCP server support
QA automation CLI for browser testing and E2E test management.
# Install globally
npm install -g @desplega.ai/qa-use
# Or use with npx
npx @desplega.ai/qa-use setup
qa-use setup # Configure your API key
qa-use test init # Initialize test directory with example
Create qa-tests/login.yaml:
name: Login Test
app_config: your-app-config-id
steps:
- action: goto
url: /login
- action: fill
target: email input
value: [email protected]
- action: click
target: login button
- action: to_be_visible
target: dashboard
qa-use test run login # Run single test
qa-use test run --all # Run all tests
| Command | Description |
|---|---|
qa-use test init |
Initialize test directory with example |
qa-use test run <name> |
Run a test by name |
qa-use test run --all |
Run all tests in qa-tests/ |
qa-use test list |
List local tests |
qa-use test list --cloud |
List cloud tests |
qa-use test validate <name> |
Validate test syntax |
qa-use test sync --push |
Push local tests to cloud |
qa-use test sync --pull |
Pull cloud tests to local |
qa-use test export <id> |
Export cloud test to local file |
Run qa-use test --help for all options.
Interactive browser control for test development and debugging:
qa-use browser create # Start browser session
qa-use browser goto https://example.com
qa-use browser snapshot # Get element refs like [ref=e3]
qa-use browser click e3 # Click by element ref
qa-use browser fill e5 "hello" # Fill input field
qa-use browser run # Interactive REPL mode
| Command | Description |
|---|---|
qa-use browser create |
Start browser session |
qa-use browser goto <url> |
Navigate to URL |
qa-use browser snapshot |
Get page element refs |
qa-use browser click <ref> |
Click element by ref |
qa-use browser fill <ref> <value> |
Fill input field |
qa-use browser screenshot <path> |
Save screenshot |
qa-use browser run |
Interactive REPL mode |
qa-use browser close |
Close browser session |
qa-use browser status --list |
List active sessions across processes |
Run qa-use browser --help for the full list of 29 browser commands.
browser create auto-tunnels when your target is localhost and the API is remote. For standalone tunnels (or cross-process registry inspection) use qa-use tunnel:
qa-use tunnel start http://localhost:3000 --hold # Hold a public tunnel
qa-use tunnel ls # List active tunnels
qa-use tunnel status <target|hash> # Detail for one entry
qa-use tunnel close <target|hash> # Force-release a tunnel
qa-use doctor # Reap stale sessions/tunnels
qa-use doctor --dry-run # Preview what would be reaped
| Command | Description |
|---|---|
qa-use tunnel ls |
List active tunnels in the registry |
qa-use tunnel status <target> |
Show detail for a single tunnel |
qa-use tunnel close <target> |
Force-release a tunnel (kills detached holder) |
qa-use doctor |
Reap stale sessions/tunnels (dead PIDs) |
Note:
qa-use tunnel *is the CLI-side cross-process tunnel registry, distinct fromqa-use mcp tunnelwhich is the MCP-mode persistent tunnel wrapper (see below).
Dynamic API access powered by live OpenAPI (/api/v1/openapi.json) with local cache fallback.
qa-use api ls # List endpoints from live/cached OpenAPI
qa-use api /api/v1/tests # Call endpoint (method inferred)
qa-use api -X POST /api/v1/tests-actions/run --input body.json
qa-use api ls --refresh # Force refresh OpenAPI cache
qa-use api ls --offline # Use cached OpenAPI only
| Command | Description |
|---|---|
qa-use api ls |
List /api/v1/* endpoints from OpenAPI |
qa-use api <path> |
Send API request to endpoint |
qa-use api ... --refresh |
Force OpenAPI spec refresh |
qa-use api ... --offline |
Use cached spec without network |
If live spec fetch fails, qa-use falls back to the last cached spec and prints a stale-cache warning.
| Command | Description |
|---|---|
qa-use setup |
Interactive configuration (API key, base URL, etc.) |
qa-use info |
Show current configuration |
qa-use install-deps |
Install Playwright browsers |
Tests are YAML files with steps that describe user interactions:
name: Checkout Flow
app_config: your-app-id
variables:
email: [email protected]
depends_on: login-test # Optional dependency
steps:
- action: goto
url: /cart
- action: click
target: checkout button
- action: fill
target: email input
value: $email
- action: to_be_visible
target: order confirmation
Supported actions:
| Category | Actions |
|---|---|
| Navigation | goto, go_back, go_forward, reload |
| Input | fill, type, click, hover, press, check, uncheck, select_option |
| Waiting | wait_for_selector, wait_for_timeout, wait_for_load_state |
| Assertions | to_be_visible, to_have_text, to_have_url, to_contain_text, to_be_checked |
| Advanced | ai_action, ai_assertion, extract_structured_data |
See SETUP.md for the complete test definition guide.
QA_USE_API_KEY=xxx # Required: Your desplega.ai API key
QA_USE_REGION=us # Optional: "us" or "auto" (default)
Alternatively, create a .qa-use.json in your project root or ~/.qa-use.json in your home directory:
{
"$schema": "https://qa-use.dev/cli-schema.json",
"api_key": "your-api-key-here",
"region": "us"
}
Precedence (first wins):
.qa-use.json in current directory~/.qa-use.json in home directory| Variable | Description | Default |
|---|---|---|
QA_USE_API_KEY |
API key for authentication | (required) |
QA_USE_API_URL |
API endpoint | https://api.desplega.ai |
QA_USE_APP_URL |
App URL | https://app.desplega.ai |
QA_USE_REGION |
Region (us or auto) |
auto |
QA_USE_DEFAULT_APP_CONFIG_ID |
Default app config | (from API key) |
# .github/workflows/e2e.yml
name: E2E Tests
on: [push, pull_request]
jobs:
e2e:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
- name: Run E2E Tests
env:
QA_USE_API_KEY: ${{ secrets.QA_USE_API_KEY }}
run: |
npm install -g @desplega.ai/qa-use
qa-use test run --all --download
- name: Upload Results
if: always()
uses: actions/upload-artifact@v4
with:
name: e2e-results
path: /tmp/qa-use/downloads/
Use the qa-use plugin with Claude Code to automatically verify PRs:
# Add from the marketplace
claude plugin marketplace add desplega-ai/qa-use
# Then install the plugin
claude plugin install [email protected]
# Verify a feature works
/qa-use:verify "the login form accepts valid credentials"
# Verify PR changes
/qa-use:verify-pr
See SETUP.md for advanced CI workflows including AI-assisted test generation.
qa-use includes a Claude Code plugin for AI-assisted testing workflows:
# Add from the marketplace
claude plugin marketplace add desplega-ai/qa-use
# Then install the plugin
claude plugin install [email protected]
# Install the skill
npx skills add https://github.com/desplega-ai/qa-use --skill qa-use
Available skills:
| Skill | Description |
|---|---|
/qa-use:verify <description> |
Verify a feature works through browser automation |
/qa-use:verify-pr |
Verify PR changes with automated browser testing |
/qa-use:explore |
Explore a web page interactively |
/qa-use:record |
Record browser actions into a test definition |
/qa-use:test-run |
Run E2E tests |
/qa-use:test-validate |
Validate test syntax |
For AI assistant integration (Claude Desktop, VS Code Copilot, Cursor, etc.), qa-use includes an MCP server with full browser automation capabilities.
qa-use mcp # Start stdio server (default)
qa-use mcp --http # Start HTTP/SSE server
qa-use mcp tunnel # Start persistent tunnel mode
See MCP.md for complete MCP server documentation including:
git clone https://github.com/desplega-ai/qa-use.git
cd qa-use
bun install
bun run build
bun run dev
Note: This project uses bun as the package manager.
See CONTRIBUTING.md for development guidelines.
MIT
Add this to claude_desktop_config.json and restart Claude Desktop.
{
"mcpServers": {
"qa-use": {
"command": "npx",
"args": [
"-y",
"@desplega.ai/qa-use"
]
}
}
}