mirror of
https://github.com/ChromeDevTools/chrome-devtools-mcp.git
synced 2026-09-14 19:45:30 +08:00
refactor: clean up more of the context interface (#2335)
- removed redundant page getters
This commit is contained in:
+14
-29
@@ -390,7 +390,7 @@ export class McpContext implements Context {
|
||||
|
||||
async restoreEmulation(page: McpPage) {
|
||||
const currentSetting = page.emulationSettings;
|
||||
await this.emulate(currentSetting, page.pptrPage);
|
||||
await this.emulate(currentSetting, page);
|
||||
}
|
||||
|
||||
get #hasNetworkBlockOrAllowlist(): boolean {
|
||||
@@ -407,10 +407,10 @@ export class McpContext implements Context {
|
||||
viewport?: Viewport;
|
||||
extraHttpHeaders?: Record<string, string> | undefined;
|
||||
},
|
||||
targetPage?: Page,
|
||||
targetMcpPage?: McpPage,
|
||||
): Promise<void> {
|
||||
const page = targetPage ?? this.getSelectedPptrPage();
|
||||
const mcpPage = this.#getMcpPage(page);
|
||||
const mcpPage = targetMcpPage ?? this.getSelectedMcpPage();
|
||||
const page = mcpPage.pptrPage;
|
||||
const newSettings: EmulationSettings = {...mcpPage.emulationSettings};
|
||||
|
||||
// Skip network emulation if blocklist/allowlist is configured, as it conflicts with blocking rules in Puppeteer.
|
||||
@@ -540,7 +540,7 @@ export class McpContext implements Context {
|
||||
return this.#options.performanceCrux;
|
||||
}
|
||||
|
||||
getSelectedPptrPage(): Page {
|
||||
getSelectedMcpPage(): McpPage {
|
||||
const page = this.#selectedPage;
|
||||
if (!page) {
|
||||
throw new Error('No page selected');
|
||||
@@ -550,12 +550,7 @@ export class McpContext implements Context {
|
||||
`The selected page has been closed. Call ${listPages().name} to see open pages.`,
|
||||
);
|
||||
}
|
||||
return page.pptrPage;
|
||||
}
|
||||
|
||||
getSelectedMcpPage(): McpPage {
|
||||
const page = this.getSelectedPptrPage();
|
||||
return this.#getMcpPage(page);
|
||||
return page;
|
||||
}
|
||||
|
||||
getPageById(pageId: number): McpPage {
|
||||
@@ -568,20 +563,8 @@ export class McpContext implements Context {
|
||||
return page;
|
||||
}
|
||||
|
||||
#getMcpPage(page: Page): McpPage {
|
||||
const mcpPage = this.#mcpPages.get(page);
|
||||
if (!mcpPage) {
|
||||
throw new Error('No McpPage found for the given page.');
|
||||
}
|
||||
return mcpPage;
|
||||
}
|
||||
|
||||
#getSelectedMcpPage(): McpPage {
|
||||
return this.#getMcpPage(this.getSelectedPptrPage());
|
||||
}
|
||||
|
||||
isPageSelected(page: Page): boolean {
|
||||
return this.#selectedPage?.pptrPage === page;
|
||||
isPageSelected(page: McpPage): boolean {
|
||||
return this.#selectedPage === page;
|
||||
}
|
||||
|
||||
selectPage(newPage: McpPage): void {
|
||||
@@ -600,7 +583,7 @@ export class McpContext implements Context {
|
||||
}
|
||||
|
||||
#updateSelectedPageTimeouts() {
|
||||
const page = this.#getSelectedMcpPage();
|
||||
const page = this.getSelectedMcpPage();
|
||||
// For waiters 5sec timeout should be sufficient.
|
||||
// Increased in case we throttle the CPU
|
||||
const cpuMultiplier = page.cpuThrottlingRate;
|
||||
@@ -891,9 +874,11 @@ export class McpContext implements Context {
|
||||
waitForTextOnPage(
|
||||
text: string[],
|
||||
timeout?: number,
|
||||
targetPage?: Page,
|
||||
mcpPage?: McpPage,
|
||||
): Promise<Element> {
|
||||
const page = targetPage ?? this.getSelectedPptrPage();
|
||||
const page = mcpPage
|
||||
? mcpPage.pptrPage
|
||||
: this.getSelectedMcpPage().pptrPage;
|
||||
const frames = page.frames();
|
||||
|
||||
let locator = this.#locatorClass.race(
|
||||
@@ -949,7 +934,7 @@ export class McpContext implements Context {
|
||||
if (!extension) {
|
||||
throw new Error(`Extension with ID ${id} not found.`);
|
||||
}
|
||||
const page = this.getSelectedPptrPage();
|
||||
const page = this.getSelectedMcpPage().pptrPage;
|
||||
await extension.triggerAction(page);
|
||||
}
|
||||
|
||||
|
||||
+3
-3
@@ -1033,7 +1033,7 @@ Call ${handleDialog.name} to handle it before continuing.`);
|
||||
? `${truncateTitle(title)} (${mcpPage.pptrPage.url()})`
|
||||
: mcpPage.pptrPage.url();
|
||||
parts.push(
|
||||
`${mcpPage.id}: ${pageLabel}${context.isPageSelected(mcpPage.pptrPage) ? ' [selected]' : ''}${contextLabel}`,
|
||||
`${mcpPage.id}: ${pageLabel}${context.isPageSelected(mcpPage) ? ' [selected]' : ''}${contextLabel}`,
|
||||
);
|
||||
structuredPages.push(createStructuredPage(mcpPage, context, title));
|
||||
}
|
||||
@@ -1055,7 +1055,7 @@ Call ${handleDialog.name} to handle it before continuing.`);
|
||||
? `${truncateTitle(title)} (${mcpPage.pptrPage.url()})`
|
||||
: mcpPage.pptrPage.url();
|
||||
response.push(
|
||||
`${mcpPage.id}: ${pageLabel}${context.isPageSelected(mcpPage.pptrPage) ? ' [selected]' : ''}${contextLabel}`,
|
||||
`${mcpPage.id}: ${pageLabel}${context.isPageSelected(mcpPage) ? ' [selected]' : ''}${contextLabel}`,
|
||||
);
|
||||
structuredExtensionPages.push(
|
||||
createStructuredPage(mcpPage, context, title),
|
||||
@@ -1515,7 +1515,7 @@ function createStructuredPage(
|
||||
id: mcpPage.id,
|
||||
url: mcpPage.pptrPage.url(),
|
||||
title,
|
||||
selected: context.isPageSelected(mcpPage.pptrPage),
|
||||
selected: context.isPageSelected(mcpPage),
|
||||
};
|
||||
if (isolatedContextName) {
|
||||
entry.isolatedContext = isolatedContextName;
|
||||
|
||||
@@ -215,7 +215,7 @@ export type Context = Readonly<{
|
||||
colorScheme?: 'dark' | 'light' | 'auto';
|
||||
viewport?: Viewport;
|
||||
},
|
||||
targetPage?: Page,
|
||||
mcpPage?: ContextPage,
|
||||
): Promise<void>;
|
||||
saveTemporaryFile(
|
||||
data: Uint8Array<ArrayBufferLike>,
|
||||
@@ -229,7 +229,7 @@ export type Context = Readonly<{
|
||||
waitForTextOnPage(
|
||||
text: string[],
|
||||
timeout?: number,
|
||||
page?: Page,
|
||||
mcpPage?: ContextPage,
|
||||
): Promise<Element>;
|
||||
/**
|
||||
* Returns a reqid for a cdpRequestId.
|
||||
|
||||
@@ -103,7 +103,7 @@ export const emulate = definePageTool({
|
||||
verifyFilesSchema: [],
|
||||
handler: async (request, response, context) => {
|
||||
const page = request.page;
|
||||
await context.emulate(request.params, page.pptrPage);
|
||||
await context.emulate(request.params, page);
|
||||
response.appendResponseLine('Emulation configured successfully');
|
||||
},
|
||||
});
|
||||
|
||||
@@ -66,7 +66,7 @@ export const waitFor = definePageTool({
|
||||
await context.waitForTextOnPage(
|
||||
request.params.text,
|
||||
request.params.timeout,
|
||||
page.pptrPage,
|
||||
page,
|
||||
);
|
||||
|
||||
response.appendResponseLine(
|
||||
|
||||
@@ -138,14 +138,14 @@ describe('McpContext', () => {
|
||||
it('reports the fallback when the selected page is closed', async () => {
|
||||
await withMcpContext(async (_response, context) => {
|
||||
const page = await context.newPage();
|
||||
assert.ok(context.isPageSelected(page.pptrPage));
|
||||
assert.ok(context.isPageSelected(page));
|
||||
|
||||
await page.pptrPage.close();
|
||||
await context.createPagesSnapshot();
|
||||
|
||||
const [firstPage] = context.getPages();
|
||||
assert.ok(firstPage);
|
||||
assert.ok(context.isPageSelected(firstPage.pptrPage));
|
||||
assert.ok(context.isPageSelected(firstPage));
|
||||
|
||||
const fallback = context.getSelectedPageFallback();
|
||||
assert.ok(fallback, 'fallback should be reported');
|
||||
@@ -178,7 +178,7 @@ describe('McpContext', () => {
|
||||
it('keeps a still-open selected page that is missing from the list', async () => {
|
||||
await withMcpContext(async (_response, context) => {
|
||||
const page = await context.newPage();
|
||||
assert.ok(context.isPageSelected(page.pptrPage));
|
||||
assert.ok(context.isPageSelected(page));
|
||||
|
||||
// A live page that is temporarily missing from the pages list must keep
|
||||
// its selection — only a genuinely closed page is replaced.
|
||||
@@ -193,7 +193,7 @@ describe('McpContext', () => {
|
||||
}
|
||||
|
||||
assert.ok(
|
||||
context.isPageSelected(page.pptrPage),
|
||||
context.isPageSelected(page),
|
||||
'a still-open page should keep its selection',
|
||||
);
|
||||
assert.strictEqual(context.getSelectedPageFallback(), undefined);
|
||||
|
||||
@@ -81,7 +81,7 @@ describe('McpResponse', () => {
|
||||
|
||||
it('does not include anything in response if snapshot is null', async t => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
page.accessibility.snapshot = async () => null;
|
||||
const {content, structuredContent} = await response.handle(
|
||||
'test',
|
||||
@@ -96,7 +96,7 @@ describe('McpResponse', () => {
|
||||
|
||||
it('returns correctly formatted snapshot for a simple tree', async t => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.setContent(
|
||||
html`<button>Click me</button>
|
||||
<input
|
||||
@@ -119,7 +119,7 @@ describe('McpResponse', () => {
|
||||
|
||||
it('returns values for textboxes', async t => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.setContent(
|
||||
html`<label
|
||||
>username<input
|
||||
@@ -143,7 +143,7 @@ describe('McpResponse', () => {
|
||||
|
||||
it('returns verbose snapshot and structured content', async t => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.setContent(html`<aside>test</aside>`);
|
||||
response.includeSnapshot({
|
||||
verbose: true,
|
||||
@@ -162,7 +162,7 @@ describe('McpResponse', () => {
|
||||
const filePath = join(tmpdir(), 'test-snapshot.txt');
|
||||
try {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.setContent(html`<aside>test</aside>`);
|
||||
response.includeSnapshot({
|
||||
verbose: true,
|
||||
@@ -191,7 +191,7 @@ describe('McpResponse', () => {
|
||||
|
||||
it('preserves mapping ids across multiple snapshots', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.setContent(html`
|
||||
<div>
|
||||
<button id="btn1">Button 1</button>
|
||||
@@ -266,7 +266,7 @@ describe('McpResponse', () => {
|
||||
</div>
|
||||
`,
|
||||
);
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.goto(server.getRoute('/page.html'));
|
||||
|
||||
response.includeSnapshot();
|
||||
@@ -556,7 +556,7 @@ describe('McpResponse', () => {
|
||||
it('adds console messages when the setting is true', async t => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
response.setIncludeConsoleData(true);
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
const consoleMessagePromise = new Promise<void>(resolve => {
|
||||
page.on('console', () => {
|
||||
resolve();
|
||||
|
||||
@@ -284,7 +284,7 @@ describe('console', () => {
|
||||
|
||||
it('when dialog is open', async t => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.setContent(
|
||||
'<script>console.log("Pre-dialog message")</script>',
|
||||
);
|
||||
@@ -627,7 +627,7 @@ describe('console', () => {
|
||||
|
||||
it('when dialog is open', async t => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.setContent(
|
||||
'<script>console.error("This is an error")</script>',
|
||||
);
|
||||
|
||||
@@ -372,7 +372,7 @@ describe('emulation', () => {
|
||||
|
||||
it('emulates viewport', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.goto(server.baseUrl + '/viewport');
|
||||
await emulate.handler(
|
||||
{
|
||||
@@ -412,7 +412,7 @@ describe('emulation', () => {
|
||||
|
||||
it('clears viewport override when viewport is set to null', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
// First set a viewport
|
||||
await emulate.handler(
|
||||
{
|
||||
@@ -453,7 +453,7 @@ describe('emulation', () => {
|
||||
assert.strictEqual(context.getSelectedMcpPage().viewport, null);
|
||||
|
||||
// Somehow reset of the viewport seems to be async.
|
||||
await context.getSelectedPptrPage().waitForFunction(() => {
|
||||
await context.getSelectedMcpPage().pptrPage.waitForFunction(() => {
|
||||
return window.innerWidth !== 400 && window.innerHeight !== 400;
|
||||
});
|
||||
});
|
||||
@@ -482,7 +482,7 @@ describe('emulation', () => {
|
||||
|
||||
assert.strictEqual(context.getSelectedMcpPage().viewport, null);
|
||||
assert.ok(
|
||||
await context.getSelectedPptrPage().evaluate(() => {
|
||||
await context.getSelectedMcpPage().pptrPage.evaluate(() => {
|
||||
return window.innerWidth !== 400 && window.innerHeight !== 400;
|
||||
}),
|
||||
);
|
||||
@@ -505,7 +505,7 @@ describe('emulation', () => {
|
||||
);
|
||||
|
||||
assert.strictEqual(context.getSelectedMcpPage().userAgent, 'MyUA');
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
const ua = await page.evaluate(() => navigator.userAgent);
|
||||
assert.strictEqual(ua, 'MyUA');
|
||||
});
|
||||
@@ -536,7 +536,7 @@ describe('emulation', () => {
|
||||
context,
|
||||
);
|
||||
assert.strictEqual(context.getSelectedMcpPage().userAgent, 'UA2');
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
const ua = await page.evaluate(() => navigator.userAgent);
|
||||
assert.strictEqual(ua, 'UA2');
|
||||
});
|
||||
@@ -567,7 +567,7 @@ describe('emulation', () => {
|
||||
);
|
||||
|
||||
assert.strictEqual(context.getSelectedMcpPage().userAgent, null);
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
const ua = await page.evaluate(() => navigator.userAgent);
|
||||
assert.notStrictEqual(ua, 'MyUA');
|
||||
assert.ok(ua.length > 0);
|
||||
@@ -594,7 +594,7 @@ describe('emulation', () => {
|
||||
|
||||
assert.strictEqual(context.getSelectedMcpPage().userAgent, null);
|
||||
assert.ok(
|
||||
await context.getSelectedPptrPage().evaluate(() => {
|
||||
await context.getSelectedMcpPage().pptrPage.evaluate(() => {
|
||||
return navigator.userAgent !== 'MyUA';
|
||||
}),
|
||||
);
|
||||
@@ -612,7 +612,7 @@ describe('emulation', () => {
|
||||
});
|
||||
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await emulate.handler(
|
||||
{
|
||||
params: {
|
||||
@@ -638,7 +638,7 @@ describe('emulation', () => {
|
||||
});
|
||||
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
// Set headers first
|
||||
await emulate.handler(
|
||||
{
|
||||
@@ -686,7 +686,7 @@ describe('emulation', () => {
|
||||
});
|
||||
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await emulate.handler(
|
||||
{
|
||||
params: {
|
||||
@@ -783,7 +783,7 @@ describe('emulation', () => {
|
||||
);
|
||||
|
||||
assert.strictEqual(context.getSelectedMcpPage().colorScheme, 'dark');
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
const scheme = await page.evaluate(() =>
|
||||
window.matchMedia('(prefers-color-scheme: dark)').matches
|
||||
? 'dark'
|
||||
@@ -818,7 +818,7 @@ describe('emulation', () => {
|
||||
context,
|
||||
);
|
||||
assert.strictEqual(context.getSelectedMcpPage().colorScheme, 'light');
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
const scheme = await page.evaluate(() =>
|
||||
window.matchMedia('(prefers-color-scheme: light)').matches
|
||||
? 'light'
|
||||
@@ -830,7 +830,7 @@ describe('emulation', () => {
|
||||
|
||||
it('resets color scheme when set to auto', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
|
||||
const initial = await page.evaluate(
|
||||
() => window.matchMedia('(prefers-color-scheme: dark)').matches,
|
||||
|
||||
@@ -58,7 +58,7 @@ describe('extension', () => {
|
||||
);
|
||||
|
||||
const extensionId = extractExtensionId(response);
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.goto('chrome://extensions');
|
||||
|
||||
const element = await page.waitForSelector(
|
||||
|
||||
+32
-32
@@ -33,7 +33,7 @@ describe('input', () => {
|
||||
describe('click', () => {
|
||||
it('clicks', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.setContent(
|
||||
html`<button onclick="this.innerText = 'clicked';">test</button>`,
|
||||
);
|
||||
@@ -60,7 +60,7 @@ describe('input', () => {
|
||||
});
|
||||
it('double clicks', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.setContent(
|
||||
html`<button ondblclick="this.innerText = 'dblclicked';"
|
||||
>test</button
|
||||
@@ -101,7 +101,7 @@ describe('input', () => {
|
||||
});
|
||||
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.goto(server.getRoute('/link'));
|
||||
context.getSelectedMcpPage().textSnapshot = await TextSnapshot.create(
|
||||
context.getSelectedMcpPage(),
|
||||
@@ -138,7 +138,7 @@ describe('input', () => {
|
||||
server.addHtmlRoute('/after-click', html`<main>arrived</main>`);
|
||||
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.goto(server.getRoute('/start'));
|
||||
context.getSelectedMcpPage().textSnapshot = await TextSnapshot.create(
|
||||
context.getSelectedMcpPage(),
|
||||
@@ -165,7 +165,7 @@ describe('input', () => {
|
||||
|
||||
it('does not report navigation when click does not navigate', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.setContent(
|
||||
html`<button onclick="this.innerText = 'clicked';">test</button>`,
|
||||
);
|
||||
@@ -207,7 +207,7 @@ describe('input', () => {
|
||||
`,
|
||||
);
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.goto(server.getRoute('/unstable'));
|
||||
context.getSelectedMcpPage().textSnapshot = await TextSnapshot.create(
|
||||
context.getSelectedMcpPage(),
|
||||
@@ -235,7 +235,7 @@ describe('input', () => {
|
||||
|
||||
it('does not include snapshot by default', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.setContent(
|
||||
html`<button onclick="this.innerText = 'clicked';">test</button>`,
|
||||
);
|
||||
@@ -262,7 +262,7 @@ describe('input', () => {
|
||||
|
||||
it('includes snapshot if includeSnapshot is true', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.setContent(
|
||||
html`<button onclick="this.innerText = 'clicked';">test</button>`,
|
||||
);
|
||||
@@ -290,7 +290,7 @@ describe('input', () => {
|
||||
|
||||
it('selects a collapsed native select option by option uid', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.setContent(
|
||||
html`<select onchange="document.body.dataset.selected = this.value">
|
||||
<option value="v1">one</option>
|
||||
@@ -337,7 +337,7 @@ describe('input', () => {
|
||||
|
||||
it('selects a collapsed native optgroup option by option uid', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.setContent(
|
||||
html`<select onchange="document.body.dataset.selected = this.value">
|
||||
<optgroup label="Numbers">
|
||||
@@ -386,7 +386,7 @@ describe('input', () => {
|
||||
|
||||
it('clicks custom ARIA option elements through the normal click path', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.setContent(
|
||||
html`<div role="listbox">
|
||||
<div
|
||||
@@ -431,7 +431,7 @@ describe('input', () => {
|
||||
describe('hover', () => {
|
||||
it('hovers', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.setContent(
|
||||
html`<button onmouseover="this.innerText = 'hovered';">test</button>`,
|
||||
);
|
||||
@@ -461,7 +461,7 @@ describe('input', () => {
|
||||
describe('click_at', () => {
|
||||
it('clicks at coordinates', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.setContent(
|
||||
html`<div
|
||||
style="width: 100px; height: 100px; background: red;"
|
||||
@@ -493,7 +493,7 @@ describe('input', () => {
|
||||
|
||||
it('double clicks at coordinates', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.setContent(
|
||||
html`<div
|
||||
style="width: 100px; height: 100px; background: red;"
|
||||
@@ -528,7 +528,7 @@ describe('input', () => {
|
||||
describe('fill', () => {
|
||||
it('fills out an input', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.setContent(html`<input />`);
|
||||
context.getSelectedMcpPage().textSnapshot = await TextSnapshot.create(
|
||||
context.getSelectedMcpPage(),
|
||||
@@ -555,7 +555,7 @@ describe('input', () => {
|
||||
|
||||
it('fills out a select by text', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.setContent(
|
||||
html`<select
|
||||
><option value="v1">one</option
|
||||
@@ -590,7 +590,7 @@ describe('input', () => {
|
||||
|
||||
it('fills out a textarea marked as combobox', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.setContent(html`<textarea role="combobox"></textarea>`);
|
||||
context.getSelectedMcpPage().textSnapshot = await TextSnapshot.create(
|
||||
context.getSelectedMcpPage(),
|
||||
@@ -621,7 +621,7 @@ describe('input', () => {
|
||||
|
||||
it('fills out a textarea with long text', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.setContent(html`<textarea></textarea>`);
|
||||
context.getSelectedMcpPage().textSnapshot = await TextSnapshot.create(
|
||||
context.getSelectedMcpPage(),
|
||||
@@ -655,7 +655,7 @@ describe('input', () => {
|
||||
|
||||
it('types text', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.setContent(html`<textarea></textarea>`);
|
||||
await page.click('textarea');
|
||||
context.getSelectedMcpPage().textSnapshot = await TextSnapshot.create(
|
||||
@@ -683,7 +683,7 @@ describe('input', () => {
|
||||
|
||||
it('types text with submit key', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.setContent(html`<textarea></textarea>`);
|
||||
await page.click('textarea');
|
||||
context.getSelectedMcpPage().textSnapshot = await TextSnapshot.create(
|
||||
@@ -722,7 +722,7 @@ describe('input', () => {
|
||||
|
||||
it('errors on invalid submit key', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.setContent(html`<textarea></textarea>`);
|
||||
await page.click('textarea');
|
||||
context.getSelectedMcpPage().textSnapshot = await TextSnapshot.create(
|
||||
@@ -748,7 +748,7 @@ describe('input', () => {
|
||||
|
||||
it('reproduction: fill isolation', async () => {
|
||||
await withMcpContext(async (_response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.setContent(
|
||||
html`<form>
|
||||
<input
|
||||
@@ -825,7 +825,7 @@ describe('input', () => {
|
||||
|
||||
it('toggles checkboxes', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.setContent(
|
||||
html`<input
|
||||
type="checkbox"
|
||||
@@ -883,7 +883,7 @@ describe('input', () => {
|
||||
|
||||
it('toggles switches', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.setContent(html`
|
||||
<div
|
||||
role="switch"
|
||||
@@ -941,7 +941,7 @@ describe('input', () => {
|
||||
|
||||
it('selects radio buttons', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.setContent(html`
|
||||
<input
|
||||
type="radio"
|
||||
@@ -1001,7 +1001,7 @@ describe('input', () => {
|
||||
describe('drags', () => {
|
||||
it('drags one element onto another', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.setContent(
|
||||
html`<div
|
||||
role="button"
|
||||
@@ -1058,7 +1058,7 @@ describe('input', () => {
|
||||
describe('fill form', () => {
|
||||
it('successfully fills out the form', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.setContent(
|
||||
html`<form>
|
||||
<label
|
||||
@@ -1120,7 +1120,7 @@ describe('input', () => {
|
||||
|
||||
it('fill_form handles checkboxes', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.setContent(
|
||||
html`<input
|
||||
name="username"
|
||||
@@ -1176,7 +1176,7 @@ describe('input', () => {
|
||||
await fs.writeFile(testFilePath, 'test file content');
|
||||
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.setContent(
|
||||
html`<form>
|
||||
<input
|
||||
@@ -1214,7 +1214,7 @@ describe('input', () => {
|
||||
await fs.writeFile(testFilePath, 'test file content');
|
||||
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.setContent(
|
||||
html`<button id="file-chooser-button">Upload file</button>
|
||||
<input
|
||||
@@ -1264,7 +1264,7 @@ describe('input', () => {
|
||||
await fs.writeFile(testFilePath, 'test file content');
|
||||
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.setContent(html`<div>Not a file input</div>`);
|
||||
context.getSelectedMcpPage().textSnapshot = await TextSnapshot.create(
|
||||
context.getSelectedMcpPage(),
|
||||
@@ -1326,7 +1326,7 @@ describe('input', () => {
|
||||
|
||||
it('processes press_key', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.setContent(
|
||||
html`<script>
|
||||
logs = [];
|
||||
|
||||
@@ -21,7 +21,7 @@ describe('lighthouse', () => {
|
||||
server.addHtmlRoute('/test', html`<div>Test</div>`);
|
||||
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.goto(server.getRoute('/test'));
|
||||
|
||||
await lighthouseAudit.handler(
|
||||
@@ -56,7 +56,7 @@ describe('lighthouse', () => {
|
||||
server.addHtmlRoute('/test-mobile', html`<div>Test Mobile</div>`);
|
||||
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.goto(server.getRoute('/test-mobile'));
|
||||
await context.emulate({
|
||||
viewport: {
|
||||
@@ -121,7 +121,7 @@ describe('lighthouse', () => {
|
||||
server.addHtmlRoute('/test-mobile', html`<div>Test Mobile</div>`);
|
||||
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.goto(server.getRoute('/test-mobile'));
|
||||
|
||||
await lighthouseAudit.handler(
|
||||
@@ -156,7 +156,7 @@ describe('lighthouse', () => {
|
||||
|
||||
try {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.goto(server.getRoute('/test-mobile'));
|
||||
|
||||
await lighthouseAudit.handler(
|
||||
|
||||
@@ -41,7 +41,7 @@ describe('network', () => {
|
||||
|
||||
await withMcpContext(async (response, context) => {
|
||||
await context.setUpNetworkCollectorForTesting();
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.goto(server.getRoute('/one'));
|
||||
await page.goto(server.getRoute('/two'));
|
||||
await page.goto(server.getRoute('/three'));
|
||||
@@ -68,7 +68,7 @@ describe('network', () => {
|
||||
|
||||
await withMcpContext(async (response, context) => {
|
||||
await context.setUpNetworkCollectorForTesting();
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.goto(server.getRoute('/one'));
|
||||
await page.goto(server.getRoute('/two'));
|
||||
await page.goto(server.getRoute('/three'));
|
||||
@@ -111,7 +111,7 @@ describe('network', () => {
|
||||
|
||||
await withMcpContext(async (response, context) => {
|
||||
await context.setUpNetworkCollectorForTesting();
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.goto(server.getRoute('/redirect'), {
|
||||
waitUntil: 'networkidle0',
|
||||
});
|
||||
@@ -135,7 +135,7 @@ describe('network', () => {
|
||||
describe('network_get_request', () => {
|
||||
it('attaches request', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.goto('data:text/html,<div>Hello MCP</div>');
|
||||
await getNetworkRequest.handler(
|
||||
{params: {reqid: 1}, page: context.getSelectedMcpPage()},
|
||||
@@ -148,7 +148,7 @@ describe('network', () => {
|
||||
});
|
||||
it('should not add the request list', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.goto('data:text/html,<div>Hello MCP</div>');
|
||||
await getNetworkRequest.handler(
|
||||
{params: {reqid: 1}, page: context.getSelectedMcpPage()},
|
||||
@@ -165,7 +165,7 @@ describe('network', () => {
|
||||
|
||||
await withMcpContext(async (response, context) => {
|
||||
await context.setUpNetworkCollectorForTesting();
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.goto(server.getRoute('/one'));
|
||||
await page.goto(server.getRoute('/two'));
|
||||
await page.goto(server.getRoute('/three'));
|
||||
|
||||
+35
-35
@@ -208,7 +208,7 @@ describe('pages', () => {
|
||||
|
||||
it('when dialog is open', async t => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
|
||||
const dialogPromise = new Promise<Dialog>(resolve => {
|
||||
page.on('dialog', dialog => {
|
||||
@@ -285,7 +285,7 @@ describe('pages', () => {
|
||||
response,
|
||||
context,
|
||||
);
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
assert.strictEqual(context.getIsolatedContextName(page), 'session-a');
|
||||
assert.ok(response.includePages);
|
||||
});
|
||||
@@ -298,13 +298,13 @@ describe('pages', () => {
|
||||
response,
|
||||
context,
|
||||
);
|
||||
const page1 = context.getSelectedPptrPage();
|
||||
const page1 = context.getSelectedMcpPage().pptrPage;
|
||||
await newPage().handler(
|
||||
{params: {url: 'about:blank', isolatedContext: 'session-a'}},
|
||||
response,
|
||||
context,
|
||||
);
|
||||
const page2 = context.getSelectedPptrPage();
|
||||
const page2 = context.getSelectedMcpPage().pptrPage;
|
||||
assert.notStrictEqual(page1, page2);
|
||||
assert.strictEqual(context.getIsolatedContextName(page1), 'session-a');
|
||||
assert.strictEqual(context.getIsolatedContextName(page2), 'session-a');
|
||||
@@ -319,13 +319,13 @@ describe('pages', () => {
|
||||
response,
|
||||
context,
|
||||
);
|
||||
const pageA = context.getSelectedPptrPage();
|
||||
const pageA = context.getSelectedMcpPage().pptrPage;
|
||||
await newPage().handler(
|
||||
{params: {url: 'about:blank', isolatedContext: 'session-b'}},
|
||||
response,
|
||||
context,
|
||||
);
|
||||
const pageB = context.getSelectedPptrPage();
|
||||
const pageB = context.getSelectedMcpPage().pptrPage;
|
||||
assert.strictEqual(context.getIsolatedContextName(pageA), 'session-a');
|
||||
assert.strictEqual(context.getIsolatedContextName(pageB), 'session-b');
|
||||
assert.notStrictEqual(pageA.browserContext(), pageB.browserContext());
|
||||
@@ -350,7 +350,7 @@ describe('pages', () => {
|
||||
|
||||
it('does not set isolatedContext for pages in the default context', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
assert.strictEqual(context.getIsolatedContextName(page), undefined);
|
||||
await newPage().handler(
|
||||
{params: {url: 'about:blank'}},
|
||||
@@ -358,7 +358,7 @@ describe('pages', () => {
|
||||
context,
|
||||
);
|
||||
assert.strictEqual(
|
||||
context.getIsolatedContextName(context.getSelectedPptrPage()),
|
||||
context.getIsolatedContextName(context.getSelectedMcpPage().pptrPage),
|
||||
undefined,
|
||||
);
|
||||
});
|
||||
@@ -371,7 +371,7 @@ describe('pages', () => {
|
||||
response,
|
||||
context,
|
||||
);
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
const pageId = context.getSelectedMcpPage().id;
|
||||
assert.ok(!page.isClosed());
|
||||
await closePage.handler({params: {pageId}}, response, context);
|
||||
@@ -381,7 +381,7 @@ describe('pages', () => {
|
||||
|
||||
it('when dialog is open', async t => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
|
||||
const dialogPromise = new Promise<Dialog>(resolve => {
|
||||
page.on('dialog', dialog => {
|
||||
@@ -446,8 +446,8 @@ describe('pages', () => {
|
||||
|
||||
// Verify the default page was NOT affected.
|
||||
const defaultContent = await context
|
||||
.getSelectedPptrPage()
|
||||
.evaluate(() => document.querySelector('h1')?.textContent);
|
||||
.getSelectedMcpPage()
|
||||
.pptrPage.evaluate(() => document.querySelector('h1')?.textContent);
|
||||
assert.notStrictEqual(defaultContent, 'Navigated');
|
||||
});
|
||||
});
|
||||
@@ -468,7 +468,7 @@ describe('pages', () => {
|
||||
});
|
||||
it('cannot close the last page', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await closePage.handler({params: {pageId: 1}}, response, context);
|
||||
assert.deepStrictEqual(
|
||||
response.responseLines[0],
|
||||
@@ -559,7 +559,7 @@ describe('pages', () => {
|
||||
response,
|
||||
context,
|
||||
);
|
||||
const pageA = context.getSelectedPptrPage();
|
||||
const pageA = context.getSelectedMcpPage().pptrPage;
|
||||
const pageAId = context.getSelectedMcpPage().id;
|
||||
|
||||
await newPage().handler(
|
||||
@@ -567,7 +567,7 @@ describe('pages', () => {
|
||||
response,
|
||||
context,
|
||||
);
|
||||
const pageB = context.getSelectedPptrPage();
|
||||
const pageB = context.getSelectedMcpPage().pptrPage;
|
||||
|
||||
// Selecting pageB (ctx-b) should not defocus pageA (ctx-a).
|
||||
assert.strictEqual(
|
||||
@@ -598,7 +598,7 @@ describe('pages', () => {
|
||||
|
||||
it('when dialog is open', async t => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
|
||||
const dialogPromise = new Promise<Dialog>(resolve => {
|
||||
page.on('dialog', dialog => {
|
||||
@@ -631,7 +631,7 @@ describe('pages', () => {
|
||||
response,
|
||||
context,
|
||||
);
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
assert.equal(
|
||||
await page.evaluate(() => document.querySelector('div')?.textContent),
|
||||
'Hello MCP',
|
||||
@@ -672,7 +672,7 @@ describe('pages', () => {
|
||||
|
||||
it('respects the timeout parameter', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
const stub = sinon.stub(page, 'waitForNavigation').resolves(null);
|
||||
|
||||
try {
|
||||
@@ -700,7 +700,7 @@ describe('pages', () => {
|
||||
});
|
||||
it('go back', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.goto('data:text/html,<div>Hello MCP</div>');
|
||||
await navigatePage().handler(
|
||||
{params: {type: 'back'}, page: context.getSelectedMcpPage()},
|
||||
@@ -717,7 +717,7 @@ describe('pages', () => {
|
||||
});
|
||||
it('go forward', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.goto('data:text/html,<div>Hello MCP</div>');
|
||||
await page.goBack();
|
||||
await navigatePage().handler(
|
||||
@@ -735,7 +735,7 @@ describe('pages', () => {
|
||||
});
|
||||
it('reload', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.goto('data:text/html,<div>Hello MCP</div>');
|
||||
await navigatePage().handler(
|
||||
{params: {type: 'reload'}, page: context.getSelectedMcpPage()},
|
||||
@@ -753,7 +753,7 @@ describe('pages', () => {
|
||||
|
||||
it('reload with accpeting the beforeunload dialog', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.setContent(
|
||||
html` <script>
|
||||
window.addEventListener('beforeunload', e => {
|
||||
@@ -780,7 +780,7 @@ describe('pages', () => {
|
||||
|
||||
it('reload with declining the beforeunload dialog', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.setContent(
|
||||
html` <script>
|
||||
window.addEventListener('beforeunload', e => {
|
||||
@@ -857,7 +857,7 @@ describe('pages', () => {
|
||||
response,
|
||||
context,
|
||||
);
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
|
||||
// wait for up to 1s for the global variable to set by the initScript to exist
|
||||
await page.waitForFunction("window.initScript==='completed'", {
|
||||
@@ -870,7 +870,7 @@ describe('pages', () => {
|
||||
|
||||
it('when dialog is open', async t => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
const dialogPromise = new Promise<void>(resolve => {
|
||||
page.on('dialog', () => resolve());
|
||||
});
|
||||
@@ -901,7 +901,7 @@ describe('pages', () => {
|
||||
describe('resize', () => {
|
||||
it('resize the page', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
const resizePromise = page.evaluate(() => {
|
||||
return new Promise(resolve => {
|
||||
window.addEventListener('resize', resolve, {once: true});
|
||||
@@ -928,7 +928,7 @@ describe('pages', () => {
|
||||
|
||||
it('resize when window state is normal', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
const browser = page.browser();
|
||||
const windowId = await page.windowId();
|
||||
await browser.setWindowBounds(windowId, {windowState: 'normal'});
|
||||
@@ -962,7 +962,7 @@ describe('pages', () => {
|
||||
|
||||
it('resize when window state is minimized', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
const browser = page.browser();
|
||||
const windowId = await page.windowId();
|
||||
await browser.setWindowBounds(windowId, {windowState: 'minimized'});
|
||||
@@ -996,7 +996,7 @@ describe('pages', () => {
|
||||
|
||||
it('resize when window state is maximized', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
const browser = page.browser();
|
||||
const windowId = await page.windowId();
|
||||
await browser.setWindowBounds(windowId, {windowState: 'maximized'});
|
||||
@@ -1030,7 +1030,7 @@ describe('pages', () => {
|
||||
|
||||
it('resize when window state is fullscreen', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
const browser = page.browser();
|
||||
const windowId = await page.windowId();
|
||||
await browser.setWindowBounds(windowId, {windowState: 'fullscreen'});
|
||||
@@ -1064,7 +1064,7 @@ describe('pages', () => {
|
||||
|
||||
it('when dialog is open', async t => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
const dialogPromise = new Promise<Dialog>(resolve => {
|
||||
page.on('dialog', dialog => {
|
||||
resolve(dialog);
|
||||
@@ -1096,7 +1096,7 @@ describe('pages', () => {
|
||||
describe('dialogs', () => {
|
||||
it('can accept dialogs', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
const dialogPromise = new Promise<void>(resolve => {
|
||||
page.on('dialog', () => {
|
||||
resolve();
|
||||
@@ -1126,7 +1126,7 @@ describe('pages', () => {
|
||||
});
|
||||
it('can dismiss dialogs', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
const dialogPromise = new Promise<void>(resolve => {
|
||||
page.on('dialog', () => {
|
||||
resolve();
|
||||
@@ -1156,7 +1156,7 @@ describe('pages', () => {
|
||||
});
|
||||
it('can dismiss already dismissed dialog dialogs', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
const dialogPromise = new Promise<Dialog>(resolve => {
|
||||
page.on('dialog', dialog => {
|
||||
resolve(dialog);
|
||||
@@ -1276,7 +1276,7 @@ describe('pages', () => {
|
||||
describe('get_tab_id', () => {
|
||||
it('returns the tab id', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
// @ts-expect-error _tabId is internal.
|
||||
assert.ok(typeof page._tabId === 'string');
|
||||
// @ts-expect-error _tabId is internal.
|
||||
|
||||
@@ -46,7 +46,7 @@ describe('performance', () => {
|
||||
it('starts a trace recording', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
context.setIsRunningPerformanceTrace(false);
|
||||
const selectedPage = context.getSelectedPptrPage();
|
||||
const selectedPage = context.getSelectedMcpPage().pptrPage;
|
||||
const startTracingStub = sinon.stub(selectedPage.tracing, 'start');
|
||||
await startTrace.handler(
|
||||
{
|
||||
@@ -68,7 +68,7 @@ describe('performance', () => {
|
||||
|
||||
it('can navigate to about:blank and record a page reload', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const selectedPage = context.getSelectedPptrPage();
|
||||
const selectedPage = context.getSelectedMcpPage().pptrPage;
|
||||
sinon.stub(selectedPage, 'url').callsFake(() => 'https://www.test.com');
|
||||
const gotoStub = sinon.stub(selectedPage, 'goto');
|
||||
const startTracingStub = sinon.stub(selectedPage.tracing, 'start');
|
||||
@@ -100,7 +100,7 @@ describe('performance', () => {
|
||||
const rawData = loadTraceAsBuffer('basic-trace.json.gz');
|
||||
|
||||
await withMcpContext(async (response, context) => {
|
||||
const selectedPage = context.getSelectedPptrPage();
|
||||
const selectedPage = context.getSelectedMcpPage().pptrPage;
|
||||
sinon.stub(selectedPage, 'url').callsFake(() => 'https://www.test.com');
|
||||
sinon.stub(selectedPage, 'goto').callsFake(() => Promise.resolve(null));
|
||||
const startTracingStub = sinon.stub(selectedPage.tracing, 'start');
|
||||
@@ -147,7 +147,7 @@ describe('performance', () => {
|
||||
it('errors if a recording is already active', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
context.setIsRunningPerformanceTrace(true);
|
||||
const selectedPage = context.getSelectedPptrPage();
|
||||
const selectedPage = context.getSelectedMcpPage().pptrPage;
|
||||
const startTracingStub = sinon.stub(selectedPage.tracing, 'start');
|
||||
await startTrace.handler(
|
||||
{
|
||||
@@ -174,7 +174,7 @@ describe('performance', () => {
|
||||
|
||||
await withMcpContext(async (response, context) => {
|
||||
const filePath = 'test-trace.json.gz';
|
||||
const selectedPage = context.getSelectedPptrPage();
|
||||
const selectedPage = context.getSelectedMcpPage().pptrPage;
|
||||
sinon.stub(selectedPage, 'url').callsFake(() => 'https://www.test.com');
|
||||
sinon.stub(selectedPage, 'goto').callsFake(() => Promise.resolve(null));
|
||||
sinon.stub(selectedPage.tracing, 'start');
|
||||
@@ -273,7 +273,7 @@ describe('performance', () => {
|
||||
it('does nothing if the trace is not running and does not error', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
context.setIsRunningPerformanceTrace(false);
|
||||
const selectedPage = context.getSelectedPptrPage();
|
||||
const selectedPage = context.getSelectedMcpPage().pptrPage;
|
||||
const stopTracingStub = sinon.stub(selectedPage.tracing, 'stop');
|
||||
await stopTrace.handler(
|
||||
{params: {}, page: context.getSelectedMcpPage()},
|
||||
@@ -289,7 +289,7 @@ describe('performance', () => {
|
||||
const rawData = loadTraceAsBuffer('basic-trace.json.gz');
|
||||
await withMcpContext(async (response, context) => {
|
||||
context.setIsRunningPerformanceTrace(true);
|
||||
const selectedPage = context.getSelectedPptrPage();
|
||||
const selectedPage = context.getSelectedMcpPage().pptrPage;
|
||||
const stopTracingStub = sinon
|
||||
.stub(selectedPage.tracing, 'stop')
|
||||
.callsFake(async () => {
|
||||
@@ -313,7 +313,7 @@ describe('performance', () => {
|
||||
it('throws an error if parsing the trace buffer fails', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
context.setIsRunningPerformanceTrace(true);
|
||||
const selectedPage = context.getSelectedPptrPage();
|
||||
const selectedPage = context.getSelectedMcpPage().pptrPage;
|
||||
sinon
|
||||
.stub(selectedPage.tracing, 'stop')
|
||||
.returns(Promise.resolve(undefined));
|
||||
@@ -334,7 +334,7 @@ describe('performance', () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const filePath = 'test-trace.json';
|
||||
context.setIsRunningPerformanceTrace(true);
|
||||
const selectedPage = context.getSelectedPptrPage();
|
||||
const selectedPage = context.getSelectedMcpPage().pptrPage;
|
||||
const stopTracingStub = sinon
|
||||
.stub(selectedPage.tracing, 'stop')
|
||||
.resolves(rawData);
|
||||
@@ -364,7 +364,7 @@ describe('performance', () => {
|
||||
await withMcpContext(
|
||||
async (response, context) => {
|
||||
context.setIsRunningPerformanceTrace(true);
|
||||
const selectedPage = context.getSelectedPptrPage();
|
||||
const selectedPage = context.getSelectedMcpPage().pptrPage;
|
||||
sinon.stub(selectedPage.tracing, 'stop').resolves(rawData);
|
||||
|
||||
await stopTrace.handler(
|
||||
@@ -392,7 +392,7 @@ describe('performance', () => {
|
||||
const rawData = loadTraceAsBuffer('web-dev-with-commit.json.gz');
|
||||
await withMcpContext(async (response, context) => {
|
||||
context.setIsRunningPerformanceTrace(true);
|
||||
const selectedPage = context.getSelectedPptrPage();
|
||||
const selectedPage = context.getSelectedMcpPage().pptrPage;
|
||||
sinon.stub(selectedPage.tracing, 'stop').resolves(rawData);
|
||||
|
||||
const fetchStub = globalThis.fetch as sinon.SinonStub;
|
||||
@@ -445,7 +445,7 @@ describe('performance', () => {
|
||||
|
||||
await withMcpContext(async (response, context) => {
|
||||
context.setIsRunningPerformanceTrace(true);
|
||||
const selectedPage = context.getSelectedPptrPage();
|
||||
const selectedPage = context.getSelectedMcpPage().pptrPage;
|
||||
sinon.stub(selectedPage.tracing, 'stop').resolves(modifiedData);
|
||||
|
||||
// Emulate mobile
|
||||
|
||||
@@ -31,7 +31,7 @@ describe('screencast', () => {
|
||||
it('starts a screencast recording with filePath', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const mockRecorder = createMockRecorder();
|
||||
const selectedPage = context.getSelectedPptrPage();
|
||||
const selectedPage = context.getSelectedMcpPage().pptrPage;
|
||||
const screencastStub = sinon
|
||||
.stub(selectedPage, 'screencast')
|
||||
.resolves(mockRecorder as never);
|
||||
@@ -62,7 +62,7 @@ describe('screencast', () => {
|
||||
it('records WebM for an uppercase extension (case-insensitive)', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const mockRecorder = createMockRecorder();
|
||||
const selectedPage = context.getSelectedPptrPage();
|
||||
const selectedPage = context.getSelectedMcpPage().pptrPage;
|
||||
const screencastStub = sinon
|
||||
.stub(selectedPage, 'screencast')
|
||||
.resolves(mockRecorder as never);
|
||||
@@ -86,7 +86,7 @@ describe('screencast', () => {
|
||||
|
||||
it('rejects an unsupported extension instead of silently using mp4', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const selectedPage = context.getSelectedPptrPage();
|
||||
const selectedPage = context.getSelectedMcpPage().pptrPage;
|
||||
const screencastStub = sinon.stub(selectedPage, 'screencast');
|
||||
|
||||
await assert.rejects(
|
||||
@@ -109,7 +109,7 @@ describe('screencast', () => {
|
||||
it('starts a screencast recording with temp file when no filePath', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const mockRecorder = createMockRecorder();
|
||||
const selectedPage = context.getSelectedPptrPage();
|
||||
const selectedPage = context.getSelectedMcpPage().pptrPage;
|
||||
const screencastStub = sinon
|
||||
.stub(selectedPage, 'screencast')
|
||||
.resolves(mockRecorder as never);
|
||||
@@ -136,7 +136,7 @@ describe('screencast', () => {
|
||||
filePath: path.join(os.tmpdir(), 'existing.mp4'),
|
||||
});
|
||||
|
||||
const selectedPage = context.getSelectedPptrPage();
|
||||
const selectedPage = context.getSelectedMcpPage().pptrPage;
|
||||
const screencastStub = sinon.stub(selectedPage, 'screencast');
|
||||
|
||||
await startScreencast().handler(
|
||||
@@ -156,7 +156,7 @@ describe('screencast', () => {
|
||||
|
||||
it('provides a clear error when ffmpeg is not found', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const selectedPage = context.getSelectedPptrPage();
|
||||
const selectedPage = context.getSelectedMcpPage().pptrPage;
|
||||
const error = new Error('spawn ffmpeg ENOENT');
|
||||
sinon.stub(selectedPage, 'screencast').rejects(error);
|
||||
|
||||
@@ -178,7 +178,7 @@ describe('screencast', () => {
|
||||
|
||||
it('cleans up the generated temp directory if recording fails to start', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const selectedPage = context.getSelectedPptrPage();
|
||||
const selectedPage = context.getSelectedMcpPage().pptrPage;
|
||||
const screencastStub = sinon
|
||||
.stub(selectedPage, 'screencast')
|
||||
.rejects(new Error('spawn ffmpeg ENOENT'));
|
||||
@@ -203,7 +203,7 @@ describe('screencast', () => {
|
||||
it('passes ffmpegPath from args to puppeteer', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const mockRecorder = createMockRecorder();
|
||||
const selectedPage = context.getSelectedPptrPage();
|
||||
const selectedPage = context.getSelectedMcpPage().pptrPage;
|
||||
const screencastStub = sinon
|
||||
.stub(selectedPage, 'screencast')
|
||||
.resolves(mockRecorder as never);
|
||||
|
||||
@@ -37,7 +37,7 @@ describe('screenshot', () => {
|
||||
it('with default options', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const fixture = screenshots.basic;
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.setContent(fixture.html);
|
||||
await screenshotTool.handler(
|
||||
{params: {format: 'png'}, page: context.getSelectedMcpPage()},
|
||||
@@ -56,7 +56,7 @@ describe('screenshot', () => {
|
||||
it('ignores quality', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const fixture = screenshots.basic;
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.setContent(fixture.html);
|
||||
await screenshotTool.handler(
|
||||
{
|
||||
@@ -110,7 +110,7 @@ describe('screenshot', () => {
|
||||
it('with full page', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const fixture = screenshots.viewportOverflow;
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.setContent(fixture.html);
|
||||
await screenshotTool.handler(
|
||||
{
|
||||
@@ -132,7 +132,7 @@ describe('screenshot', () => {
|
||||
|
||||
it('with full page resulting in a large screenshot', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
|
||||
await page.setContent(
|
||||
html`${`<div style="color:blue;">test</div>`.repeat(6500)}
|
||||
@@ -171,7 +171,7 @@ describe('screenshot', () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const fixture = screenshots.button;
|
||||
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.setContent(fixture.html);
|
||||
context.getSelectedMcpPage().textSnapshot = await TextSnapshot.create(
|
||||
context.getSelectedMcpPage(),
|
||||
@@ -202,7 +202,7 @@ describe('screenshot', () => {
|
||||
const filePath = join(tmpdir(), 'test-screenshot.png');
|
||||
try {
|
||||
const fixture = screenshots.basic;
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.setContent(fixture.html);
|
||||
await screenshotTool.handler(
|
||||
{
|
||||
@@ -245,7 +245,7 @@ describe('screenshot', () => {
|
||||
try {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const fixture = screenshots.basic;
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.setContent(fixture.html);
|
||||
await assert.rejects(
|
||||
screenshotTool.handler(
|
||||
@@ -272,7 +272,7 @@ describe('screenshot', () => {
|
||||
try {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const fixture = screenshots.basic;
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.setContent(fixture.html);
|
||||
await assert.rejects(
|
||||
screenshotTool.handler(
|
||||
@@ -298,7 +298,7 @@ describe('screenshot', () => {
|
||||
} as ParsedArguments);
|
||||
await withMcpContext(async (response, context) => {
|
||||
const fixture = screenshots.basic;
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.setContent(fixture.html);
|
||||
// No explicit format passed: zod should apply the CLI-driven default.
|
||||
await tool.handler(
|
||||
@@ -325,7 +325,7 @@ describe('screenshot', () => {
|
||||
screenshotMaxWidth: 100,
|
||||
} as ParsedArguments);
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.setViewport({width: 800, height: 600});
|
||||
await page.setContent(
|
||||
html`<div style="width:100vw;height:100vh;background:red"></div>`,
|
||||
@@ -351,7 +351,7 @@ describe('screenshot', () => {
|
||||
screenshotMaxHeight: 60,
|
||||
} as ParsedArguments);
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.setViewport({width: 800, height: 600});
|
||||
await page.setContent(
|
||||
html`<div style="width:100vw;height:100vh"></div>`,
|
||||
@@ -376,7 +376,7 @@ describe('screenshot', () => {
|
||||
screenshotMaxHeight: 4000,
|
||||
} as ParsedArguments);
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.setViewport({width: 800, height: 600});
|
||||
await page.setContent(html`<div></div>`);
|
||||
|
||||
@@ -397,7 +397,7 @@ describe('screenshot', () => {
|
||||
screenshotMaxWidth: 200,
|
||||
} as ParsedArguments);
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.setViewport({width: 800, height: 600});
|
||||
await page.setContent(
|
||||
html`<style>
|
||||
@@ -435,7 +435,7 @@ describe('screenshot', () => {
|
||||
const invalidChar = process.platform === 'win32' ? '>' : '\0';
|
||||
const filePath = `malformed${invalidChar}path.png`;
|
||||
const fixture = screenshots.basic;
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.setContent(fixture.html);
|
||||
await assert.rejects(
|
||||
screenshotTool.handler(
|
||||
|
||||
@@ -78,7 +78,7 @@ describe('script', () => {
|
||||
|
||||
it('work for complex objects', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
|
||||
await page.setContent(html`<script src="./scripts.js"></script> `);
|
||||
|
||||
@@ -106,7 +106,7 @@ describe('script', () => {
|
||||
|
||||
it('work for scripts that trigger dialogs', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
|
||||
await page.setContent(html`<button id="test">test</button>`);
|
||||
|
||||
@@ -129,7 +129,7 @@ describe('script', () => {
|
||||
|
||||
it('work for scripts that trigger dialogs and dismiss them', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
|
||||
await page.setContent(html`<button id="test">test</button>`);
|
||||
|
||||
@@ -152,7 +152,7 @@ describe('script', () => {
|
||||
|
||||
it('work for scripts that trigger prompts and fill them', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
|
||||
await page.setContent(html`<button id="test">test</button>`);
|
||||
|
||||
@@ -175,7 +175,7 @@ describe('script', () => {
|
||||
|
||||
it('work for async functions', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
|
||||
await page.setContent(html`<script src="./scripts.js"></script> `);
|
||||
|
||||
@@ -198,7 +198,7 @@ describe('script', () => {
|
||||
|
||||
it('work with one argument', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
|
||||
await page.setContent(html`<button id="test">test</button>`);
|
||||
|
||||
@@ -225,7 +225,7 @@ describe('script', () => {
|
||||
|
||||
it('work with multiple args', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
|
||||
await page.setContent(html`<button id="test">test</button>`);
|
||||
|
||||
@@ -258,7 +258,7 @@ describe('script', () => {
|
||||
server.addHtmlRoute('/main', html`<iframe src="/iframe"></iframe>`);
|
||||
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.goto(server.getRoute('/main'));
|
||||
context.getSelectedMcpPage().textSnapshot = await TextSnapshot.create(
|
||||
context.getSelectedMcpPage(),
|
||||
|
||||
@@ -56,7 +56,7 @@ describe('slim', () => {
|
||||
response,
|
||||
context,
|
||||
);
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
assert.equal(
|
||||
await page.evaluate(() => document.querySelector('div')?.textContent),
|
||||
'Hello MCP',
|
||||
@@ -69,7 +69,7 @@ describe('slim', () => {
|
||||
it('with default options', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const fixture = screenshots.basic;
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
await page.setContent(fixture.html);
|
||||
await screenshot.handler(
|
||||
{params: {format: 'png'}, page: context.getSelectedMcpPage()},
|
||||
|
||||
@@ -26,7 +26,7 @@ describe('snapshot', () => {
|
||||
describe('browser_wait_for', () => {
|
||||
it('should work', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
|
||||
await page.setContent(
|
||||
html`<main><span>Hello</span><span> </span><div>World</div></main>`,
|
||||
@@ -52,7 +52,7 @@ describe('snapshot', () => {
|
||||
|
||||
it('should work with any-match array', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
|
||||
await page.setContent(
|
||||
html`<main><span>Status</span><div>Error</div></main>`,
|
||||
@@ -78,7 +78,7 @@ describe('snapshot', () => {
|
||||
|
||||
it('should work with any-match array when element shows up later', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
|
||||
const handlePromise = waitFor.handler(
|
||||
{
|
||||
@@ -109,7 +109,7 @@ describe('snapshot', () => {
|
||||
|
||||
it('should work with element that show up later', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
|
||||
const handlePromise = waitFor.handler(
|
||||
{
|
||||
@@ -137,7 +137,7 @@ describe('snapshot', () => {
|
||||
});
|
||||
it('should work with aria elements', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
|
||||
await page.setContent(
|
||||
html`<main><h1>Header</h1><div>Text</div></main>`,
|
||||
@@ -164,7 +164,7 @@ describe('snapshot', () => {
|
||||
|
||||
it('should work with iframe content', async () => {
|
||||
await withMcpContext(async (response, context) => {
|
||||
const page = context.getSelectedPptrPage();
|
||||
const page = context.getSelectedMcpPage().pptrPage;
|
||||
|
||||
await page.setContent(
|
||||
html`<h1>Top level</h1>
|
||||
|
||||
Reference in New Issue
Block a user