Files
AI/참고/playwright-main/tests/mcp/cli-config.spec.ts

147 lines
5.2 KiB
TypeScript
Raw Normal View History

2026-05-12 19:40:31 +09:00
/**
* Copyright (c) Microsoft Corporation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import fs from 'fs';
import path from 'path';
import { test, expect } from './cli-fixtures';
test('user-data-dir', async ({ cli, server }, testInfo) => {
const config = {
browser: {
userDataDir: testInfo.outputPath('my-data-dir'),
},
};
await fs.promises.writeFile(testInfo.outputPath('config.json'), JSON.stringify(config, null, 2));
await cli('open', '--persistent', `--config=config.json`, server.PREFIX);
expect(fs.existsSync(testInfo.outputPath('my-data-dir'))).toBe(true);
});
test('context options', async ({ cli, server }, testInfo) => {
const config = {
browser: {
contextOptions: {
viewport: { width: 800, height: 600 },
},
},
};
await fs.promises.writeFile(testInfo.outputPath('.playwright', 'cli.config.json'), JSON.stringify(config, null, 2));
await cli('open', server.PREFIX);
const { output } = await cli('eval', 'window.innerWidth + "x" + window.innerHeight');
expect(output).toContain('800x600');
});
test('config-print prints merged config', async ({ cli }) => {
await cli('open');
const { output } = await cli('config-print');
expect(output).toContain('"browser"');
});
test('config-print prints merged config from file, env and cli', async ({ cli, server }, testInfo) => {
// Config file provides viewport and timeouts.
const fileConfig = {
browser: {
contextOptions: {
viewport: { width: 800, height: 600 },
},
},
timeouts: {
action: 10000,
navigation: 30000,
},
};
await fs.promises.writeFile(testInfo.outputPath('.playwright', 'cli.config.json'), JSON.stringify(fileConfig, null, 2));
const env = { PLAYWRIGHT_MCP_TIMEOUT_NAVIGATION: '45000' };
await cli('open', server.PREFIX, { env });
const { output } = await cli('config-print', { env });
const configBegin = output.indexOf('{');
expect(configBegin).not.toBe(-1);
const config = JSON.parse(output.slice(configBegin));
expect(config.browser.launchOptions.headless).toBe(true);
expect(config.browser.contextOptions.viewport).toEqual({ width: 800, height: 600 });
expect(config.timeouts.action).toBe(10000);
expect(config.timeouts.navigation).toBe(45000);
expect(config.browser.isolated).toBe(true);
});
test('context options with UTF-8 BOM', async ({ cli, server }, testInfo) => {
const config = {
browser: {
contextOptions: {
viewport: { width: 800, height: 600 },
},
},
};
// Write config with UTF-8 BOM prefix, as some Windows editors (Notepad, PowerShell) do.
await fs.promises.writeFile(testInfo.outputPath('.playwright', 'cli.config.json'), '\uFEFF' + JSON.stringify(config, null, 2));
await cli('open', server.PREFIX);
const { output } = await cli('eval', 'window.innerWidth + "x" + window.innerHeight');
expect(output).toContain('800x600');
});
test('isolated', async ({ cli, server }, testInfo) => {
const config = {
browser: {
isolated: true,
},
};
await fs.promises.writeFile(testInfo.outputPath('.playwright', 'cli.config.json'), JSON.stringify(config, null, 2));
await cli('open', server.PREFIX);
expect(fs.existsSync(testInfo.outputPath('daemon', 'default-user-data'))).toBe(false);
});
test('global config', async ({ cli, server }, testInfo) => {
const fakeHome = testInfo.outputPath('home');
await fs.promises.mkdir(path.join(fakeHome, '.playwright'), { recursive: true });
await fs.promises.writeFile(path.join(fakeHome, '.playwright', 'cli.config.json'), JSON.stringify({
browser: {
contextOptions: {
viewport: { width: 800, height: 600 },
},
},
}, null, 2));
const env = { PWTEST_CLI_GLOBAL_CONFIG: fakeHome };
await cli('open', server.PREFIX, { env });
const { output } = await cli('eval', 'window.innerWidth + "x" + window.innerHeight', { env });
expect(output).toContain('800x600');
});
test('project config overrides global config', async ({ cli, server }, testInfo) => {
const fakeHome = testInfo.outputPath('home');
await fs.promises.mkdir(path.join(fakeHome, '.playwright'), { recursive: true });
await fs.promises.writeFile(path.join(fakeHome, '.playwright', 'cli.config.json'), JSON.stringify({
browser: {
contextOptions: {
viewport: { width: 800, height: 600 },
},
},
}, null, 2));
await fs.promises.writeFile(testInfo.outputPath('.playwright', 'cli.config.json'), JSON.stringify({
browser: {
contextOptions: {
viewport: { width: 1024, height: 768 },
},
},
}, null, 2));
const env = { PWTEST_CLI_GLOBAL_CONFIG: fakeHome };
await cli('open', server.PREFIX, { env });
const { output } = await cli('eval', 'window.innerWidth + "x" + window.innerHeight', { env });
expect(output).toContain('1024x768');
});