AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
SKILL verified MIT Self-run

Vscode Browser Test

skill-piyabordee-vscode-browser-test-vscode-browser-test · by Piyabordee

Use when the user wants to test, verify, screenshot, click, fill, or interact with a web app, an HTML mockup (e.g. `docs/mockup/**/*.html`), a local dev server at `127.0.0.1` / `localhost`, or any URL the agent can reach. Triggers on phrases like "test this page", "open in browser", "click the button", "verify the form", "screenshot the dashboard", "check responsive", "playwright test" (redirect…

No reviews yet
0 installs
16 views
0.0% view→install

Install

$ agentstack add skill-piyabordee-vscode-browser-test-vscode-browser-test

✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access Used
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/skill-piyabordee-vscode-browser-test-vscode-browser-test)

Reliability & compatibility

Security review passed
0 installs to date
no reviews yet
1mo ago

Declared compatibility

Claude CodeClaude Desktop

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of Vscode Browser Test? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

VS Code Native Browser Test

Why this skill exists

Do NOT install Playwright, Puppeteer, headless Chrome, or any browser-automation npm package in this project. VS Code already ships an integrated browser plus a full set of browser-agent tools that work on Windows, macOS, and Linux with zero install. This skill teaches the agent to use them.

If a user asks for "Playwright tests" or "headless browser tests", interpret the intent (verify a web page) and use the native tools below — do not run npm install -D playwright.


When to load this skill

  • User says: "test this page", "open it in the browser", "screenshot the dashboard", "click the X button", "fill the form", "verify the layout", "check responsive"
  • User points at: file://.../*.html, http://127.0.0.1:3000, http://localhost:3000, any dev server URL
  • User wants an accessibility audit, form validation test, responsive layout check, or auth flow test against any web page
  • Target surface: any HTML mockup, any local dev server (Next.js, Vite, Astro, plain Express, etc.), or any reachable URL

Prerequisites (one-time, per workspace)

Browser agent tools are opt-in. Confirm these before assuming the tools work:

  1. VS Code setting workbench.browser.enableChatTools must be true.
  • If false, tell the user to set it in settings.json and reload.
  • This setting is org-managed in some environments — surface that if it's locked.
  1. Chat tools picker must show all browser tools enabled, grouped under Built-in > Browser.
  • Chat view → Tools button (chat input area) → Built-in > Browser → all 10 toggled on.
  1. Note: Browser agent tools are experimental and may change. Don't hard-code behavior on edge cases.

If prerequisites are not met, do not try to npm install playwright as a fallback. Ask the user to enable the setting or use the tools picker.

Auto-enabling browser tools with @browser

If the tools are present in the runtime but disabled in the chat session, the user can explicitly enable them for a single prompt by adding the @browser reference at the start of their message:

@browser open http://127.0.0.1:3000 and screenshot the dashboard

This injects the browser tools into the current turn without requiring the user to open the tools picker every time. Useful for:

  • One-off tests when the user only occasionally runs browser checks.
  • Sharing the skill in chat sessions where tools are normally off.
  • Avoiding the friction of toggling 10 switches in the tools picker.

> Note: @browser is a per-turn reference. It does not change the user's persistent tools-picker settings. Each new prompt needs @browser again unless the user keeps the tools enabled.


The 10 native browser tools

> The agent does not need to "declare" these tools exist — they are already wired into the chat runtime. The skill's job is to teach when and in what order to use them.

| # | Tool | Purpose | When to reach for it | |---|------|---------|----------------------| | 1 | openBrowserPage | Open a URL or local file in the integrated browser | First step for every test session. Pass absolute file:// URL for HTML mockups, http://127.0.0.1: for dev servers. | | 2 | readPage | Get a structured snapshot (DOM, ARIA, headings, links) | Before any interaction — understand the page before clicking anything. | | 3 | screenshotPage | Capture viewport or a specific element (via selector/ref) as PNG | Before AND after each interaction, to prove visual state changed. Pass ref/selector to screenshot just one component. | | 4 | clickElement | Click a button/link/element by ref or selector | User actions: submit, navigate, toggle, open menu. | | 5 | typeInPage | Type into a focused input, or focus+type via ref/selector | Form fields, search boxes, text areas. Supports key parameter for Enter/Tab/etc. | | 6 | hoverElement | Hover over an element | Reveal tooltips, dropdown menus, hover-only states. | | 7 | dragElement | Drag from one element to another | Sortable lists, file drops, sliders, drag-and-drop reordering. | | 8 | handleDialog | Accept/dismiss alert/confirm/prompt | Any modal dialog. For file choosers, pass selectFiles with absolute paths. | | 9 | navigatePage | Go to URL, go back/forward, or reload | SPA route changes (navigatePage type=url), in-app navigation, refresh after code change. | | 10 | runPlaywrightCode | Run arbitrary Playwright code in the page context | Last resort for: complex multi-step assertions, file upload via setInputFiles, evaluating JS, network interception, waiting for custom conditions. Do not use for simple clicks/typing. |

Tool selection priority (cheapest → most powerful)

openBrowserPage → readPage → screenshotPage → clickElement/typeInPage/hoverElement/dragElement → handleDialog → navigatePage → runPlaywrightCode

Reach for runPlaywrightCode only when no higher-level tool can do the job. The native tools give the user a better visual confirmation and are easier to step through.


Standard workflow (the build → test → debug loop)

Use this loop whenever the user asks to verify a web page works:

Step 1 — Open the page

  • HTML mockup: openBrowserPage url=file:///absolute/path/to/your/mockup.html (must be an absolute file:// URL)
  • Dev server: openBrowserPage url=http://127.0.0.1: (verify the port from package.json, terminal output, or framework config)
  • External: pass the full https://... URL

Step 2 — Read before acting

  • Call readPage to enumerate buttons, inputs, links, headings.
  • Identify the element ref or stable selector you'll need for clickElement / typeInPage.

Step 3 — Screenshot the baseline

  • screenshotPage to capture the initial visual state.
  • Save the mental model: "this is what the page looks like before my action."

Step 4 — Interact

  • Use the appropriate tool from the table above.
  • One screenshot per action, in this order:
  1. Screenshot before
  2. Perform the action
  3. readPage or screenshotPage after to confirm the change

Step 5 — Verify and report

  • State what passed and what failed with concrete evidence (screenshot ref, error message, observed text).
  • If a bug is found:
  1. Identify the smallest code change that fixes it.
  2. Apply the fix in the repo.
  3. navigatePage type=reload (or reopen the page) and re-run the failing step.
  4. Re-screenshot to prove the fix.

Step 6 — Close out

  • Summarize: actions taken, screenshots captured, bugs found, fixes applied, what still needs human review.

Session isolation rules (important!)

  • Pages opened by the agent run in a private, in-memory, ephemeral session. They do not share cookies, localStorage, or login state with the user's regular browser tabs.
  • This is by design — protects the user's browsing data.
  • If the test needs the user's logged-in state (e.g., a session cookie), the user must:
  1. Open the page themselves in the integrated browser (Command Palette → Browser: Open Integrated Browser).
  2. Navigate to the page and log in.
  3. Click Share with Agent in the browser toolbar.
  4. Tell the agent which shared page to use.
  • Shared pages use the user's real session (cookies, login). Agent-opened pages do not. Don't conflate the two.

Common scenarios

Use these recipes for the most common browser-verification asks. Adapt the URLs and selectors to the target under test.

1. Screenshot an HTML mockup for review

User: "screenshot the dashboard mockup"
→ openBrowserPage url=file:///absolute/path/to/docs/mockup/dashboard.html
→ screenshotPage
→ report the file path or describe the visual

2. Verify a form (login, signup, contact, etc.)

User: "test the login form"
→ openBrowserPage url=http://127.0.0.1:3000/login   (after the dev server is running)
→ readPage     → identify inputs
→ typeInPage   → fill username
→ typeInPage   → fill password
→ screenshotPage → before submit
→ clickElement  → submit button
→ handleDialog  → if a confirm/alert pops up
→ screenshotPage → after submit
→ verify redirect (or expected success state) on the next page

3. Test a stateful form with validation

  • When the form has conditional rules (e.g. "comment required when rating

readPage → verify page loaded navigatePage type=reload → re-test after a code change


If the port is unknown, read the terminal output to find the actual bound port before calling `openBrowserPage`.

---

## When NOT to use this skill

These tools are designed for **interactive, in-editor verification**. Do not use them for:

- **Large E2E test suites:** Not a replacement for Playwright/Cypress in CI. Use for ad-hoc and development-loop testing only.
- **Cross-browser testing:** The integrated browser is Chromium-based. For Firefox/Safari/Edge compatibility, use dedicated tools.
- **Headless CI/CD pipelines:** These tools require the VS Code UI and an agent session. They will **not** work in a headless CI environment (e.g., GitHub Actions without a display).
- **Visual regression testing at scale:** `screenshotPage` is great for manual checks, but lacks automated diffing of specialized visual-regression tools.
- **Performance testing:** No network timing, no performance metrics, no load generation.
- **Parallel test execution:** One agent session, one browser. No multi-page parallel runs.

---

## Troubleshooting

If the agent gets stuck or tools fail, check these common issues:

1. **Tool not found / not executing:**
   - Verify `workbench.browser.enableChatTools` is `true` in VS Code settings.
   - Open the Chat tools picker and ensure the specific tool (e.g., `clickElement`) is toggled on under **Built-in > Browser**.
2. **`ref` not found or stale:**
   - The page may have reloaded or changed dynamically. Call `readPage` again to get a fresh snapshot and new `ref` values.
3. **Action executed but nothing happened:**
   - The element might be covered by an overlay or not interactive. Try `hoverElement` first, or check if a dialog needs handling via `handleDialog`.
4. **Page content is empty or still loading:**
   - Use `runPlaywrightCode` with `await page.waitForLoadState('networkidle')` or `await page.waitForTimeout(2000)` before reading or screenshotting.
5. **"Share with Agent" not working:**
   - The user must open the page in the **VS Code integrated browser** (Command Palette → **Browser: Open Integrated Browser**), not their external browser, before clicking **Share with Agent**.
6. **Dev server returned blank page:**
   - Confirm `npm run dev` is actually running in the background. Read the terminal output to see the real port and any compile errors.
7. **CORS / network error in console:**
   - Expected for `file://` pages that fetch external resources. Not a tool failure. Check the page's own network handling.

---

## Anti-patterns — do NOT do these

| Don't | Why |
|-------|-----|
| `npm install playwright` / `npm install -D @playwright/test` | The native tools do everything Playwright can for an in-editor test loop, with zero install. Save the project the dependency. |
| `npx playwright install` | Downloads ~300MB of browser binaries. Native tools already have a browser. |
| Write a `*.spec.ts` Playwright file for ad-hoc verification | Use the native tools for one-off checks. Reserve Playwright for full E2E suites that need to run in CI. |
| Spawn a child process running Puppeteer | Same reason as Playwright. |
| Use `curl` to "test" a web page | `curl` returns HTML source, not a rendered page. Use the browser tools to see what the user sees. |
| Skip `readPage` and guess selectors | Always read the page first. Refs/selectors change between versions. |
| Skip the before/after screenshot | Without a baseline, you can't prove the action changed anything. |
| Try to share cookies between agent-opened and user-opened pages | Impossible by design. Use the **Share with Agent** flow for shared session state. |

---

## Quick reference: when the user says X, do Y

| User says | Action |
|-----------|--------|
| `"@browser ..."` at start of prompt | Browser tools are force-enabled for this turn. Proceed with `openBrowserPage` / `screenshotPage` / etc. directly. |
| "test this page" / "verify it works" | Open + read + screenshot + interact + verify |
| "screenshot X" | `openBrowserPage` → `screenshotPage` |
| "click the Save button" | `readPage` → find Save ref → `clickElement` → `screenshotPage` to confirm |
| "fill in the form" | `readPage` → list inputs → `typeInPage` each → `screenshotPage` |
| "does it work on mobile?" | Native tools + `runPlaywrightCode` to resize viewport, or instruct user to use DevTools device emulation |
| "check accessibility" | `readPage` + visual screenshot + (optional) `audit` skill for deeper checks |
| "playwright test" | **Do not install Playwright.** Use the 10 native tools above. If they hit a wall, escalate to the user. |
| "test the form submission" | Fill → submit → `handleDialog` if needed → verify redirect/state change |
| "open the mockup" | `openBrowserPage` with `file://` absolute path |

---

## Minimal end-to-end example

User: "open the dashboard mockup and verify the sidebar shows the expected menu items."

1. `openBrowserPage url=file:///absolute/path/to/docs/mockup/dashboard.html`
2. `screenshotPage` — baseline.
3. `readPage` — look for the sidebar nav, list its items.
4. If all expected items present (use `readPage` to enumerate the actual labels) → pass, report what was found.
5. If fewer or extra items → fail, report the exact text observed.
6. Summary in 2-3 lines: ✅ passed / ❌ failed, with the observed data.

---

## Related

- [VS Code browser agent testing guide](https://code.visualstudio.com/docs/copilot/guides/browser-agent-testing-guide) — upstream docs
- [Integrated browser in VS Code](https://code.visualstudio.com/docs/debugtest/integrated-browser)
- [Claude skills documentation](https://docs.claude.com/en/docs/agents-and-tools/agent-skills/overview) — how this skill is loaded by Claude Code
- [Agent Skills specification](https://agentskills.io) — community spec for portable skill format

## Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [Piyabordee](https://github.com/Piyabordee)
- **Source:** [Piyabordee/vscode-browser-test](https://github.com/Piyabordee/vscode-browser-test)
- **License:** MIT

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.