fix: use Playwright MCP --executable-path flag (kebab-case)

Extract buildMcpArgs() helper and fix --executablePath → --executable-path
to match the Playwright MCP CLI's expected flag format.

Closes #16

Co-authored-by: KasumiChen <KasumiChen@users.noreply.github.com>
This commit is contained in:
jackwenerandKasumiChen committed 2026-03-16 12:58:18 +08:00
1 parent 141c2cf7d5
commit b0c51ddf19
2 files changed
+32 -4

No files matched your search

+19
View File
@@ -49,6 +49,25 @@ describe('browser helpers', () => {
expect(__test__.appendLimited('12345', '67890', 8)).toBe('34567890');
});
it('builds Playwright MCP args with kebab-case executable path', () => {
expect(__test__.buildMcpArgs({
mcpPath: '/tmp/cli.js',
executablePath: '/mnt/c/Program Files/Google/Chrome/Application/chrome.exe',
})).toEqual([
'/tmp/cli.js',
'--extension',
'--executable-path',
'/mnt/c/Program Files/Google/Chrome/Application/chrome.exe',
]);
expect(__test__.buildMcpArgs({
mcpPath: '/tmp/cli.js',
})).toEqual([
'/tmp/cli.js',
'--extension',
]);
});
it('times out slow promises', async () => {
await expect(__test__.withTimeout(new Promise(() => {}), 10, 'timeout')).rejects.toThrow('timeout');
});
+13 -4
View File
@@ -442,13 +442,13 @@ export class PlaywrightMCP {
}));
}, timeout * 1000);
const mcpArgs: string[] = [mcpPath, '--extension'];
const mcpArgs = buildMcpArgs({
mcpPath,
executablePath: process.env.OPENCLI_BROWSER_EXECUTABLE_PATH,
});
if (process.env.OPENCLI_VERBOSE) {
console.error(`[opencli] Extension token: ${extensionToken ? `configured (fingerprint ${tokenFingerprint})` : 'missing'}`);
}
if (process.env.OPENCLI_BROWSER_EXECUTABLE_PATH) {
mcpArgs.push('--executablePath', process.env.OPENCLI_BROWSER_EXECUTABLE_PATH);
}
debugLog(`Spawning node ${mcpArgs.join(' ')}`);
this._proc = spawn('node', mcpArgs, {
@@ -664,6 +664,14 @@ function appendLimited(current: string, chunk: string, limit: number): string {
return next.slice(-limit);
}
function buildMcpArgs(input: { mcpPath: string; executablePath?: string | null }): string[] {
const args = [input.mcpPath, '--extension'];
if (input.executablePath) {
args.push('--executable-path', input.executablePath);
}
return args;
}
function withTimeout<T>(promise: Promise<T>, timeoutMs: number, message: string): Promise<T> {
return new Promise<T>((resolve, reject) => {
const timer = setTimeout(() => reject(new Error(message)), timeoutMs);
@@ -685,6 +693,7 @@ export const __test__ = {
extractTabEntries,
diffTabIndexes,
appendLimited,
buildMcpArgs,
withTimeout,
};