Playwright

by microsoft

92.5k stars
4.4k downloads
Not rated
GitHub Website

About

Playwright is a framework for Web Testing and Automation. It allows testing Chromium, Firefox and WebKit with a single API.

Details

Author
microsoft
GitHub stars
92,479
Downloads
4,376
Categories
Automation

- Cross-browser automation (Chromium, Firefox, WebKit) on Linux, macOS, Windows
- Structured accessibility snapshots for AI agents without vision models
- Auto-wait and web-first assertions with no artificial timeouts
- Resilient locators based on role, label, placeholder, or test ID
- Test isolation with fresh browser contexts per test
- Tracing, screenshots, and video capture on test failures

Setting up with Highlight

This MCP is not yet compatible with Highlight’s one-click setup. However, you can still use it with Highlight by following these steps:

  1. Download and install Highlight from highlightai.com/download
  2. Navigate to the plugins tab and select "Add Custom Plugin"
  3. Configure the plugin with the settings below
    Plugin Name Playwright
    Command (node, npx, python, etc.)

    Please refer to the README for specific instructions on how to obtain API keys or other required environment variables.

  4. Enable "Start Automatically" if you want the plugin to start when Highlight launches

From the repository

To use Playwright as an MCP server for AI agents, add it to your MCP client (VS Code, Cursor, Claude Desktop, Windsurf, etc.) with the command npx @playwright/mcp@latest. For Claude Code, run claude mcp add playwright npx @playwright/mcp@latest. The agent then interacts with pages via tools that navigate, fill forms, take screenshots, mock networks, and manage storage – all using element references from the accessibility tree.

slack_list_channels

List public or pre-defined channels in the workspace with pagination

slack_post_message

Post a new message to a Slack channel

slack_reply_to_thread

Reply to a specific message thread in Slack

slack_add_reaction

Add a reaction emoji to a message

slack_get_channel_history

Get recent messages from a channel

slack_get_thread_replies

Get all replies in a message thread

slack_get_users

Get a list of all users in the workspace with their basic profile information

slack_get_user_profile

Get detailed profile information for a specific user

Claude Desktop / Cursor

Paste into your MCP client config file to install this server.

{
    "mcpServers": {
        "playwright": {
            "slack": {
                "command": "npx",
                "args": [
                    "-y",
                    "@modelcontextprotocol/server-slack"
                ],
                "env": {
                    "SLACK_BOT_TOKEN": "xoxb-your-bot-token",
                    "SLACK_TEAM_ID": "T01234567"
                }
            }
        }
    }
}

McpServers

{
    "slack": {
        "command": "npx",
        "args": [
            "-y",
            "@modelcontextprotocol/server-slack"
        ],
        "env": {
            "SLACK_BOT_TOKEN": "xoxb-your-bot-token",
            "SLACK_TEAM_ID": "T01234567"
        }
    }
}
# 🎭 Playwright [![npm version](https://img.shields.io/npm/v/playwright.svg)](https://www.npmjs.com/package/playwright) <!-- GEN:chromium-version-badge -->[![Chromium version](https://img.shields.io/badge/chromium-151.0.7922.10-blue.svg?logo=google-chrome)](https://www.chromium.org/Home)<!-- GEN:stop --> <!-- GEN:firefox-version-badge -->[![Firefox version](https://img.shields.io/badge/firefox-152.0.4-blue.svg?logo=firefoxbrowser)](https://www.mozilla.org/en-US/firefox/new/)<!-- GEN:stop --> <!-- GEN:webkit-version-badge -->[![WebKit version](https://img.shields.io/badge/webkit-26.5-blue.svg?logo=safari)](https://webkit.org/)<!-- GEN:stop --> [![Join Discord](https://img.shields.io/badge/join-discord-informational)](https://aka.ms/playwright/discord) ## [Documentation](https://playwright.dev) | [API reference](https://playwright.dev/docs/api/class-playwright) Playwright is a framework for web automation and testing. It drives Chromium, Firefox, and WebKit with a single API — in your tests, in your scripts, and as a tool for AI agents. ## Get Started Choose the path that fits your workflow: | | Best for | Install | |---|---|---| | **[Playwright Test](#playwright-test)** | End-to-end testing | `npm init playwright@latest` | | **[Playwright CLI](#playwright-cli)** | Coding agents (Claude Code, Copilot) | `npm i -g @playwright/cli@latest` | | **[Playwright MCP](#playwright-mcp)** | AI agents and LLM-driven automation | `npx @playwright/mcp@latest` | | **[Playwright Library](#playwright-library)** | Browser automation scripts | `npm i playwright` | | **[VS Code Extension](#vs-code-extension)** | Test authoring and debugging in VS Code | [Install from Marketplace](https://marketplace.visualstudio.com/items?itemName=ms-playwright.playwright) | --- ## Playwright Test Playwright Test is a full-featured test runner built for end-to-end testing. It runs tests across Chromium, Firefox, and WebKit with full browser isolation, auto-waiting, and web-first assertions. ### Install ```bash npm init playwright@latest ``` Or add manually: ```bash npm i -D @playwright/test npx playwright install ``` ### Write a test ```TypeScript import { test, expect } from '@playwright/test'; test('has title', async ({ page }) => { await page.goto('https://playwright.dev/'); await expect(page).toHaveTitle(/Playwright/); }); test('get started link', async ({ page }) => { await page.goto('https://playwright.dev/'); await page.getByRole('link', { name: 'Get started' }).click(); await expect(page.getByRole('heading', { name: 'Installation' })).toBeVisible(); }); ``` ### Run tests ```bash npx playwright test ``` Tests run in parallel across all configured browsers, in headless mode by default. Each test gets a fresh browser context — full isolation with near-zero overhead. ### Key capabilities **Auto-wait and web-first assertions.** No artificial timeouts. Playwright waits for elements to be actionable, and assertions automatically retry until conditions are met. **Locators.** Find elements with resilient locators that mirror how users see the page: ```TypeScript page.getByRole('button', { name: 'Submit' }) page.getByLabel('Email') page.getByPlaceholder('Search...') page.getByTestId('login-form') ``` **Test isolation.** Each test runs in its own browser context — equivalent to a fresh browser profile. Save authentication state once and reuse it across tests: ```TypeScript // Save state after login await page.context().storageState({ path: 'auth.json' }); // Reuse in other tests test.use({ storageState: 'auth.json' }); ``` **Tracing.** Capture execution traces, screenshots, and videos on failure. Inspect every action, DOM snapshot, network request, and console message in the [Trace Viewer](https://playwright.dev/docs/trace-viewer): ```TypeScript // playwright.config.ts export default defineConfig({ use: { trace: 'on-first-retry', }, }); ``` ```bash npx playwright show-trace trace.zip ``` <!-- TODO: screenshot of trace viewer --> **Parallelism.** Tests run in parallel by default across all configured browsers. [Full testing documentation](https://playwright.dev/docs/intro) --- ## Playwright CLI [Playwright CLI](https://github.com/microsoft/playwright-cli) is a command-line interface for browser automation designed for coding agents. It's more token-efficient than MCP — commands avoid loading large tool schemas and accessibility trees into the model context. ### Install ```bash npm install -g @playwright/cli@latest ``` Optionally install skills for richer agent integration: ```bash playwright-cli install --skills ``` ### Usage Point your coding agent at a task: ``` Test the "add todo" flow on https://demo.playwright.dev/todomvc using playwright-cli. Take screenshots for all successful and failing scenarios. ``` Or run commands directly: ```bash playwright-cli open https://demo.playwright.dev/todomvc/ --headed playwright-cli type "Buy groceries" playwright-cli press Enter playwright-cli screenshot ``` ### Session monitoring Use `playwright-cli show` to open a visual dashboard with live screencast previews of all running browser sessions. Click any session to zoom in and take remote control. ```bash playwright-cli show ``` <!-- TODO: screenshot of playwright-cli show dashboard --> [Full CLI documentation](https://playwright.dev/agent-cli/introduction) | [GitHub](https://github.com/microsoft/playwright-cli) --- ## Playwright MCP The [Playwright MCP server](https://github.com/microsoft/playwright-mcp) gives AI agents full browser control through the [Model Context Protocol](https://modelcontextprotocol.io). Agents interact with pages using structured accessibility snapshots — no vision models or screenshots required. ### Setup Add to your MCP client (VS Code, Cursor, Claude Desktop, Windsurf, etc.): ```json { "mcpServers": { "playwright": { "command": "npx", "args": ["@playwright/mcp@latest"] } } } ``` **One-click install for VS Code:** [<img src="https://img.shields.io/badge/VS_Code-VS_Code?style=flat-square&label=Install%20MCP%20Server&color=0098FF" alt="Install in VS Code" />](https://insiders.vscode.dev/redirect?url=vscode%3Amcp%2Finstall%3F%257B%2522name%2522%253A%2522playwright%2522%252C%2522command%2522%253A%2522npx%2522%252C%2522args%2522%253A%255B%2522%2540playwright%252Fmcp%2540latest%2522%255D%257D) **For Claude Code:** ```bash claude mcp add playwright npx @playwright/mcp@latest ``` ### How it works Ask your AI assistant to interact with any web page: ``` Navigate to https://demo.playwright.dev/todomvc and add a few todo items. ``` The agent sees the page as a structured accessibility tree: ``` - heading "todos" [level=1] - textbox "What needs to be done?" [ref=e5] - listitem: - checkbox "Toggle Todo" [ref=e10] - text: "Buy groceries" ``` It uses element refs like `e5` and `e10` to click, type, and interact — deterministically and without visual ambiguity. Tools cover navigation, form filling, screenshots, network mocking, storage management, and more. [Full MCP documentation](https://playwright.dev/mcp/introduction) | [GitHub](https://github.com/microsoft/playwright-mcp) --- ## Playwright Library Use `playwright` as a library for browser automation scripts — web scraping, PDF generation, screenshot capture, and any workflow that needs programmatic browser control without a test runner. ### Install ```bash npm i playwright ``` ### Examples **Take a screenshot:** ```TypeScript import { chromium } from 'playwright'; const browser = await chromium.launch(); const page = await browser.newPage(); await page.goto('https://playwright.dev/'); await page.screenshot({ path: 'screenshot.png' }); await browser.close(); ``` **Generate a PDF:** ```TypeScript import { chromium } from 'playwright'; const browser = await chromium.launch(); const page = await browser.newPage(); await page.goto('https://playwright.dev/'); await page.pdf({ path: 'page.pdf', format: 'A4' }); await browser.close(); ``` **Emulate a mobile device:** ```TypeScript import { chromium, devices } from 'playwright'; const browser = await chromium.launch(); const context = await browser.newContext(devices['iPhone 15']); const page = await context.newPage(); await page.goto('https://playwright.dev/'); await page.screenshot({ path: 'mobile.png' }); await browser.close(); ``` **Intercept network requests:** ```TypeScript import { chromium } from 'playwright'; const browser = await chromium.launch(); const page = await browser.newPage(); await page.route('**/*.{png,jpg,jpeg}', route => route.abort()); await page.goto('https://playwright.dev/'); await browser.close(); ``` [Library documentation](https://playwright.dev/docs/library) | [API reference](https://playwright.dev/docs/api/class-playwright) --- ## VS Code Extension The [Playwright VS Code extension](https://marketplace.visualstudio.com/items?itemName=ms-playwright.playwright) brings test running, debugging, and code generation directly into your editor. <!-- TODO: hero screenshot of VS Code with Playwright sidebar --> **Run and debug tests** from the editor with a single click. Set breakpoints, inspect variables, and step through test execution with a live browser view. **Generate tests with CodeGen.** Click "Record new" to open a browser — navigate and interact with your app while Playwright writes the test code for you. **Pick locators.** Hover over any element in the browser to see the best available locator, then click to copy it to your clipboard. **Trace Viewer integration.** Enable "Show Trace Viewer" in the sidebar to get a full execution trace after each test run — DOM snapshots, network requests, console logs, and screenshots at every step. [Install the extension](https://marketplace.visualstudio.com/items?itemName=ms-playwright.playwright) | [VS Code guide](https://playwright.dev/docs/getting-started-vscode) --- ## Cross-Browser Support | | Linux | macOS | Windows | | :--- | :---: | :---: | :---: | | Chromium<sup>1</sup> <!-- GEN:chromium-version -->151.0.7922.10<!-- GEN:stop --> | :white_check_mark: | :white_check_mark: | :white_check_mark: | | WebKit <!-- GEN:webkit-version -->26.5<!-- GEN:stop --> | :white_check_mark: | :white_check_mark: | :white_check_mark: | | Firefox <!-- GEN:firefox-version -->152.0.4<!-- GEN:stop --> | :white_check_mark: | :white_check_mark: | :white_check_mark: | Headless and headed execution on all platforms. <sup>1</sup> Uses [Chrome for Testing](https://developer.chrome.com/blog/chrome-for-testing) by default. ## Other Languages Playwright is also available for [Python](https://playwright.dev/python/docs/intro), [.NET](https://playwright.dev/dotnet/docs/intro), and [Java](https://playwright.dev/java/docs/intro). ## Resources * [Documentation](https://playwright.dev) * [API reference](https://playwright.dev/docs/api/class-playwright) * [MCP server](https://github.com/microsoft/playwright-mcp) * [CLI for coding agents](https://github.com/microsoft/playwright-cli) * [VS Code extension](https://github.com/microsoft/playwright-vscode) * [Contribution guide](CONTRIBUTING.md) * [Changelog](https://github.com/microsoft/playwright/releases) * [Discord](https://aka.ms/playwright/discord)
No reviews yet — be the first

Sign in to leave a review

Use Google, GitHub, or an email account so ratings stay tied to real people.

Email sign in

No reviews posted yet.