chromedevtools--chrome-devtools-mcp
b646feb4f3
## Motivation `list_pages` shows each page's URL but not its title, which is painful when multiple pages share a host — e.g. several tabs under `app.example.com/u/0/`, `/u/1/`, `/u/2/`. There's no way to tell which is which without visiting each one, even though every page has a usable `document.title`. Fixes #2156. Closes #2175 ## What this changes - `list_pages` text output now shows the title before the URL when available: `1: My Page (https://example.com) [selected]`. If the page has no title (e.g. `about:blank`), the format is unchanged. - The structured content entry for each page now includes a `title` field alongside `id`, `url`, and `selected`. - `page.title()` is awaited with a `.catch(() => '')` so a closed or erroring page silently falls back to the URL-only format. - `format()` is made `async` to support the `await` inside the page loop; `createStructuredPage()` likewise becomes `async`. ## Testing Start the MCP server with multiple tabs open. Call `list_pages` — pages with titles now display as `id: Title (url)`. Pages without titles (`about:blank`, data URLs) display as before. --------- Co-authored-by: Piotr Paulski <31672205+zyzyzyryxy@users.noreply.github.com>
52 行
3.2 KiB
Plaintext
52 行
3.2 KiB
Plaintext
exports[`pages > close_page > when dialog is open 1`] = `
|
|
{"content":[{"type":"text","text":"## Pages\\n1: about:blank [selected]"}],"structuredContent":{"pages":[{"id":1,"url":"about:blank","title":"","selected":true}]}}
|
|
`;
|
|
|
|
exports[`pages > list_pages > list pages for extension pages with --category-extensions 1`] = `
|
|
## Pages
|
|
1: about:blank [selected]
|
|
## Extension Pages
|
|
2: chrome-extension://<extension-id>/popup.html
|
|
`;
|
|
|
|
exports[`pages > list_pages > list pages for extension service workers with --category-extensions 1`] = `
|
|
## Pages
|
|
1: about:blank [selected]
|
|
## Extension Service Workers
|
|
sw-1: chrome-extension://<extension-id>/sw.js
|
|
`;
|
|
|
|
exports[`pages > list_pages > list pages for extension service workers without --category-extensions 1`] = `
|
|
## Pages
|
|
1: about:blank [selected]
|
|
`;
|
|
|
|
exports[`pages > list_pages > list pages for side panels with --category-extensions 1`] = `
|
|
## Pages
|
|
1: about:blank
|
|
## Extension Pages
|
|
2: Side Panel (chrome-extension://<extension-id>/sidepanel.html) [selected]
|
|
## Extension Service Workers
|
|
sw-1: chrome-extension://<extension-id>/sw.js
|
|
`;
|
|
|
|
exports[`pages > list_pages > when dialog is open 1`] = `
|
|
{"content":[{"type":"text","text":"# Open dialog\\nalert: test dialog.\\nCall handle_dialog to handle it before continuing.\\n## Pages\\n1: about:blank [selected]"}],"structuredContent":{"dialog":{"type":"alert","message":"test dialog","defaultValue":""},"pages":[{"id":1,"url":"about:blank","title":"","selected":true}]}}
|
|
`;
|
|
|
|
exports[`pages > navigate_page > when dialog is open 1`] = `
|
|
{"content":[{"type":"text","text":"Successfully navigated to data:text/html,<div>Navigated</div>.\\n# Open dialog\\nalert: test dialog.\\nCall handle_dialog to handle it before continuing.\\n## Pages\\n1: data:text/html,<div>Navigated</div> [selected]"}],"structuredContent":{"message":"Successfully navigated to data:text/html,<div>Navigated</div>.","dialog":{"type":"alert","message":"test dialog","defaultValue":""},"pages":[{"id":1,"url":"data:text/html,<div>Navigated</div>","title":"","selected":true}]}}
|
|
`;
|
|
|
|
exports[`pages > new_page with isolatedContext > when dialog is open 1`] = `
|
|
{"content":[{"type":"text","text":"# Open dialog\\nalert: test dialog.\\nCall handle_dialog to handle it before continuing.\\n## Pages\\n1: about:blank\\n2: about:blank [selected]"}],"structuredContent":{"dialog":{"type":"alert","message":"test dialog","defaultValue":""},"pages":[{"id":1,"url":"about:blank","title":"","selected":false},{"id":2,"url":"about:blank","title":"","selected":true}]}}
|
|
`;
|
|
|
|
exports[`pages > resize > when dialog is open 1`] = `
|
|
{"content":[{"type":"text","text":"# Open dialog\\nalert: test dialog.\\nCall handle_dialog to handle it before continuing.\\n## Pages\\n1: about:blank [selected]"}],"structuredContent":{"dialog":{"type":"alert","message":"test dialog","defaultValue":""},"pages":[{"id":1,"url":"about:blank","title":"","selected":true}]}}
|
|
`;
|
|
|
|
exports[`pages > select_page > when dialog is open 1`] = `
|
|
{"content":[{"type":"text","text":"# Open dialog\\nalert: test dialog.\\nCall handle_dialog to handle it before continuing.\\n## Pages\\n1: about:blank [selected]"}],"structuredContent":{"dialog":{"type":"alert","message":"test dialog","defaultValue":""},"pages":[{"id":1,"url":"about:blank","title":"","selected":true}]}}
|
|
`;
|