mirror of
https://github.com/microsoft/playwright-mcp.git
synced 2025-07-27 00:52:27 +08:00
feat: browser_resize (#92)
This commit is contained in:
parent
77080e8ca4
commit
e729494bd9
@ -32,7 +32,7 @@ import type { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|||||||
import type { LaunchOptions } from 'playwright';
|
import type { LaunchOptions } from 'playwright';
|
||||||
|
|
||||||
const snapshotTools: Tool[] = [
|
const snapshotTools: Tool[] = [
|
||||||
...common,
|
...common(true),
|
||||||
...files(true),
|
...files(true),
|
||||||
...install,
|
...install,
|
||||||
...keyboard(true),
|
...keyboard(true),
|
||||||
@ -43,7 +43,7 @@ const snapshotTools: Tool[] = [
|
|||||||
];
|
];
|
||||||
|
|
||||||
const screenshotTools: Tool[] = [
|
const screenshotTools: Tool[] = [
|
||||||
...common,
|
...common(false),
|
||||||
...files(false),
|
...files(false),
|
||||||
...install,
|
...install,
|
||||||
...keyboard(false),
|
...keyboard(false),
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
import { z } from 'zod';
|
import { z } from 'zod';
|
||||||
import { zodToJsonSchema } from 'zod-to-json-schema';
|
import { zodToJsonSchema } from 'zod-to-json-schema';
|
||||||
|
|
||||||
import type { Tool } from './tool';
|
import type { Tool, ToolFactory } from './tool';
|
||||||
|
|
||||||
const waitSchema = z.object({
|
const waitSchema = z.object({
|
||||||
time: z.number().describe('The time to wait in seconds'),
|
time: z.number().describe('The time to wait in seconds'),
|
||||||
@ -62,7 +62,34 @@ const close: Tool = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
export default [
|
const resizeSchema = z.object({
|
||||||
|
width: z.number().describe('Width of the browser window'),
|
||||||
|
height: z.number().describe('Height of the browser window'),
|
||||||
|
});
|
||||||
|
|
||||||
|
const resize: ToolFactory = captureSnapshot => ({
|
||||||
|
capability: 'core',
|
||||||
|
schema: {
|
||||||
|
name: 'browser_resize',
|
||||||
|
description: 'Resize the browser window',
|
||||||
|
inputSchema: zodToJsonSchema(resizeSchema),
|
||||||
|
},
|
||||||
|
handle: async (context, params) => {
|
||||||
|
const validatedParams = resizeSchema.parse(params);
|
||||||
|
|
||||||
|
const tab = context.currentTab();
|
||||||
|
return await tab.run(
|
||||||
|
tab => tab.page.setViewportSize({ width: validatedParams.width, height: validatedParams.height }),
|
||||||
|
{
|
||||||
|
status: `Resized browser window`,
|
||||||
|
captureSnapshot,
|
||||||
|
}
|
||||||
|
);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
export default (captureSnapshot: boolean) => [
|
||||||
close,
|
close,
|
||||||
wait,
|
wait,
|
||||||
|
resize(captureSnapshot)
|
||||||
];
|
];
|
||||||
|
@ -233,3 +233,22 @@ test('browser_type (slowly)', async ({ client }) => {
|
|||||||
].join('\n'),
|
].join('\n'),
|
||||||
}]);
|
}]);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('browser_resize', async ({ client }) => {
|
||||||
|
await client.callTool({
|
||||||
|
name: 'browser_navigate',
|
||||||
|
arguments: {
|
||||||
|
url: 'data:text/html,<html><title>Resize Test</title><body><div id="size">Waiting for resize...</div><script>new ResizeObserver(() => { document.getElementById("size").textContent = `Window size: ${window.innerWidth}x${window.innerHeight}`; }).observe(document.body);</script></body></html>',
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const response = await client.callTool({
|
||||||
|
name: 'browser_resize',
|
||||||
|
arguments: {
|
||||||
|
width: 390,
|
||||||
|
height: 780,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
expect(response).toContainTextContent('Resized browser window');
|
||||||
|
expect(response).toContainTextContent('Window size: 390x780');
|
||||||
|
});
|
||||||
|
@ -32,6 +32,7 @@ test('test snapshot tool list', async ({ client }) => {
|
|||||||
'browser_navigate',
|
'browser_navigate',
|
||||||
'browser_pdf_save',
|
'browser_pdf_save',
|
||||||
'browser_press_key',
|
'browser_press_key',
|
||||||
|
'browser_resize',
|
||||||
'browser_snapshot',
|
'browser_snapshot',
|
||||||
'browser_tab_close',
|
'browser_tab_close',
|
||||||
'browser_tab_list',
|
'browser_tab_list',
|
||||||
@ -53,6 +54,7 @@ test('test vision tool list', async ({ visionClient }) => {
|
|||||||
'browser_navigate',
|
'browser_navigate',
|
||||||
'browser_pdf_save',
|
'browser_pdf_save',
|
||||||
'browser_press_key',
|
'browser_press_key',
|
||||||
|
'browser_resize',
|
||||||
'browser_screen_capture',
|
'browser_screen_capture',
|
||||||
'browser_screen_click',
|
'browser_screen_click',
|
||||||
'browser_screen_drag',
|
'browser_screen_drag',
|
||||||
|
Loading…
x
Reference in New Issue
Block a user