Prompt directory
Impulse.directory
HomeBrowseStacks
Sign inCreate an account
    rule

    Cursor Browser Testing

    impulse-lab/cursor-browser-testing·v1·updated October 3, 2025
    Michel from Impulse
    Michel from Impulse@kan-a-pesh·Impulse Lab
    Cursor / Rules
    Content
    ---
    description: Standards and workflow for using Browser MCP tools to test UI changes
    globs:
    alwaysApply: true
    ---
    
    # Browser Testing Workflow
    Standards and workflow for using Browser MCP tools to test UI changes. Auto-included for all files.
    <rule>
    name: browser_testing
    description: Standards and workflow for using Browser MCP tools to test UI changes. Auto-included for all files.
    globs: ["**/*"]
    actions:
    - type: suggest
    message: |
    Follow this workflow when testing UI components or features:
    - Whenever you implement or modify UI components, you MUST test them using the browser tools before completing the task.
    - **CRITICAL:** Before starting any test, you MUST COMPLETELY CLEAR the `/app/test/page.tsx` file and start fresh.
    - Create or overwrite `/app/test/page.tsx` with your test component:
    - `// Example test page structure
    export default function TestPage() {
      return (
        <div className="min-h-screen p-8">
          <h1 className="text-2xl font-bold mb-4">Component Test</h1>
          {/* Your component tests here */}
        </div>
      );
    }
    `
    - **Rules for test page:**
        - ALWAYS completely clear the existing content first
        - Include clear labels for what you're testing
        - Test all variants and states of the component
        - Include interactive elements if applicable
        - Use semantic HTML and proper accessibility attributes
    - `// Navigate to the test page
    mcp_cursor-playwright_browser_navigate({
      url: "http://localhost:3000/test"
    })
    
    // Take a snapshot to see the page structure
    mcp_cursor-playwright_browser_snapshot()
    `
    - Use appropriate browser tools to test functionality:
    - **Clicking Elements:**
    - `mcp_cursor-playwright_browser_click({
      element: "Description of button",
      ref: "element-ref-from-snapshot"
    })
    `
    - **Typing in Inputs:**
    - `mcp_cursor-playwright_browser_type({
      element: "Description of input",
      ref: "element-ref-from-snapshot",
      text: "Test input text"
    })
    `
    - **Filling Forms:**
    - `mcp_cursor-playwright_browser_fill_form({
      fields: [
        { name: "Email field", type: "textbox", ref: "ref1", value: "test@example.com" },
        { name: "Accept terms", type: "checkbox", ref: "ref2", value: "true" }
      ]
    })
    `
    - **Taking Screenshots:**
    - `// For visual verification
    mcp_cursor-playwright_browser_take_screenshot({
      filename: "component-test-result.png",
      fullPage: true
    })
    `
    - After interactions:
        1. Take another snapshot to verify changes
        2. Check console messages: `mcp_cursor-playwright_browser_console_messages()`
        3. Check network requests if relevant: `mcp_cursor-playwright_browser_network_requests()`
        4. Take screenshots for visual confirmation
    - After testing is complete and everything works:
    - `pnpm checks
    `
    - Fix any linting or TypeScript errors before finalizing.
    - **MANDATORY:** After completing all tests, inform the user with:
        1. **What was tested:** Brief description of the component/feature
        2. **Test results:** What worked, what didn't
        3. **Test page contents:** Show the user the COMPLETE content of `/app/test/page.tsx` so they can run the same tests manually
        4. **Validation results:** Output from `pnpm checks`
        5. **How to test manually:** Instructions like "Run `pnpm dev` and visit http://localhost:3000/test"
    - **Navigation:**
        - `browser_navigate`: Navigate to a URL
        - `browser_navigate_back`: Go back to previous page
        - `browser_tabs`: Manage multiple browser tabs
    - **Inspection:**
        - `browser_snapshot`: Get accessibility tree (best for actions)
        - `browser_take_screenshot`: Capture visual screenshot
        - `browser_console_messages`: View console logs
        - `browser_network_requests`: View network activity
    - **Interaction:**
        - `browser_click`: Click elements
        - `browser_type`: Type into inputs
        - `browser_fill_form`: Fill multiple form fields
        - `browser_hover`: Hover over elements
        - `browser_drag`: Drag and drop
        - `browser_select_option`: Select dropdown options
        - `browser_press_key`: Press keyboard keys
    - **Advanced:**
        - `browser_evaluate`: Run JavaScript on the page
        - `browser_wait_for`: Wait for text or time
        - `browser_handle_dialog`: Handle alerts/confirms
        - `browser_file_upload`: Upload files
        - `browser_resize`: Change viewport size
    - Before marking a task as complete:
        - [ ] Test page (`/app/test/page.tsx`) completely cleared and rewritten
        - [ ] All component variants tested
        - [ ] Interactive elements work correctly
        - [ ] Visual appearance verified with screenshots
        - [ ] Console has no errors
        - [ ] Code quality checks pass (`pnpm checks`)
        - [ ] User informed of test page contents
        - [ ] Manual testing instructions provided
        1. **Always use snapshot before actions** - You need element refs
        2. **Test all interactive states** - Hover, focus, disabled, error
        3. **Test responsive behavior** - Use `browser_resize` to test different viewports
        4. **Verify accessibility** - Check ARIA attributes in snapshots
        5. **Check console for errors** - Silent errors can hide bugs
        6. **Test edge cases** - Empty states, long text, invalid inputs
        7. **Clean up test page** - Completely clear before each new test
        8. **Document test cases** - Add comments in test page explaining what's being tested
    - **Testing a Button Component:**
    - `// 1. Create test page with all button variants
    // 2. Navigate and snapshot
    // 3. Click each button variant
    // 4. Verify visual feedback and actions
    // 5. Screenshot final result
    `
    - **Testing a Form Component:**
    - `// 1. Create test page with form
    // 2. Navigate and snapshot
    // 3. Fill form fields
    // 4. Test validation (empty, invalid, valid)
    // 5. Submit and verify
    // 6. Check console and network for submission
    `
    - **Testing Interactive UI:**
    - `// 1. Create test page with component
    // 2. Navigate and snapshot
    // 3. Interact (clicks, typing, hover)
    // 4. Snapshot after each interaction
    // 5. Verify state changes
    // 6. Screenshot for visual verification
    `
    examples:
    - input: |
    // ❌ DON'T: Skip testing and assume it works
    // [Implement component]
    // [Mark task as complete without testing]
    output: |
    // ✅ DO: Always test with browser tools
    // [Implement component]
    // [Create test page]
    // [Use browser tools to verify]
    // [Run pnpm checks]
    // [Report results to user]
    - input: |
    // ❌ DON'T: Append to existing test page
    export default function TestPage() {
    return <div>Old test still here...</div>
    }
    // [Add new test below]
    output: |
    // ✅ DO: COMPLETELY CLEAR the test page first
    // Step 1: Clear /app/test/page.tsx completely
    // Step 2: Write fresh test content
    export default function TestPage() {
    return (
    <div className="p-8">
    <h1>Button Component Test</h1>
    {/* Fresh, clean test */}
    </div>
    );
    }
    - input: |
    // ❌ DON'T: Test without taking snapshots
    mcp_cursor-playwright_browser_navigate({ url: "http://localhost:3000/test" })
    mcp_cursor-playwright_browser_click({ element: "button", ref: "???" })
    output: |
    // ✅ DO: Always snapshot before interacting
    mcp_cursor-playwright_browser_navigate({ url: "http://localhost:3000/test" })
    mcp_cursor-playwright_browser_snapshot()  // Get element refs
    mcp_cursor-playwright_browser_click({
    element: "Submit button",
    ref: "ref-from-snapshot"
    })
    mcp_cursor-playwright_browser_snapshot()  // Verify change
    - input: |
    // ❌ DON'T: Finish without informing user
    // [Complete testing]
    // "Done!"
    output: |
    // ✅ DO: Always inform user with complete details
    // Testing complete! Results:
    //
    // Tested: Button component with 5 variants
    // Results: All variants render and respond correctly
    //
    // Test page content (/app/test/page.tsx):
    // `typescript   // export default function TestPage() { ... }   // `
    //
    // Validation: `pnpm checks` passed
    //
    // To test manually:
    // 1. Run `pnpm dev`
    // 2. Visit http://localhost:3000/test
    // 3. Try clicking each button variant
    metadata:
    priority: high
    version: 1.0
    </rule>

    Install with the impulse CLI

    $npx @impulselab/directory impulselab/cursor-browser-testing

    Stats

    Views
    50
    Saves
    0

    Owner

    impulse-logo

    Impulse Lab

    Official artifact