diff --git a/.claude/skills/roll/SKILL.md b/.claude/skills/roll/SKILL.md new file mode 100644 index 0000000..ef05018 --- /dev/null +++ b/.claude/skills/roll/SKILL.md @@ -0,0 +1,4 @@ +# How to roll skills + +- Read skill file at node_modules/playwright/lib/skill/SKILL.md +- Update README.md at packages/playwright-cli/README.md with the new relevant information from skill. diff --git a/README.md b/README.md index 0e50797..9cb8fdc 100644 --- a/README.md +++ b/README.md @@ -343,6 +343,7 @@ Playwright MCP server supports following arguments. They can be provided in the | --caps | comma-separated list of additional capabilities to enable, possible values: vision, pdf, devtools.
*env* `PLAYWRIGHT_MCP_CAPS` | | --cdp-endpoint | CDP endpoint to connect to.
*env* `PLAYWRIGHT_MCP_CDP_ENDPOINT` | | --cdp-header | CDP headers to send with the connect request, multiple can be specified.
*env* `PLAYWRIGHT_MCP_CDP_HEADER` | +| --cdp-timeout | timeout in milliseconds for connecting to CDP endpoint, defaults to 30000ms
*env* `PLAYWRIGHT_MCP_CDP_TIMEOUT` | | --codegen | specify the language to use for code generation, possible values: "typescript", "none". Default is "typescript".
*env* `PLAYWRIGHT_MCP_CODEGEN` | | --config | path to the configuration file.
*env* `PLAYWRIGHT_MCP_CONFIG` | | --console-level | level of console messages to return: "error", "warning", "info", "debug". Each level includes the messages of more severe levels.
*env* `PLAYWRIGHT_MCP_CONSOLE_LEVEL` | diff --git a/package-lock.json b/package-lock.json index 2a794c7..512842a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,19 +1,19 @@ { "name": "playwright-mcp-internal", - "version": "0.0.63", + "version": "0.0.64", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "playwright-mcp-internal", - "version": "0.0.63", + "version": "0.0.64", "license": "Apache-2.0", "workspaces": [ "packages/*" ], "devDependencies": { "@modelcontextprotocol/sdk": "^1.25.2", - "@playwright/test": "1.59.0-alpha-1770157258000", + "@playwright/test": "1.59.0-alpha-1770338664000", "@types/node": "^24.3.0" } }, @@ -806,13 +806,13 @@ "link": true }, "node_modules/@playwright/test": { - "version": "1.59.0-alpha-1770157258000", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.59.0-alpha-1770157258000.tgz", - "integrity": "sha512-zBg9P0xkKXnDrSr7zmVqkGnUwiR/2PnxHs2zWsQ9EeG76X5YOn5hcuog/1YFrzOKvYOb+bcnjXb+dMTn8fkMTA==", + "version": "1.59.0-alpha-1770338664000", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.59.0-alpha-1770338664000.tgz", + "integrity": "sha512-GRgwREMJ36Ici5lV/16ZHMd+HEh4XuT4jSHPlvOyNBcefPi8JsBFI/kMl7BChjOpitrDOxhZJAgdHvQkPeQu0w==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright": "1.59.0-alpha-1770157258000" + "playwright": "1.59.0-alpha-1770338664000" }, "bin": { "playwright": "cli.js" @@ -2562,12 +2562,12 @@ } }, "node_modules/playwright": { - "version": "1.59.0-alpha-1770157258000", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.59.0-alpha-1770157258000.tgz", - "integrity": "sha512-jGMgi+61xaC9Pf7cIalsgKy4g0oAreA8U4/Lr8E0xhYl3pWd/U3F6s/m7GBWxJHHEiQcIdnP3mUdy1FTOyl8SQ==", + "version": "1.59.0-alpha-1770338664000", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.59.0-alpha-1770338664000.tgz", + "integrity": "sha512-YKR5ko/eQFtcvlZPTJN3BmVFRrIxuzKw8sqZgP9XY+JvQEDlAsGDNsBd7/TxWLZYzCC8HHETB7cW6Ru2DEkTWA==", "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.59.0-alpha-1770157258000" + "playwright-core": "1.59.0-alpha-1770338664000" }, "bin": { "playwright": "cli.js" @@ -2584,9 +2584,9 @@ "link": true }, "node_modules/playwright-core": { - "version": "1.59.0-alpha-1770157258000", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.59.0-alpha-1770157258000.tgz", - "integrity": "sha512-D+3ARZYNY7/i6LyV6DKsPQHkzfmuMXMdKdyW981i5CHA4GmXY2NTt1F7cEL4fGYJFpwPqTfQ17Qhas8dnirPkg==", + "version": "1.59.0-alpha-1770338664000", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.59.0-alpha-1770338664000.tgz", + "integrity": "sha512-Qlaafyf5T1GN/ynNJVVdJyD26HjzqvgRC62jNdfaFoMkTvqSlV4of9O6BV7c1x5ZJpplKXHecAPWKSWNdea7Dw==", "license": "Apache-2.0", "bin": { "playwright-core": "cli.js" @@ -3306,7 +3306,7 @@ }, "packages/extension": { "name": "@playwright/mcp-extension", - "version": "0.0.63", + "version": "0.0.64", "license": "Apache-2.0", "devDependencies": { "@types/chrome": "^0.0.315", @@ -3325,12 +3325,12 @@ }, "packages/playwright-cli": { "name": "@playwright/cli", - "version": "0.0.63", + "version": "0.0.64", "license": "Apache-2.0", "dependencies": { "minimist": "^1.2.5", - "playwright": "1.59.0-alpha-1770157258000", - "playwright-core": "1.59.0-alpha-1770157258000" + "playwright": "1.59.0-alpha-1770338664000", + "playwright-core": "1.59.0-alpha-1770338664000" }, "bin": { "playwright-cli": "playwright-cli.js" @@ -3341,20 +3341,20 @@ }, "packages/playwright-cli-stub": { "name": "playwright-cli", - "version": "0.0.63", + "version": "0.0.64", "license": "Apache-2.0", "dependencies": { - "@playwright/cli": "0.0.63" + "@playwright/cli": "0.0.64" }, "devDependencies": {} }, "packages/playwright-mcp": { "name": "@playwright/mcp", - "version": "0.0.63", + "version": "0.0.64", "license": "Apache-2.0", "dependencies": { - "playwright": "1.59.0-alpha-1770157258000", - "playwright-core": "1.59.0-alpha-1770157258000" + "playwright": "1.59.0-alpha-1770338664000", + "playwright-core": "1.59.0-alpha-1770338664000" }, "bin": { "playwright-mcp": "cli.js" diff --git a/package.json b/package.json index 4338cc6..b000603 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "playwright-mcp-internal", - "version": "0.0.63", + "version": "0.0.64", "private": true, "repository": { "type": "git", @@ -25,7 +25,7 @@ ], "devDependencies": { "@modelcontextprotocol/sdk": "^1.25.2", - "@playwright/test": "1.59.0-alpha-1770157258000", + "@playwright/test": "1.59.0-alpha-1770338664000", "@types/node": "^24.3.0" } } diff --git a/packages/extension/manifest.json b/packages/extension/manifest.json index 236f354..aec6444 100644 --- a/packages/extension/manifest.json +++ b/packages/extension/manifest.json @@ -1,7 +1,7 @@ { "manifest_version": 3, "name": "Playwright MCP Bridge", - "version": "0.0.63", + "version": "0.0.64", "description": "Share browser tabs with Playwright MCP server", "key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA9nMS2b0WCohjVHPGb8D9qAdkbIngDqoAjTeSccHJijgcONejge+OJxOQOMLu7b0ovt1c9BiEJa5JcpM+EHFVGL1vluBxK71zmBy1m2f9vZF3HG0LSCp7YRkum9rAIEthDwbkxx6XTvpmAY5rjFa/NON6b9Hlbo+8peUSkoOK7HTwYnnI36asZ9eUTiveIf+DMPLojW2UX33vDWG2UKvMVDewzclb4+uLxAYshY7Mx8we/b44xu+Anb/EBLKjOPk9Yh541xJ5Ozc8EiP/5yxOp9c/lRiYUHaRW+4r0HKZyFt0eZ52ti2iM4Nfk7jRXR7an3JPsUIf5deC/1cVM/+1ZQIDAQAB", "permissions": [ diff --git a/packages/extension/package.json b/packages/extension/package.json index 80242a7..785ed36 100644 --- a/packages/extension/package.json +++ b/packages/extension/package.json @@ -1,6 +1,6 @@ { "name": "@playwright/mcp-extension", - "version": "0.0.63", + "version": "0.0.64", "description": "Playwright MCP Browser Extension", "private": true, "repository": { diff --git a/packages/extension/tests/extension.spec.ts b/packages/extension/tests/extension.spec.ts index 9ff74b0..0818247 100644 --- a/packages/extension/tests/extension.spec.ts +++ b/packages/extension/tests/extension.spec.ts @@ -400,7 +400,7 @@ test.describe('CLI with extension', () => { const confirmationPage = await confirmationPagePromise; // Click the Allow button - await confirmationPage.getByRole('button', { name: 'Allow' }).click(); + await confirmationPage.getByRole('button', { name: 'Connect' }).first().click(); // Wait for the CLI command to complete const { output } = await cliPromise; diff --git a/packages/playwright-cli-stub/package.json b/packages/playwright-cli-stub/package.json index ef837c2..418fe49 100644 --- a/packages/playwright-cli-stub/package.json +++ b/packages/playwright-cli-stub/package.json @@ -1,6 +1,6 @@ { "name": "playwright-cli", - "version": "0.0.63", + "version": "0.0.64", "description": "Playwright CLI", "repository": "github:Microsoft/playwright-cli", "homepage": "https://playwright.dev", @@ -14,7 +14,7 @@ }, "license": "Apache-2.0", "dependencies": { - "@playwright/cli": "0.0.63" + "@playwright/cli": "0.0.64" }, "devDependencies": {} } diff --git a/packages/playwright-cli/README.md b/packages/playwright-cli/README.md index 26eb69f..e289197 100644 --- a/packages/playwright-cli/README.md +++ b/packages/playwright-cli/README.md @@ -105,13 +105,13 @@ Playwright CLI will use a dedicated persistent profile by default. It means that your cookies and other storage state will be preserved between the calls. You can use different instances of the browser for different projects with sessions. -Following will result in two browsers with separate profiles being available. Pass `--session` to +Following will result in two browsers with separate profiles being available. Pass `-s=` to the invocation to talk to a specific browser. ```bash playwright-cli open https://playwright.dev -playwright-cli --session=example open https://example.com -playwright-cli session-list +playwright-cli -s=example open https://example.com +playwright-cli list ``` You can run your coding agent with the `PLAYWRIGHT_CLI_SESSION` environment variable: @@ -120,16 +120,14 @@ You can run your coding agent with the `PLAYWRIGHT_CLI_SESSION` environment vari PLAYWRIGHT_CLI_SESSION=todo-app claude . ``` -Or instruct it to prepend `--session` to the calls. +Or instruct it to prepend `-s=` to the calls. Manage your sessions as follows: ```bash -playwright-cli session-list # list all sessions -playwright-cli session-stop [name] # stop session -playwright-cli session-restart [name] # restart session -playwright-cli session-stop-all # stop all sessions -playwright-cli session-delete [name] # delete session data along with the profiles +playwright-cli list # list all sessions +playwright-cli close-all # close all browsers +playwright-cli kill-all # forcefully kill all browser processes ``` @@ -152,6 +150,7 @@ playwright-cli upload # upload one or multiple files playwright-cli check # check a checkbox or radio button playwright-cli uncheck # uncheck a checkbox or radio button playwright-cli snapshot # capture page snapshot to obtain element ref +playwright-cli snapshot --filename=f # save snapshot to specific file playwright-cli eval [ref] # evaluate javascript expression on page or element playwright-cli dialog-accept [prompt] # accept a dialog playwright-cli dialog-dismiss # dismiss a dialog @@ -187,7 +186,9 @@ playwright-cli mousewheel # scroll mouse wheel ```bash playwright-cli screenshot [ref] # screenshot of the current page or element +playwright-cli screenshot --filename=f # save screenshot with specific filename playwright-cli pdf # save page as pdf +playwright-cli pdf --filename=page.pdf # save pdf with specific filename ``` ### Tabs @@ -260,18 +261,22 @@ playwright-cli install-skills # install skills playwright-cli config [options] # configure session settings playwright-cli open --browser=chrome # use specific browser playwright-cli open --extension # connect via browser extension +playwright-cli open --persistent # use persistent profile +playwright-cli open --profile= # use custom profile directory playwright-cli open --config=file.json # use config file +playwright-cli close # close the browser +playwright-cli delete-data # delete user data for default session ``` ### Sessions ```bash -playwright-cli --session=name # run command in named session -playwright-cli session-list # list all sessions -playwright-cli session-stop [name] # stop session -playwright-cli session-restart [name] # restart session -playwright-cli session-stop-all # stop all sessions -playwright-cli session-delete [name] # delete session data and profiles +playwright-cli -s=name # run command in named session +playwright-cli -s=name close # stop a named browser +playwright-cli -s=name delete-data # delete user data for named browser +playwright-cli list # list all sessions +playwright-cli close-all # close all browsers +playwright-cli kill-all # forcefully kill all browser processes ``` @@ -426,7 +431,8 @@ Playwright CLI will load config from `playwright-cli.json` by default so that yo -## Environment +
+Configuration via env | Environment | |-------------| @@ -472,3 +478,4 @@ Playwright CLI will load config from `playwright-cli.json` by default so that yo | `PLAYWRIGHT_MCP_USER_AGENT` specify user agent string | | `PLAYWRIGHT_MCP_USER_DATA_DIR` path to the user data directory. If not specified, a temporary directory will be created. | | `PLAYWRIGHT_MCP_VIEWPORT_SIZE` specify browser viewport size in pixels, for example "1280x720" | +
diff --git a/packages/playwright-cli/package.json b/packages/playwright-cli/package.json index 8500c0a..9083193 100644 --- a/packages/playwright-cli/package.json +++ b/packages/playwright-cli/package.json @@ -1,6 +1,6 @@ { "name": "@playwright/cli", - "version": "0.0.63", + "version": "0.0.64", "description": "Playwright CLI", "repository": { "type": "git", @@ -21,8 +21,8 @@ }, "dependencies": { "minimist": "^1.2.5", - "playwright": "1.59.0-alpha-1770157258000", - "playwright-core": "1.59.0-alpha-1770157258000" + "playwright": "1.59.0-alpha-1770338664000", + "playwright-core": "1.59.0-alpha-1770338664000" }, "bin": { "playwright-cli": "playwright-cli.js" diff --git a/packages/playwright-cli/tests/integration.spec.ts b/packages/playwright-cli/tests/integration.spec.ts index af41ffb..b48732d 100644 --- a/packages/playwright-cli/tests/integration.spec.ts +++ b/packages/playwright-cli/tests/integration.spec.ts @@ -60,13 +60,13 @@ async function runCli(...args: string[]): Promise { } test('open data URL', async ({}) => { - expect(await runCli('open', 'data:text/html,hello')).toEqual(expect.objectContaining({ + expect(await runCli('open', 'data:text/html,hello', '--persistent')).toEqual(expect.objectContaining({ output: expect.stringContaining('hello'), exitCode: 0, })); - expect(await runCli('session-delete')).toEqual(expect.objectContaining({ - output: expect.stringContaining('Deleted user data for session'), + expect(await runCli('delete-data')).toEqual(expect.objectContaining({ + output: expect.stringContaining('Deleted user data for'), exitCode: 0, })); }); diff --git a/packages/playwright-mcp/package.json b/packages/playwright-mcp/package.json index 0b438f3..23611eb 100644 --- a/packages/playwright-mcp/package.json +++ b/packages/playwright-mcp/package.json @@ -1,6 +1,6 @@ { "name": "@playwright/mcp", - "version": "0.0.63", + "version": "0.0.64", "description": "Playwright Tools for MCP", "repository": { "type": "git", @@ -34,8 +34,8 @@ } }, "dependencies": { - "playwright": "1.59.0-alpha-1770157258000", - "playwright-core": "1.59.0-alpha-1770157258000" + "playwright": "1.59.0-alpha-1770338664000", + "playwright-core": "1.59.0-alpha-1770338664000" }, "bin": { "playwright-mcp": "cli.js"