skills/chrome-testing/SKILL.md
# Chrome Testing Skill Reference for manual QA testing of Telegram Mini Apps using Chrome browser automation tools. ## Quick Reference: MCP Tools | Tool | Purpose | When to Use | |------|---------|-------------| | `navigate` | Load Mini App URL | Start of test, navigation | | `computer` | Click, type, interact | Buttons, forms, UI elements | | `form_input` | Type in text fields | Complex input validation | | `read_network_requests` | Inspect HTTP traffic | API validation, auth testing | | `re
npx skillsauth add andvl1/claude-plugin skills/chrome-testingInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Reference for manual QA testing of Telegram Mini Apps using Chrome browser automation tools.
| Tool | Purpose | When to Use |
|------|---------|-------------|
| navigate | Load Mini App URL | Start of test, navigation |
| computer | Click, type, interact | Buttons, forms, UI elements |
| form_input | Type in text fields | Complex input validation |
| read_network_requests | Inspect HTTP traffic | API validation, auth testing |
| read_console_messages | Check JS errors | Error detection, debugging |
| javascript_tool | Run JS in page | State inspection, DOM querying |
| find | Locate elements | Element verification |
| read_page | Get full page content | DOM structure analysis |
URL: http://localhost:5173
SDK: Mocked via @telegram-apps/sdk
Use: Daily development testing
Download: https://github.com/erfanmola/TMA-Studio
Features: 90%+ Mini App API coverage
Use: Pre-release testing
Requires: HTTPS via Cloudflare Tunnel
Setup: cloudflared tunnel --url http://localhost:5173
Use: Final validation
navigate("http://localhost:5173")
screenshot() -> verify page loads
computer(click, element)
screenshot() -> verify state changed
computer(click, saveButton)
read_network_requests() ->
- Verify: PUT /api/v1/miniapp/chats/{id}/settings
- Check: Authorization: tma {initData}
- Status: 200 OK
read_console_messages() ->
- No console.error entries
- No "Failed to fetch" messages
javascript_tool("window.appState?.selectedChat")
javascript_tool("localStorage.getItem('key')")
| Check | How |
|-------|-----|
| Correct endpoint | read_network_requests() + urlPattern |
| HTTP method | GET/POST/PUT/DELETE as expected |
| Auth header | Authorization: tma <initData> present |
| Request body | JSON payload matches expected |
| Check | Expected | |-------|----------| | Success | Status 200, data returned | | Not found | Status 404, error message | | Unauthorized | Status 401, no data exposed | | Validation error | Status 400, field errors |
GET /api/v1/miniapp/chats - List user's chats
GET /api/v1/miniapp/chats/{id} - Get chat details
GET /api/v1/miniapp/chats/{id}/settings - Get chat settings
PUT /api/v1/miniapp/chats/{id}/settings - Update settings
GET /api/v1/miniapp/chats/{id}/blocklist - Get blocklist
POST /api/v1/miniapp/chats/{id}/blocklist - Add pattern
DELETE /api/v1/miniapp/chats/{id}/blocklist/{id} - Remove pattern
GET /api/v1/miniapp/chats/{id}/locks - Get locks
PUT /api/v1/miniapp/chats/{id}/locks - Update locks
Cannot read property 'WebApp' of undefined -> Telegram SDK not loaded
initData is undefined -> Not in Telegram context
Authorization header missing -> API client misconfigured
CORS error -> Backend CORS not configured
React key prop warning -> Add unique keys to lists
useEffect dependency warning -> Fix dependency array
Unused variable warning -> Clean up code
window.Telegram?.WebApp?.initDataUnsafe?.user
window.Telegram?.WebApp?.platform
window.Telegram?.WebApp?.version
window.__store?.getState?.()
localStorage.getItem('lastSelectedChat')
sessionStorage.getItem('formData')
document.querySelector('.error-message')?.textContent
document.querySelector('button[type="submit"]').disabled
getComputedStyle(document.documentElement).getPropertyValue('--tg-theme-bg-color')
navigate("http://localhost:5173")computer(click, chatSelector) -> select chatcomputer(click, collectionToggle)computer(click, saveButton)read_network_requests() -> PUT /chats/{id}/settingsjavascript_tool("localStorage.getItem('settings')")read_network_requests() -> Status 401read_console_messages() -> No sensitive data leakedread_network_requests() -> No request made (frontend validation)read_network_requests() -> Request made, Status 200/400chrome://inspect/#devicesjavascript_tool(`
const style = getComputedStyle(document.documentElement);
return {
bg: style.getPropertyValue('--tg-theme-bg-color'),
text: style.getPropertyValue('--tg-theme-text-color'),
hint: style.getPropertyValue('--tg-theme-hint-color'),
button: style.getPropertyValue('--tg-theme-button-color')
};
`)
| Limitation | Workaround | |-----------|-----------| | HTTPS required in prod | Cloudflare Tunnel for local HTTPS | | initData expires ~1hr | Refresh app or use mock | | Can't test MainButton in browser | Use TMA Studio | | iOS requires macOS | Use Android or Desktop | | WebSocket may not work | Test HTTP polling first |
development
Effective Go patterns — idiomatic code, testing, benchmarks, project layout. Always use Go 1.21+ patterns.
development
Go microservices — gRPC, REST, cloud-native patterns, service discovery, circuit breakers, observability, health checks, graceful shutdown.
development
Go concurrency mastery — goroutines, channels, context, sync primitives, patterns, performance.
testing
Android WorkManager for guaranteed background execution - use for deferred tasks, periodic syncs, file uploads, notifications, and task chains. Covers CoroutineWorker, constraints, chaining, testing, and troubleshooting. Use when implementing background work that needs reliable execution across app restarts and doze mode.