Playwright MCP
resmiServer MCP Playwright resmi untuk otomatisasi browser, inspeksi halaman, tangkapan layar, dan interaksi web dari Claude, Cursor, serta agen AI lainnya.
Apa yang bisa Anda lakukan dengan Playwright MCP?
- Penjelajahan pohon aksesibilitas — Minta AI Anda untuk menavigasi halaman dan membaca snapshot aksesibilitas terstruktur, tanpa memerlukan model visi.
- Sesi browser persisten — Pertahankan status login antar percakapan melalui
--user-data-diratau--storage-stateuntuk alur kerja yang terautentikasi. - Otomatisasi multi-browser — Jalankan Chromium, Firefox, WebKit, atau Edge dengan bendera
--browseruntuk pengujian lintas mesin. - Emulasi perangkat — Simulasikan perangkat seluler seperti "iPhone 15" melalui
--deviceatau mode--mobilegenerik untuk pengujian responsif. - Pembuatan kode — Hasilkan skrip uji Playwright dalam TypeScript, Python, Java, atau C# menggunakan opsi
--codegen. - Konteks uji terisolasi — Jalankan sesi dengan bendera
--isolateduntuk membuang semua status setelah setiap penutupan browser.
Dokumentasi
Playwright MCP
Server Model Context Protocol (MCP) yang menyediakan kemampuan otomatisasi browser menggunakan Playwright. Server ini memungkinkan LLM untuk berinteraksi dengan halaman web melalui snapshot aksesibilitas terstruktur, tanpa memerlukan screenshot atau model yang disetel secara visual.
Playwright MCP vs Playwright CLI
Paket ini menyediakan antarmuka MCP ke Playwright. Jika Anda menggunakan coding agent, Anda mungkin lebih diuntungkan dengan menggunakan CLI+SKILLS.
-
CLI: Coding agent modern semakin mengutamakan alur kerja berbasis CLI yang diekspos sebagai SKILLs daripada MCP karena pemanggilan CLI lebih hemat token: mereka menghindari memuat skema alat yang besar dan pohon aksesibilitas yang bertele-tele ke dalam konteks model, memungkinkan agen untuk bertindak melalui perintah yang ringkas dan dirancang khusus. Ini membuat CLI + SKILLs lebih cocok untuk coding agent dengan throughput tinggi yang harus menyeimbangkan otomatisasi browser dengan basis kode yang besar, pengujian, dan penalaran dalam jendela konteks yang terbatas.
Pelajari lebih lanjut tentang Playwright CLI dengan SKILLS. -
MCP: MCP tetap relevan untuk loop agen khusus yang diuntungkan dari status persisten, introspeksi yang kaya, dan penalaran iteratif atas struktur halaman, seperti otomatisasi eksplorasi, pengujian yang dapat menyembuhkan diri sendiri, atau alur kerja otonom jangka panjang di mana mempertahankan konteks browser yang berkelanjutan lebih penting daripada biaya token.
Fitur Utama
- Cepat dan ringan. Menggunakan pohon aksesibilitas Playwright, bukan input berbasis piksel.
- Ramah LLM. Tidak memerlukan model visi, beroperasi murni pada data terstruktur.
- Aplikasi alat yang deterministik. Menghindari ambiguitas yang umum terjadi pada pendekatan berbasis screenshot.
Persyaratan
- Node.js 18 atau lebih baru
- VS Code, Cursor, Windsurf, Claude Desktop, Goose, Grok, Junie, atau klien MCP lainnya
Memulai
Pertama, instal server Playwright MCP dengan klien Anda.
Konfigurasi standar berfungsi di sebagian besar alat:
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": [
"@playwright/mcp@latest"
]
}
}
}
Amp
Tambahkan melalui layar pengaturan ekstensi VS Code Amp atau dengan memperbarui file settings.json Anda:
"amp.mcpServers": {
"playwright": {
"command": "npx",
"args": [
"@playwright/mcp@latest"
]
}
}
Pengaturan CLI Amp:
Tambahkan melalui perintah amp mcp add di bawah ini
amp mcp add playwright -- npx @playwright/mcp@latest
Antigravity
Tambahkan melalui pengaturan Antigravity atau dengan memperbarui file konfigurasi Anda:
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": [
"@playwright/mcp@latest"
]
}
}
}
Claude Code
Gunakan CLI Claude Code untuk menambahkan server Playwright MCP:
claude mcp add playwright npx @playwright/mcp@latest
Claude Desktop
Ikuti panduan instalasi MCP, gunakan konfigurasi standar di atas.
Cline
Ikuti instruksi di bagian Mengonfigurasi Server MCP
Contoh: Pengaturan Lokal
Tambahkan berikut ini ke file cline_mcp_settings.json Anda:
{
"mcpServers": {
"playwright": {
"type": "stdio",
"command": "npx",
"timeout": 30,
"args": [
"-y",
"@playwright/mcp@latest"
],
"disabled": false
}
}
}
Codex
Gunakan CLI Codex untuk menambahkan server Playwright MCP:
codex mcp add playwright npx "@playwright/mcp@latest"
Atau, buat atau edit file konfigurasi ~/.codex/config.toml dan tambahkan:
[mcp_servers.playwright]
command = "npx"
args = ["@playwright/mcp@latest"]
Untuk informasi lebih lanjut, lihat dokumentasi MCP Codex.
Copilot
Gunakan CLI Copilot untuk menambahkan server Playwright MCP secara interaktif:
/mcp add
Atau, buat atau edit file konfigurasi ~/.copilot/mcp-config.json dan tambahkan:
{
"mcpServers": {
"playwright": {
"type": "local",
"command": "npx",
"tools": [
"*"
],
"args": [
"@playwright/mcp@latest"
]
}
}
}
Untuk informasi lebih lanjut, lihat dokumentasi CLI Copilot.
Cursor
Klik tombol untuk menginstal:
Atau instal secara manual:
Buka Cursor Settings -> MCP -> Add new MCP Server. Beri nama sesuai keinginan Anda, gunakan tipe command dengan perintah npx @playwright/mcp@latest. Anda juga dapat memverifikasi konfigurasi atau menambahkan argumen seperti perintah dengan mengklik Edit.
Factory
Gunakan CLI Factory untuk menambahkan server Playwright MCP:
droid mcp add playwright "npx @playwright/mcp@latest"
Atau, ketik /mcp di dalam Factory droid untuk membuka UI interaktif untuk mengelola server MCP.
Untuk informasi lebih lanjut, lihat dokumentasi MCP Factory.
Gemini CLI
Ikuti panduan instalasi MCP, gunakan konfigurasi standar di atas.
Goose
Klik tombol untuk menginstal:
Atau instal secara manual:
Buka Advanced settings -> Extensions -> Add custom extension. Beri nama sesuai keinginan Anda, gunakan tipe STDIO, dan atur command menjadi npx @playwright/mcp. Klik "Add Extension".
Grok
Gunakan CLI Grok untuk menambahkan server Playwright MCP:
grok mcp add playwright -- npx @playwright/mcp@latest
Atau, buat atau edit file konfigurasi ~/.grok/config.toml dan tambahkan:
[mcp_servers.playwright]
command = "npx"
args = ["@playwright/mcp@latest"]
Untuk informasi lebih lanjut, lihat dokumentasi MCP Grok.
Junie
Untuk menambahkan server Playwright MCP di CLI Junie:
- Ketik
/mcp - Tekan
Ctrl+Auntuk menambahkan server MCP baru - Pilih Playwright dari daftar
Atau, tambahkan ke .junie/mcp/mcp.json:
{
"mcpServers": {
"Playwright": {
"command": "npx",
"args": [
"-y",
"@playwright/mcp@latest"
]
}
}
}
Untuk informasi lebih lanjut, lihat dokumentasi konfigurasi MCP Junie.
Kiro
Ikuti dokumentasi Server MCP. Misalnya di .kiro/settings/mcp.json:
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": [
"@playwright/mcp@latest"
]
}
}
}
LM Studio
Klik tombol untuk menginstal:
Atau instal secara manual:
Buka Program di sidebar kanan -> Install -> Edit mcp.json. Gunakan konfigurasi standar di atas.
opencode
Ikuti dokumentasi Server MCP. Misalnya di ~/.config/opencode/opencode.json:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"playwright": {
"type": "local",
"command": [
"npx",
"@playwright/mcp@latest"
],
"enabled": true
}
}
}
Qodo Gen
Buka panel obrolan Qodo Gen di VSCode atau IntelliJ → Connect more tools → + Add new MCP → Tempel konfigurasi standar di atas.
Klik Save.
VS Code
Klik tombol untuk menginstal:
Atau instal secara manual:
Ikuti panduan instalasi MCP, gunakan konfigurasi standar di atas. Anda juga dapat menginstal server Playwright MCP menggunakan CLI VS Code:
# For VS Code
code --add-mcp '{"name":"playwright","command":"npx","args":["@playwright/mcp@latest"]}'
Setelah instalasi, server Playwright MCP akan tersedia untuk digunakan dengan agen GitHub Copilot Anda di VS Code.
Warp
Buka Settings -> AI -> Manage MCP Servers -> + Add untuk menambahkan Server MCP. Gunakan konfigurasi standar di atas.
Atau, gunakan perintah garis miring /add-mcp di prompt Warp dan tempel konfigurasi standar dari atas:
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": [
"@playwright/mcp@latest"
]
}
}
}
Windsurf
Ikuti dokumentasi MCP Windsurf. Gunakan konfigurasi standar di atas.
Konfigurasi
Server Playwright MCP mendukung argumen berikut. Argumen tersebut dapat diberikan dalam konfigurasi JSON di atas, sebagai bagian dari daftar "args":
| Opsi | Deskripsi |
|---|---|
| --allowed-hosts <hosts...> | daftar host yang dipisahkan koma yang diizinkan untuk dilayani oleh server ini. Defaultnya adalah host tempat server terikat. Gunakan '*' untuk menonaktifkan pemeriksaan host. env PLAYWRIGHT_MCP_ALLOWED_HOSTS |
| --allowed-origins | daftar origin TERPERCAYA yang dipisahkan titik koma untuk mengizinkan browser meminta. Defaultnya adalah mengizinkan semua. Penting: tidak berfungsi sebagai batas keamanan dan tidak memengaruhi pengalihan. env PLAYWRIGHT_MCP_ALLOWED_ORIGINS |
| --allow-unrestricted-file-access | mengizinkan akses ke file di luar root workspace. Juga mengizinkan akses tanpa batas ke URL file://. Secara default, akses ke sistem file dibatasi hanya pada direktori root workspace (atau cwd jika tidak ada root yang dikonfigurasi), dan navigasi ke URL file:// diblokir. env PLAYWRIGHT_MCP_ALLOW_UNRESTRICTED_FILE_ACCESS |
| --blocked-origins | daftar origin yang dipisahkan titik koma untuk memblokir permintaan browser. Daftar blokir dievaluasi sebelum daftar izin. Jika digunakan tanpa daftar izin, permintaan yang tidak cocok dengan daftar blokir tetap diizinkan. Penting: tidak berfungsi sebagai batas keamanan dan tidak memengaruhi pengalihan. env PLAYWRIGHT_MCP_BLOCKED_ORIGINS |
| --block-service-workers | memblokir service worker env PLAYWRIGHT_MCP_BLOCK_SERVICE_WORKERS |
| --browser | browser atau saluran chrome yang akan digunakan, nilai yang mungkin: chrome, firefox, webkit, msedge. env PLAYWRIGHT_MCP_BROWSER |
| --caps | daftar kemampuan tambahan yang dipisahkan koma untuk diaktifkan, nilai yang mungkin: vision, pdf, devtools. env PLAYWRIGHT_MCP_CAPS |
| --cdp-endpoint | endpoint CDP untuk terhubung. env PLAYWRIGHT_MCP_CDP_ENDPOINT |
| --cdp-header <headers...> | header CDP yang dikirim dengan permintaan koneksi, dapat ditentukan beberapa kali. env PLAYWRIGHT_MCP_CDP_HEADERS |
| --cdp-timeout | waktu tunggu dalam milidetik untuk terhubung ke endpoint CDP, defaultnya 30000ms env PLAYWRIGHT_MCP_CDP_TIMEOUT |
| --codegen | tentukan bahasa yang digunakan untuk pembuatan kode, nilai yang mungkin: "typescript", "python", "java", "csharp", "none". Defaultnya adalah "typescript". env PLAYWRIGHT_MCP_CODEGEN |
| --config | jalur ke file konfigurasi. env PLAYWRIGHT_MCP_CONFIG |
| --console-level | tingkat pesan konsol yang akan dikembalikan: "error", "warning", "info", "debug". Setiap tingkat mencakup pesan dari tingkat yang lebih parah. env PLAYWRIGHT_MCP_CONSOLE_LEVEL |
| --device | perangkat yang akan ditiru, misalnya: "iPhone 15" env PLAYWRIGHT_MCP_DEVICE |
| --mobile | meniru perangkat seluler generik (Pixel 10 untuk Chromium, iPhone 17 untuk WebKit). Halaman seluler biasanya lebih ringan, yang menghemat token. Tidak dapat digabungkan dengan --device. env PLAYWRIGHT_MCP_MOBILE |
| --executable-path | jalur ke executable browser. env PLAYWRIGHT_MCP_EXECUTABLE_PATH |
| --extension | Terhubung ke instance browser yang sedang berjalan (khusus Edge/Chrome). Memerlukan "Playwright Extension" yang terinstal. env PLAYWRIGHT_MCP_EXTENSION |
| --endpoint | Endpoint browser terikat untuk terhubung. env PLAYWRIGHT_MCP_ENDPOINT |
| --grant-permissions <permissions...> | Daftar izin yang diberikan ke konteks browser, misalnya "geolocation", "clipboard-read", "clipboard-write". env PLAYWRIGHT_MCP_GRANT_PERMISSIONS |
| --headless | menjalankan browser dalam mode headless, dengan tampilan secara default env PLAYWRIGHT_MCP_HEADLESS |
| --host | host untuk mengikat server. Defaultnya adalah localhost. Gunakan 0.0.0.0 untuk mengikat ke semua antarmuka. env PLAYWRIGHT_MCP_HOST |
| --ignore-https-errors | abaikan kesalahan https env PLAYWRIGHT_MCP_IGNORE_HTTPS_ERRORS |
| --init-page <path...> | jalur ke file TypeScript untuk dievaluasi pada objek halaman Playwright env PLAYWRIGHT_MCP_INIT_PAGE |
| --init-script <path...> | jalur ke file JavaScript untuk ditambahkan sebagai skrip inisialisasi. Skrip akan dievaluasi di setiap halaman sebelum skrip halaman mana pun. Dapat ditentukan beberapa kali. env PLAYWRIGHT_MCP_INIT_SCRIPT |
| --isolated | simpan profil browser di memori, jangan simpan ke disk. env PLAYWRIGHT_MCP_ISOLATED |
| --image-responses | apakah akan mengirim respons gambar ke klien. Dapat berupa "allow" atau "omit", Defaultnya adalah "allow". env PLAYWRIGHT_MCP_IMAGE_RESPONSES |
| --no-sandbox | nonaktifkan sandbox untuk semua jenis proses yang biasanya di-sandbox. env PLAYWRIGHT_MCP_NO_SANDBOX |
| --output-dir | jalur ke direktori untuk file keluaran. env PLAYWRIGHT_MCP_OUTPUT_DIR |
| --output-max-size | Ambang batas untuk mengeluarkan file keluaran lama, dalam byte. env PLAYWRIGHT_MCP_OUTPUT_MAX_SIZE |
| --port | port untuk mendengarkan transport SSE. env PLAYWRIGHT_MCP_PORT |
| --proxy-bypass | domain yang dipisahkan koma untuk melewati proxy, misalnya ".com,chromium.org,.domain.com" env PLAYWRIGHT_MCP_PROXY_BYPASS |
| --proxy-server | tentukan server proxy, misalnya "http://myproxy:3128" atau "socks5://myproxy:8080" env PLAYWRIGHT_MCP_PROXY_SERVER |
| --sandbox | aktifkan sandbox untuk semua jenis proses yang biasanya tidak di-sandbox. env PLAYWRIGHT_MCP_SANDBOX |
| --save-session | Apakah akan menyimpan sesi Playwright MCP ke direktori keluaran. env PLAYWRIGHT_MCP_SAVE_SESSION |
| --secrets | jalur ke file yang berisi rahasia dalam format dotenv env PLAYWRIGHT_MCP_SECRETS_FILE |
| --shared-browser-context | gunakan kembali konteks browser yang sama di antara semua klien HTTP yang terhubung. env PLAYWRIGHT_MCP_SHARED_BROWSER_CONTEXT |
| --snapshot-boxes | sertakan kotak pembatas setiap elemen sebagai [box=x,y,width,height] dalam snapshot. Koordinat relatif terhadap viewport, dalam piksel CSS. env PLAYWRIGHT_MCP_SNAPSHOT_BOXES |
| --snapshot-mode | saat mengambil snapshot untuk respons, tentukan mode yang akan digunakan. Dapat berupa "full" atau "none". Defaultnya adalah "full". env PLAYWRIGHT_MCP_SNAPSHOT_MODE |
| --storage-state | jalur ke file status penyimpanan untuk sesi terisolasi. env PLAYWRIGHT_MCP_STORAGE_STATE |
| --test-id-attribute | tentukan atribut yang digunakan untuk id pengujian, defaultnya adalah "data-testid" env PLAYWRIGHT_MCP_TEST_ID_ATTRIBUTE |
| --timeout-action | tentukan waktu tunggu tindakan dalam milidetik, defaultnya 5000ms env PLAYWRIGHT_MCP_TIMEOUT_ACTION |
| --timeout-navigation | tentukan waktu tunggu navigasi dalam milidetik, defaultnya 60000ms env PLAYWRIGHT_MCP_TIMEOUT_NAVIGATION |
| --timeout-settle | berapa lama menunggu setelah setiap tindakan untuk pekerjaan yang dipicu selesai, dalam milidetik, defaultnya 500ms env PLAYWRIGHT_MCP_TIMEOUT_SETTLE |
| --user-agent | tentukan string user agent env PLAYWRIGHT_MCP_USER_AGENT |
| --user-data-dir | jalur ke direktori data pengguna. Jika tidak ditentukan, direktori sementara akan dibuat. env PLAYWRIGHT_MCP_USER_DATA_DIR |
| --viewport-size | tentukan ukuran viewport browser dalam piksel, misalnya "1280x720" env PLAYWRIGHT_MCP_VIEWPORT_SIZE |
Profil pengguna
Anda dapat menjalankan Playwright MCP dengan profil persisten seperti browser biasa (default), dalam konteks terisolasi untuk sesi pengujian, atau terhubung ke browser yang sudah ada menggunakan ekstensi browser.
Profil persisten
Semua informasi yang masuk akan disimpan dalam profil persisten, Anda dapat menghapusnya di antara sesi jika ingin membersihkan status offline.
Profil persisten terletak di lokasi berikut dan Anda dapat menimpanya dengan argumen --user-data-dir.
# Windows
%USERPROFILE%\AppData\Local\ms-playwright\mcp-{channel}-{workspace-hash}
# macOS
- ~/Library/Caches/ms-playwright/mcp-{channel}-{workspace-hash}
# Linux
- ~/.cache/ms-playwright/mcp-{channel}-{workspace-hash}
{workspace-hash} berasal dari root workspace klien MCP, sehingga proyek yang berbeda otomatis mendapatkan profil terpisah.
[!IMPORTANT] Profil persisten hanya dapat digunakan oleh satu instance browser pada satu waktu, sehingga klien MCP yang berjalan bersamaan berbagi workspace yang sama akan bertentangan. Untuk menjalankan beberapa klien secara paralel, mulai setiap klien tambahan dengan
--isolatedatau arahkan ke--user-data-diryang berbeda.
Terisolasi
Dalam mode terisolasi, setiap sesi dimulai dengan profil terisolasi. Setiap kali Anda meminta MCP untuk menutup browser,
sesi ditutup dan semua status penyimpanan untuk sesi ini hilang. Anda dapat memberikan status penyimpanan awal
ke browser melalui contextOptions konfigurasi atau melalui argumen --storage-state. Pelajari lebih lanjut tentang status
penyimpanan di sini.
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": [
"@playwright/mcp@latest",
"--isolated",
"--storage-state={path/to/storage.json}"
]
}
}
}
Ekstensi Browser
Ekstensi Chrome Playwright MCP memungkinkan Anda terhubung ke tab browser yang ada dan memanfaatkan sesi masuk serta status browser Anda. Lihat microsoft/playwright › packages/extension untuk petunjuk instalasi dan pengaturan.
Status awal
Ada beberapa cara untuk memberikan status awal ke konteks browser atau halaman.
Untuk status penyimpanan, Anda dapat:
- Mulai dengan direktori data pengguna menggunakan argumen
--user-data-dir. Ini akan menyimpan semua data browser di antara sesi. - Mulai dengan file status penyimpanan menggunakan argumen
--storage-state. Ini akan memuat cookie dan penyimpanan lokal dari file ke dalam konteks browser terisolasi.
Untuk status halaman, Anda dapat menggunakan:
--init-pageuntuk menunjuk ke file TypeScript yang akan dievaluasi pada objek halaman Playwright. Ini memungkinkan Anda menjalankan kode arbitrer untuk menyiapkan halaman.
// init-page.ts
export default async ({ page }) => {
await page.context().grantPermissions(['geolocation']);
await page.context().setGeolocation({ latitude: 37.7749, longitude: -122.4194 });
await page.setViewportSize({ width: 1280, height: 720 });
};
--init-scriptuntuk menunjuk ke file JavaScript yang akan ditambahkan sebagai skrip inisialisasi. Skrip akan dievaluasi di setiap halaman sebelum skrip halaman mana pun. Ini berguna untuk menimpa API browser atau menyiapkan lingkungan.
// init-script.js
window.isPlaywrightMCP = true;
File konfigurasi
Server Playwright MCP dapat dikonfigurasi menggunakan file konfigurasi JSON. Anda dapat menentukan file konfigurasi
menggunakan opsi baris perintah --config:
npx @playwright/mcp@latest --config path/to/config.json
Skema file konfigurasi
{
/**
* The browser to use.
*/
browser?: {
/**
* The type of browser to use.
*/
browserName?: 'chromium' | 'firefox' | 'webkit';
/**
* Keep the browser profile in memory, do not save it to disk.
*/
isolated?: boolean;
/**
* Path to a user data directory for browser profile persistence.
* Temporary directory is created by default.
*/
userDataDir?: string;
/**
* Launch options passed to
* @see https://playwright.dev/docs/api/class-browsertype#browser-type-launch-persistent-context
*
* This is useful for settings options like `channel`, `headless`, `executablePath`, etc.
*/
launchOptions?: playwright.LaunchOptions;
/**
* Context options for the browser context.
*
* This is useful for settings options like `viewport`.
*/
contextOptions?: playwright.BrowserContextOptions;
/**
* Chrome DevTools Protocol endpoint to connect to an existing browser instance in case of Chromium family browsers.
*/
cdpEndpoint?: string;
/**
* CDP headers to send with the connect request.
*/
cdpHeaders?: Record<string, string>;
/**
* Timeout in milliseconds for connecting to CDP endpoint. Defaults to 30000 (30 seconds). Pass 0 to disable timeout.
*/
cdpTimeout?: number;
/**
* Remote endpoint to connect to an existing Playwright server. May be a
* WebSocket URL string, or a [ConnectOptions] object that mirrors the
* `connectOptions` shape used by the test runner. When passed as an object,
* `exposeNetwork`, `headers`, `slowMo`, and `timeout` are forwarded to the
* underlying connect call.
*/
remoteEndpoint?: string | playwright.ConnectOptions & { endpoint: string };
/**
* Paths to TypeScript files to add as initialization scripts for Playwright page.
*/
initPage?: string[];
/**
* Paths to JavaScript files to add as initialization scripts.
* The scripts will be evaluated in every page before any of the page's scripts.
*/
initScript?: string[];
},
/**
* Connect to a running browser instance (Edge/Chrome only). If specified, `browser`
* config is ignored.
* Requires the "Playwright Extension" to be installed.
*/
extension?: boolean;
server?: {
/**
* The port to listen on for SSE or MCP transport.
*/
port?: number;
/**
* The host to bind the server to. Default is localhost. Use 0.0.0.0 to bind to all interfaces.
*/
host?: string;
/**
* The hosts this server is allowed to serve from. Defaults to the host server is bound to.
* This is not for CORS, but rather for the DNS rebinding protection.
*/
allowedHosts?: string[];
},
/**
* List of enabled tool capabilities. Possible values:
* - 'core': Core browser automation features.
* - 'pdf': PDF generation and manipulation.
* - 'vision': Coordinate-based interactions.
* - 'devtools': Developer tools features.
*/
capabilities?: ToolCapability[];
/**
* Whether to save the Playwright session into the output directory.
*/
saveSession?: boolean;
/**
* Reuse the same browser context between all connected HTTP clients.
*/
sharedBrowserContext?: boolean;
/**
* Secrets are used to replace matching plain text in the tool responses to prevent the LLM
* from accidentally getting sensitive data. It is a convenience and not a security feature,
* make sure to always examine information coming in and from the tool on the client.
*/
secrets?: Record<string, string>;
/**
* The directory to save output files.
*/
outputDir?: string;
/**
* Threshold for evicting old output files, in bytes.
*/
outputMaxSize?: number;
console?: {
/**
* The level of console messages to return. Each level includes the messages of more severe levels. Defaults to "info".
*/
level?: 'error' | 'warning' | 'info' | 'debug';
},
network?: {
/**
* List of origins to allow the browser to request. Default is to allow all. Origins matching both `allowedOrigins` and `blockedOrigins` will be blocked.
*
* Supported formats:
* - Full origin: `https://example.com:8080` - matches only that origin
* - Wildcard port: `http://localhost:*` - matches any port on localhost with http protocol
*/
allowedOrigins?: string[];
/**
* List of origins to block the browser to request. Origins matching both `allowedOrigins` and `blockedOrigins` will be blocked.
*
* Supported formats:
* - Full origin: `https://example.com:8080` - matches only that origin
* - Wildcard port: `http://localhost:*` - matches any port on localhost with http protocol
*/
blockedOrigins?: string[];
};
/**
* Specify the attribute to use for test ids, defaults to "data-testid".
*/
testIdAttribute?: string;
timeouts?: {
/*
* Configures default action timeout: https://playwright.dev/docs/api/class-page#page-set-default-timeout. Defaults to 5000ms.
*/
action?: number;
/*
* Configures default navigation timeout: https://playwright.dev/docs/api/class-page#page-set-default-navigation-timeout. Defaults to 60000ms.
*/
navigation?: number;
/**
* Configures default expect timeout: https://playwright.dev/docs/test-timeouts#expect-timeout. Defaults to 5000ms.
*/
expect?: number;
/**
* How long to wait after each action for triggered work (navigations, requests) to settle before responding. Defaults to 500ms.
*/
settle?: number;
};
/**
* Whether to send image responses to the client. Can be "allow", "omit", or "auto". Defaults to "auto", which sends images if the client can display them.
*/
imageResponses?: 'allow' | 'omit';
snapshot?: {
/**
* When taking snapshots for responses, specifies the mode to use.
*/
mode?: 'full' | 'none';
/**
* Whether to include each element's bounding box as [box=x,y,width,height] in snapshots.
* Coordinates are viewport-relative, in CSS pixels (Element.getBoundingClientRect).
*/
boxes?: boolean;
};
/**
* allowUnrestrictedFileAccess acts as a guardrail to prevent the LLM from accidentally
* wandering outside its intended workspace. It is a convenience defense to catch unintended
* file access, not a secure boundary; a deliberate attempt to reach other directories can be
* easily worked around, so always rely on client-level permissions for true security.
*/
allowUnrestrictedFileAccess?: boolean;
/**
* Specify the language to use for code generation.
*/
codegen?: 'typescript' | 'python' | 'java' | 'csharp' | 'none';
}
Server MCP mandiri
Saat menjalankan browser dengan tampilan di sistem tanpa layar atau dari proses pekerja IDE,
jalankan server MCP dari lingkungan dengan DISPLAY dan berikan flag --port untuk mengaktifkan transport HTTP.
npx @playwright/mcp@latest --port 8931
Kemudian di konfigurasi klien MCP, atur url ke endpoint HTTP:
{
"mcpServers": {
"playwright": {
"url": "http://localhost:8931/mcp"
}
}
}
Keamanan
Playwright MCP bukan batas keamanan. Lihat Praktik Terbaik Keamanan MCP untuk panduan mengamankan penerapan Anda.
Docker
CATATAN: Implementasi Docker saat ini hanya mendukung chromium headless.
{
"mcpServers": {
"playwright": {
"command": "docker",
"args": ["run", "-i", "--rm", "--init", "--pull=always", "mcr.microsoft.com/playwright/mcp"]
}
}
}
Atau jika Anda lebih suka menjalankan kontainer sebagai layanan jangka panjang daripada membiarkan klien MCP memunculkannya, gunakan:
docker run -d -i --rm --init --pull=always \
--entrypoint node \
--name playwright \
-p 8931:8931 \
mcr.microsoft.com/playwright/mcp \
/app/cli.js --headless --browser chromium --no-sandbox --port 8931 --host 0.0.0.0
Server akan mendengarkan pada port host 8931 dan dapat dijangkau oleh klien MCP mana pun.
Anda dapat membangun image Docker sendiri.
docker build -t mcr.microsoft.com/playwright/mcp .
Penggunaan terprogram
import http from 'http';
import { createConnection } from '@playwright/mcp';
import { SSEServerTransport } from '@modelcontextprotocol/sdk/server/sse.js';
http.createServer(async (req, res) => {
// ...
// Creates a headless Playwright MCP server with SSE transport
const connection = await createConnection({ browser: { launchOptions: { headless: true } } });
const transport = new SSEServerTransport('/messages', res);
await connection.connect(transport);
// ...
});
Alat
Otomatisasi inti
- browser_click
- Judul: Klik
- Deskripsi: Melakukan klik pada halaman web
- Parameter:
element(string, opsional): Deskripsi elemen yang dapat dibaca manusia digunakan untuk mendapatkan izin berinteraksi dengan elementarget(string): Referensi elemen target yang tepat dari snapshot halaman, atau pemilih elemen unikdoubleClick(boolean, opsional): Apakah akan melakukan klik ganda alih-alih klik tunggalbutton(string, opsional): Tombol yang akan diklik, default ke kirimodifiers(array, opsional): Tombol pengubah yang akan ditekan
- Hanya-baca: false
- browser_close
- Judul: Tutup browser
- Deskripsi: Menutup halaman
- Parameter: Tidak ada
- Hanya-baca: false
- browser_console_messages
- Judul: Dapatkan pesan konsol
- Deskripsi: Mengembalikan semua pesan konsol
- Parameter:
level(string): Tingkat pesan konsol yang akan dikembalikan. Setiap tingkat mencakup pesan dari tingkat yang lebih parah. Default ke "info".all(boolean, opsional): Mengembalikan semua pesan konsol sejak awal sesi, bukan hanya sejak navigasi terakhir. Default ke false.filename(string, opsional): Nama file untuk menyimpan pesan konsol. Jika tidak disediakan, pesan dikembalikan sebagai teks.
- Hanya-baca: true
- browser_drag
- Judul: Seret mouse
- Deskripsi: Melakukan seret dan lepas antara dua elemen
- Parameter:
startElement(string, opsional): Deskripsi elemen sumber yang dapat dibaca manusia digunakan untuk mendapatkan izin berinteraksi dengan elemenstartTarget(string): Referensi elemen target yang tepat dari snapshot halaman, atau pemilih elemen unikendElement(string, opsional): Deskripsi elemen target yang dapat dibaca manusia digunakan untuk mendapatkan izin berinteraksi dengan elemenendTarget(string): Referensi elemen target yang tepat dari snapshot halaman, atau pemilih elemen unik
- Hanya-baca: false
- browser_drop
- Judul: Lepaskan file atau data ke elemen
- Deskripsi: Lepaskan file atau data bertipe MIME ke elemen, seolah-olah diseret dari luar halaman. Setidaknya satu dari "paths" atau "data" harus disediakan.
- Parameter:
element(string, opsional): Deskripsi elemen yang dapat dibaca manusia digunakan untuk mendapatkan izin berinteraksi dengan elementarget(string): Referensi elemen target yang tepat dari snapshot halaman, atau pemilih elemen unikpaths(array, opsional): Jalur absolut ke file yang akan dilepaskan ke elemen.data(object, opsional): Data yang akan dilepaskan, sebagai peta tipe MIME ke nilai string (misalnya {"text/plain": "halo", "text/uri-list": "https://example.com"}).
- Hanya-baca: false
- browser_evaluate
- Judul: Evaluasi JavaScript
- Deskripsi: Mengevaluasi ekspresi JavaScript pada halaman atau elemen
- Parameter:
element(string, opsional): Deskripsi elemen yang dapat dibaca manusia digunakan untuk mendapatkan izin berinteraksi dengan elementarget(string, opsional): Referensi elemen target yang tepat dari snapshot halaman, atau pemilih elemen unikfunction(string): () => { /* kode / } atau (elemen) => { / kode */ } ketika elemen disediakanfilename(string, opsional): Nama file untuk menyimpan hasil. Jika tidak disediakan, hasil dikembalikan sebagai teks.
- Hanya-baca: false
- browser_file_upload
- Judul: Unggah file
- Deskripsi: Mengunggah satu atau beberapa file
- Parameter:
paths(array, opsional): Jalur absolut ke file yang akan diunggah. Bisa satu file atau beberapa file. Jika dihilangkan, pemilih file dibatalkan.
- Hanya-baca: false
- browser_fill_form
- Judul: Isi formulir
- Deskripsi: Mengisi beberapa bidang formulir
- Parameter:
fields(array): Bidang yang akan diisi
- Hanya-baca: false
- browser_find
- Judul: Temukan di snapshot halaman
- Deskripsi: Mencari snapshot aksesibilitas halaman saat ini untuk teks atau ekspresi reguler. Mengembalikan node snapshot yang cocok dengan beberapa baris konteks di sekitarnya (seperti cuplikan pencarian), masing-masing ditampilkan di bawah jalurnya dari akar pohon, yang lebih murah daripada menangkap seluruh snapshot ketika Anda hanya perlu menemukan elemen dan ref-nya.
- Parameter:
text(string, opsional): Teks biasa untuk dicari di snapshot halaman (pencocokan substring tidak peka huruf besar/kecil). Berikan teks atau regex, bukan keduanya.regex(string, opsional): Ekspresi reguler untuk dicari di snapshot halaman. Pencocokan peka huruf besar/kecil secara default; bungkus pola dalam garis miring untuk menambahkan bendera, misalnya "/error/i" untuk tidak peka huruf besar/kecil. Berikan teks atau regex, bukan keduanya.
- Hanya-baca: true
- browser_handle_dialog
- Judul: Tangani dialog
- Deskripsi: Menangani dialog
- Parameter:
accept(boolean): Apakah akan menerima dialog.promptText(string, opsional): Teks prompt jika dialog adalah prompt.
- Hanya-baca: false
- browser_hover
- Judul: Arahkan mouse
- Deskripsi: Mengarahkan kursor ke elemen di halaman
- Parameter:
element(string, opsional): Deskripsi elemen yang dapat dibaca manusia digunakan untuk mendapatkan izin berinteraksi dengan elementarget(string): Referensi elemen target yang tepat dari snapshot halaman, atau pemilih elemen unik
- Hanya-baca: false
- browser_navigate
- Judul: Navigasi ke URL
- Deskripsi: Navigasi ke URL
- Parameter:
url(string): URL yang akan dinavigasi
- Hanya-baca: false
- browser_navigate_back
- Judul: Kembali
- Deskripsi: Kembali ke halaman sebelumnya dalam riwayat
- Parameter: Tidak ada
- Hanya-baca: false
- browser_network_request
- Judul: Tampilkan detail permintaan jaringan
- Deskripsi: Mengembalikan detail lengkap (header dan badan) dari satu permintaan jaringan, atau satu bagian jika
partdiatur. Gunakan nomor dari browser_network_requests. - Parameter:
index(integer): Indeks permintaan berbasis 1, seperti yang dicetak oleh browser_network_requests.part(string, opsional): Kembalikan hanya bagian permintaan ini. Hilangkan untuk mengembalikan detail lengkap.filename(string, opsional): Nama file untuk menyimpan hasil. Jika tidak disediakan, output dikembalikan sebagai teks.
- Hanya-baca: true
- browser_network_requests
- Judul: Daftar permintaan jaringan
- Deskripsi: Mengembalikan daftar bernomor permintaan jaringan sejak memuat halaman. Gunakan browser_network_request dengan nomor untuk mendapatkan detail lengkap.
- Parameter:
static(boolean): Apakah akan menyertakan sumber daya statis yang berhasil seperti gambar, font, skrip, dll. Default ke false.filter(string, opsional): Hanya kembalikan permintaan yang URL-nya cocok dengan regexp ini (misalnya "/api/.*user").filename(string, opsional): Nama file untuk menyimpan permintaan jaringan. Jika tidak disediakan, permintaan dikembalikan sebagai teks.
- Hanya-baca: true
- browser_press_key
- Judul: Tekan tombol
- Deskripsi: Menekan tombol pada keyboard
- Parameter:
key(string): Nama tombol yang akan ditekan atau karakter yang akan dihasilkan, sepertiArrowLeftataua
- Hanya-baca: false
- browser_resize
- Judul: Ubah ukuran jendela browser
- Deskripsi: Mengubah ukuran jendela browser
- Parameter:
width(number): Lebar jendela browserheight(number): Tinggi jendela browser
- Hanya-baca: false
- browser_run_code_unsafe
- Judul: Jalankan kode Playwright (tidak aman)
- Deskripsi: Menjalankan cuplikan kode Playwright. Tidak aman: mengeksekusi JavaScript arbitrer dalam proses server Playwright dan setara dengan RCE.
- Parameter:
code(string, opsional): Fungsi JavaScript yang berisi kode Playwright untuk dieksekusi. Ini akan dipanggil dengan satu argumen, page, yang dapat Anda gunakan untuk interaksi halaman apa pun. Misalnya:async (page) => { await page.getByRole('button', { name: 'Submit' }).click(); return await page.title(); }filename(string, opsional): Muat kode dari file yang ditentukan. Jika kode dan nama file disediakan, kode akan diabaikan.
- Hanya-baca: false
- browser_select_option
- Judul: Pilih opsi
- Deskripsi: Memilih opsi dalam dropdown
- Parameter:
element(string, opsional): Deskripsi elemen yang dapat dibaca manusia digunakan untuk mendapatkan izin berinteraksi dengan elementarget(string): Referensi elemen target yang tepat dari snapshot halaman, atau pemilih elemen unikvalues(array): Array nilai yang akan dipilih dalam dropdown. Ini bisa satu nilai atau beberapa nilai.
- Hanya-baca: false
- browser_snapshot
- Judul: Snapshot halaman
- Deskripsi: Menangkap snapshot aksesibilitas halaman saat ini, ini lebih baik daripada tangkapan layar
- Parameter:
target(string, opsional): Referensi elemen target yang tepat dari snapshot halaman, atau pemilih elemen unikfilename(string, opsional): Simpan snapshot ke file markdown alih-alih mengembalikannya dalam respons.depth(number, opsional): Batasi kedalaman pohon snapshotboxes(boolean, opsional): Sertakan kotak pembatas setiap elemen sebagai [box=x,y,width,height] dalam snapshot. Koordinat relatif terhadap viewport, dalam piksel CSS (Element.getBoundingClientRect)
- Hanya-baca: true
- browser_take_screenshot
- Judul: Ambil tangkapan layar
- Deskripsi: Mengambil tangkapan layar halaman saat ini. Anda tidak dapat melakukan tindakan berdasarkan tangkapan layar, gunakan browser_snapshot untuk tindakan.
- Parameter:
element(string, opsional): Deskripsi elemen yang dapat dibaca manusia digunakan untuk mendapatkan izin berinteraksi dengan elementarget(string, opsional): Referensi elemen target yang tepat dari snapshot halaman, atau pemilih elemen uniktype(string, opsional): Format gambar untuk tangkapan layar. Jika tidak diatur, disimpulkan dari ekstensi nama file, jika tidak png.filename(string, opsional): Nama file untuk menyimpan tangkapan layar. Default kepage-{timestamp}.{png|jpeg|webp}jika tidak ditentukan. Lebih suka nama file relatif untuk tetap berada dalam direktori output.fullPage(boolean, opsional): Ketika true, mengambil tangkapan layar dari halaman yang dapat digulir penuh, alih-alih viewport yang terlihat saat ini. Tidak dapat digunakan dengan tangkapan layar elemen.scale(string): Skala resolusi gambar. "css" menghasilkan tangkapan layar berukuran dalam piksel CSS (lebih kecil, konsisten di seluruh perangkat). "device" menghasilkan tangkapan layar resolusi tinggi menggunakan piksel perangkat (lebih besar, memperhitungkan rasio piksel perangkat). Default adalah css.
- Hanya-baca: true
- browser_type
- Judul: Ketik teks
- Deskripsi: Mengetik teks ke elemen yang dapat diedit
- Parameter:
element(string, opsional): Deskripsi elemen yang dapat dibaca manusia digunakan untuk mendapatkan izin berinteraksi dengan elementarget(string): Referensi elemen target yang tepat dari snapshot halaman, atau pemilih elemen uniktext(string): Teks yang akan diketik ke elemensubmit(boolean, opsional): Apakah akan mengirimkan teks yang dimasukkan (tekan Enter setelahnya)slowly(boolean, opsional): Apakah akan mengetik satu karakter pada satu waktu. Berguna untuk memicu penangan kunci di halaman. Secara default seluruh teks diisi sekaligus.
- Hanya-baca: false
- browser_wait_for
- Judul: Tunggu
- Deskripsi: Tunggu hingga teks muncul atau hilang, atau tunggu selama waktu tertentu
- Parameter:
time(angka, opsional): Waktu tunggu dalam detiktext(string, opsional): Teks yang ditunggu kemunculannyatextGone(string, opsional): Teks yang ditunggu hilangnya
- Hanya-baca: false
Manajemen Tab
- browser_tabs
- Judul: Kelola tab
- Deskripsi: Menampilkan daftar, membuat, menutup, atau memilih tab browser.
- Parameter:
action(string): Operasi yang akan dilakukanindex(angka, opsional): Indeks tab, digunakan untuk menutup/memilih. Jika dihilangkan untuk menutup, tab saat ini yang ditutup.url(string, opsional): URL untuk dinavigasi di tab baru, digunakan untuk membuat tab baru.
- Hanya-baca: false
Instalasi Browser
Konfigurasi (opsional melalui --caps=config)
- browser_get_config
- Judul: Dapatkan konfigurasi
- Deskripsi: Mendapatkan konfigurasi akhir yang telah diselesaikan setelah menggabungkan opsi CLI, variabel lingkungan, dan file konfigurasi.
- Parameter: Tidak ada
- Hanya-baca: true
Jaringan (opsional melalui --caps=network)
- browser_network_state_set
- Judul: Atur status jaringan
- Deskripsi: Mengatur status jaringan browser menjadi daring atau luring. Saat luring, semua permintaan jaringan akan gagal.
- Parameter:
state(string): Atur ke "offline" untuk mensimulasikan mode luring, "online" untuk memulihkan konektivitas jaringan
- Hanya-baca: false
- browser_route
- Judul: Tiru permintaan jaringan
- Deskripsi: Menyiapkan rute untuk meniru permintaan jaringan yang cocok dengan pola URL
- Parameter:
pattern(string): Pola URL yang cocok (mis., "/api/users", "/*.{png,jpg}")status(angka, opsional): Kode status HTTP yang akan dikembalikan (default: 200)body(string, opsional): Isi respons (teks atau string JSON)contentType(string, opsional): Header Content-Type (mis., "application/json", "text/html")headers(array, opsional): Header yang ditambahkan dalam format "Nama: Nilai"removeHeaders(string, opsional): Daftar nama header yang dipisahkan koma untuk dihapus dari permintaan
- Hanya-baca: false
- browser_route_list
- Judul: Daftar rute jaringan
- Deskripsi: Menampilkan semua rute jaringan yang aktif
- Parameter: Tidak ada
- Hanya-baca: true
- browser_unroute
- Judul: Hapus rute jaringan
- Deskripsi: Menghapus rute jaringan yang cocok dengan pola (atau semua rute jika tidak ada pola yang ditentukan)
- Parameter:
pattern(string, opsional): Pola URL yang akan dihapus rutenya (hilangkan untuk menghapus semua rute)
- Hanya-baca: false
Penyimpanan (opsional melalui --caps=storage)
- browser_cookie_clear
- Judul: Hapus cookie
- Deskripsi: Menghapus semua cookie
- Parameter: Tidak ada
- Hanya-baca: false
- browser_cookie_delete
- Judul: Hapus cookie
- Deskripsi: Menghapus cookie tertentu
- Parameter:
name(string): Nama cookie yang akan dihapus
- Hanya-baca: false
- browser_cookie_get
- Judul: Dapatkan cookie
- Deskripsi: Mendapatkan cookie tertentu berdasarkan nama
- Parameter:
name(string): Nama cookie yang akan didapatkan
- Hanya-baca: true
- browser_cookie_list
- Judul: Daftar cookie
- Deskripsi: Menampilkan semua cookie (opsional difilter berdasarkan domain/path)
- Parameter:
domain(string, opsional): Filter cookie berdasarkan domainpath(string, opsional): Filter cookie berdasarkan path
- Hanya-baca: true
- browser_cookie_set
- Judul: Atur cookie
- Deskripsi: Mengatur cookie dengan flag opsional (domain, path, expires, httpOnly, secure, sameSite)
- Parameter:
name(string): Nama cookievalue(string): Nilai cookiedomain(string, opsional): Domain cookiepath(string, opsional): Path cookieexpires(angka, opsional): Kedaluwarsa cookie sebagai stempel waktu UnixhttpOnly(boolean, opsional): Apakah cookie hanya HTTPsecure(boolean, opsional): Apakah cookie amansameSite(string, opsional): Atribut SameSite cookie
- Hanya-baca: false
- browser_localstorage_clear
- Judul: Hapus localStorage
- Deskripsi: Menghapus semua localStorage
- Parameter: Tidak ada
- Hanya-baca: false
- browser_localstorage_delete
- Judul: Hapus item localStorage
- Deskripsi: Menghapus item localStorage
- Parameter:
key(string): Kunci yang akan dihapus
- Hanya-baca: false
- browser_localstorage_get
- Judul: Dapatkan item localStorage
- Deskripsi: Mendapatkan item localStorage berdasarkan kunci
- Parameter:
key(string): Kunci yang akan didapatkan
- Hanya-baca: true
- browser_localstorage_list
- Judul: Daftar localStorage
- Deskripsi: Menampilkan semua pasangan kunci-nilai localStorage
- Parameter: Tidak ada
- Hanya-baca: true
- browser_localstorage_set
- Judul: Atur item localStorage
- Deskripsi: Mengatur item localStorage
- Parameter:
key(string): Kunci yang akan diaturvalue(string): Nilai yang akan diatur
- Hanya-baca: false
- browser_sessionstorage_clear
- Judul: Hapus sessionStorage
- Deskripsi: Menghapus semua sessionStorage
- Parameter: Tidak ada
- Hanya-baca: false
- browser_sessionstorage_delete
- Judul: Hapus item sessionStorage
- Deskripsi: Menghapus item sessionStorage
- Parameter:
key(string): Kunci yang akan dihapus
- Hanya-baca: false
- browser_sessionstorage_get
- Judul: Dapatkan item sessionStorage
- Deskripsi: Mendapatkan item sessionStorage berdasarkan kunci
- Parameter:
key(string): Kunci yang akan didapatkan
- Hanya-baca: true
- browser_sessionstorage_list
- Judul: Daftar sessionStorage
- Deskripsi: Menampilkan semua pasangan kunci-nilai sessionStorage
- Parameter: Tidak ada
- Hanya-baca: true
- browser_sessionstorage_set
- Judul: Atur item sessionStorage
- Deskripsi: Mengatur item sessionStorage
- Parameter:
key(string): Kunci yang akan diaturvalue(string): Nilai yang akan diatur
- Hanya-baca: false
- browser_set_storage_state
- Judul: Pulihkan status penyimpanan
- Deskripsi: Memulihkan status penyimpanan (cookie, penyimpanan lokal) dari file. Ini menghapus cookie dan penyimpanan lokal yang ada sebelum memulihkan.
- Parameter:
filename(string): Path ke file status penyimpanan yang akan dipulihkan
- Hanya-baca: false
- browser_storage_state
- Judul: Simpan status penyimpanan
- Deskripsi: Menyimpan status penyimpanan (cookie, penyimpanan lokal) ke file untuk digunakan kembali nanti
- Parameter:
filename(string, opsional): Nama file untuk menyimpan status penyimpanan. Default kestorage-state-{timestamp}.jsonjika tidak ditentukan.
- Hanya-baca: true
DevTools (opsional melalui --caps=devtools)
- browser_annotate
- Judul: Anotasi halaman saat ini
- Deskripsi: Membuka Playwright Dashboard dalam mode anotasi untuk halaman saat ini dan menunggu pengguna menggambar anotasi. Mengembalikan tangkapan layar yang dianotasi, snapshot ARIA, dan daftar anotasi.
- Parameter: Tidak ada
- Hanya-baca: true
- browser_hide_highlight
- Judul: Sembunyikan sorotan elemen
- Deskripsi: Menghapus overlay sorotan yang sebelumnya ditambahkan untuk elemen.
- Parameter:
element(string, opsional): Deskripsi elemen yang dapat dibaca manusia yang digunakan saat menambahkan sorotan; harus cocok dengan nilai yang diteruskan ke browser_highlight.target(string, opsional): Referensi elemen target yang tepat dari snapshot halaman, atau pemilih elemen unik
- Hanya-baca: true
- browser_highlight
- Judul: Sorot elemen
- Deskripsi: Menampilkan overlay sorotan persisten di sekitar elemen pada halaman.
- Parameter:
element(string, opsional): Deskripsi elemen yang dapat dibaca manusia yang digunakan untuk mendapatkan izin berinteraksi dengan elementarget(string): Referensi elemen target yang tepat dari snapshot halaman, atau pemilih elemen unikstyle(string, opsional): CSS inline tambahan yang diterapkan pada overlay sorotan, mis. "outline: 2px dashed red".
- Hanya-baca: true
- browser_resume
- Judul: Lanjutkan eksekusi skrip yang dijeda
- Deskripsi: Melanjutkan eksekusi skrip setelah dijeda. Saat dipanggil dengan step diatur ke true, eksekusi akan berhenti lagi sebelum tindakan berikutnya.
- Parameter:
step(boolean, opsional): Saat true, eksekusi akan berhenti lagi sebelum tindakan berikutnya, memungkinkan debugging langkah demi langkah.location(string, opsional): Jeda eksekusi pada : tertentu, mis. "example.spec.ts:42".
- Hanya-baca: false
- browser_start_recording
- Judul: Mulai merekam tindakan pengguna
- Deskripsi: Mulai merekam tindakan yang dilakukan pengguna di browser sebagai kode Playwright. Gunakan ini saat pengguna ingin mendemonstrasikan alur secara manual. Panggil browser_stop_recording saat pengguna mengatakan selesai untuk mengambil tindakan yang direkam.
- Parameter: Tidak ada
- Hanya-baca: true
- browser_start_tracing
- Judul: Mulai tracing
- Deskripsi: Mulai perekaman trace
- Parameter: Tidak ada
- Hanya-baca: true
- browser_start_video
- Judul: Mulai video
- Deskripsi: Mulai perekaman video
- Parameter:
filename(string, opsional): Nama file untuk menyimpan video.size(objek, opsional): Ukuran video
- Hanya-baca: true
- browser_stop_recording
- Judul: Hentikan merekam tindakan pengguna
- Deskripsi: Menghentikan perekaman yang dimulai dengan browser_start_recording dan mengembalikan tindakan yang direkam sebagai kode Playwright.
- Parameter: Tidak ada
- Hanya-baca: true
- browser_stop_tracing
- Judul: Hentikan tracing
- Deskripsi: Menghentikan perekaman trace
- Parameter: Tidak ada
- Hanya-baca: true
- browser_stop_video
- Judul: Hentikan video
- Deskripsi: Menghentikan perekaman video
- Parameter: Tidak ada
- Hanya-baca: true
- browser_video_chapter
- Judul: Bab video
- Deskripsi: Menambahkan penanda bab ke perekaman video. Menampilkan kartu bab layar penuh dengan latar belakang buram.
- Parameter:
title(string): Judul babdescription(string, opsional): Deskripsi babduration(angka, opsional): Durasi dalam milidetik untuk menampilkan kartu bab
- Hanya-baca: true
- browser_video_hide_actions
- Judul: Sembunyikan overlay tindakan
- Deskripsi: Berhenti memberi anotasi pada tindakan yang dilakukan di halaman.
- Parameter: Tidak ada
- Hanya-baca: true
- browser_video_show_actions
- Judul: Tampilkan overlay aksi
- Deskripsi: Beri anotasi pada aksi berikutnya yang dilakukan di halaman dengan callout yang menyebutkan nama aksi dan menyorot elemen target. Berguna saat merekam video atau screencasting.
- Parameter:
duration(angka, opsional): Berapa lama setiap anotasi aksi tetap di layar, dalam milidetik. Defaultnya 500.position(string, opsional): Tempat menempatkan judul aksi relatif terhadap halaman. Defaultnya kanan atas.cursor(string, opsional): Dekorasi kursor untuk aksi penunjuk. "pointer" (default) menganimasikan penunjuk mouse dari titik aksi sebelumnya ke titik berikutnya; "none" menonaktifkan dekorasi kursor.
- Hanya-baca: true
Berbasis koordinat (opsional melalui --caps=vision)
- browser_mouse_click_xy
- Judul: Klik
- Deskripsi: Klik tombol mouse pada posisi tertentu
- Parameter:
x(angka): Koordinat Xy(angka): Koordinat Ybutton(string, opsional): Tombol yang diklik, defaultnya kiriclickCount(angka, opsional): Jumlah klik, defaultnya 1delay(angka, opsional): Waktu tunggu antara mouse down dan mouse up dalam milidetik, defaultnya 0
- Hanya-baca: false
- browser_mouse_down
- Judul: Tekan mouse down
- Deskripsi: Tekan mouse down
- Parameter:
button(string, opsional): Tombol yang ditekan, defaultnya kiri
- Hanya-baca: false
- browser_mouse_drag_xy
- Judul: Seret mouse
- Deskripsi: Seret tombol kiri mouse ke posisi tertentu
- Parameter:
startX(angka): Koordinat X awalstartY(angka): Koordinat Y awalendX(angka): Koordinat X akhirendY(angka): Koordinat Y akhir
- Hanya-baca: false
- browser_mouse_move_xy
- Judul: Gerakkan mouse
- Deskripsi: Gerakkan mouse ke posisi tertentu
- Parameter:
x(angka): Koordinat Xy(angka): Koordinat Y
- Hanya-baca: false
- browser_mouse_up
- Judul: Lepaskan mouse up
- Deskripsi: Lepaskan mouse up
- Parameter:
button(string, opsional): Tombol yang dilepaskan, defaultnya kiri
- Hanya-baca: false
- browser_mouse_wheel
- Judul: Gulir roda mouse
- Deskripsi: Gulir roda mouse
- Parameter:
deltaX(angka): Delta XdeltaY(angka): Delta Y
- Hanya-baca: false
Pembuatan PDF (opsional melalui --caps=pdf)
- browser_pdf_save
- Judul: Simpan sebagai PDF
- Deskripsi: Simpan halaman sebagai PDF
- Parameter:
filename(string, opsional): Nama file untuk menyimpan pdf. Defaultnyapage-{timestamp}.pdfjika tidak ditentukan. Sebaiknya gunakan nama file relatif agar tetap berada dalam direktori output.
- Hanya-baca: true
Asersi pengujian (opsional melalui --caps=testing)
- browser_generate_locator
- Judul: Buat locator untuk elemen
- Deskripsi: Hasilkan locator untuk elemen yang diberikan untuk digunakan dalam pengujian
- Parameter:
element(string, opsional): Deskripsi elemen yang dapat dibaca manusia digunakan untuk mendapatkan izin berinteraksi dengan elementarget(string): Referensi elemen target yang tepat dari snapshot halaman, atau pemilih elemen unik
- Hanya-baca: true
- browser_verify_element_visible
- Judul: Verifikasi elemen terlihat
- Deskripsi: Verifikasi elemen terlihat di halaman
- Parameter:
role(string): PERAN elemen. Dapat ditemukan di snapshot seperti ini:- {ROLE} "Accessible Name":accessibleName(string): NAMA_AKSESIBEL elemen. Dapat ditemukan di snapshot seperti ini:- role "{ACCESSIBLE_NAME}"
- Hanya-baca: false
- browser_verify_list_visible
- Judul: Verifikasi daftar terlihat
- Deskripsi: Verifikasi daftar terlihat di halaman
- Parameter:
element(string): Deskripsi daftar yang dapat dibaca manusiatarget(string): Referensi elemen target yang tepat yang menunjuk ke daftaritems(array): Item untuk diverifikasi
- Hanya-baca: false
- browser_verify_text_visible
- Judul: Verifikasi teks terlihat
- Deskripsi: Verifikasi teks terlihat di halaman. Sebaiknya gunakan browser_verify_element_visible jika memungkinkan.
- Parameter:
text(string): TEKS untuk diverifikasi. Dapat ditemukan di snapshot seperti ini:- role "Accessible Name": {TEXT}atau seperti ini:- text: {TEXT}
- Hanya-baca: false
- browser_verify_value
- Judul: Verifikasi nilai
- Deskripsi: Verifikasi nilai elemen
- Parameter:
type(string): Jenis elemenelement(string): Deskripsi elemen yang dapat dibaca manusiatarget(string): Referensi elemen target yang tepat dari snapshot halamanvalue(string): Nilai untuk diverifikasi. Untuk kotak centang, gunakan "true" atau "false".
- Hanya-baca: false