diff --git a/packages/playwright-core/src/tools/cli-client/minimist.ts b/packages/playwright-core/src/tools/cli-client/minimist.ts index 28e6f75257b22..24f0261d98187 100644 --- a/packages/playwright-core/src/tools/cli-client/minimist.ts +++ b/packages/playwright-core/src/tools/cli-client/minimist.ts @@ -94,7 +94,7 @@ export function minimist(args: string[], opts?: MinimistOptions): MinimistArgs { } else { setArg(key, strings[key] ? '' : true); } - } else if ((/^-[^-]+/).test(arg)) { + } else if ((/^-[^-]+/).test(arg) && !(/^-\.?\d/).test(arg)) { const letters = arg.slice(1, -1).split(''); let broken = false; diff --git a/packages/playwright-core/src/tools/skills/playwright-cli/SKILL.md b/packages/playwright-core/src/tools/skills/playwright-cli/SKILL.md index 4f7970aa0d3f7..d3002c0823785 100644 --- a/packages/playwright-core/src/tools/skills/playwright-cli/SKILL.md +++ b/packages/playwright-core/src/tools/skills/playwright-cli/SKILL.md @@ -90,6 +90,7 @@ playwright-cli mousedown right playwright-cli mouseup playwright-cli mouseup right playwright-cli mousewheel 0 100 +playwright-cli mousewheel 0 -100 ``` ### Save as diff --git a/tests/mcp/cli-parsing.spec.ts b/tests/mcp/cli-parsing.spec.ts index 8b65fbcba86c8..ae1902a955078 100644 --- a/tests/mcp/cli-parsing.spec.ts +++ b/tests/mcp/cli-parsing.spec.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { test, expect } from './cli-fixtures'; +import { test, expect, eventsPage } from './cli-fixtures'; test('unknown option', async ({ cli, server }) => { const { error, exitCode } = await cli('open', '--some-option', 'value', 'about:blank'); @@ -73,6 +73,14 @@ test('wrong argument type', async ({ cli, server }) => { expect(press.exitCode).toBe(0); }); +test('negative number argument', { annotation: { type: 'issue', description: 'https://github.com/microsoft/playwright/issues/42321' } }, async ({ cli, server }) => { + server.setContent('/', eventsPage, 'text/html'); + await cli('open', server.PREFIX); + const { exitCode } = await cli('mousewheel', '0', '-100'); + expect(exitCode).toBe(0); + await expect.poll(() => cli('snapshot').then(result => result.inlineSnapshot)).toContain('wheel 0 -100'); +}); + test('should preserve leading zeros in string arguments', async ({ cli, server }) => { server.setContent('/', ``, 'text/html'); await cli('open', server.PREFIX);