fix(#491): auto-disable viewport for --start-maximized and --window-size args (#492)

Fixes #491

When `--start-maximized` or `--window-size` is passed as a browser arg, Playwright's default viewport (1280x720) overrides the browser's own window sizing, making those flags have no effect on the page content.

This change auto-detects those args and sets `viewport: null` so Playwright defers to the browser's window size. Explicit viewport values still take priority.

Also allows `viewport: null` in the launch protocol for agents that want to disable viewport emulation directly.
This commit is contained in:
Chris Tate
2026-02-17 20:27:38 -06:00
committed by GitHub
parent f9b33ac23d
commit 19dd2d0c0b
5 changed files with 82 additions and 8 deletions
+36
View File
@@ -484,6 +484,42 @@ describe('BrowserManager', () => {
expect(size?.width).toBe(1920);
expect(size?.height).toBe(1080);
});
it('should disable viewport when --start-maximized is in args', async () => {
const testBrowser = new BrowserManager();
await testBrowser.launch({ headless: true, args: ['--start-maximized'] });
const page = testBrowser.getPage();
expect(page.viewportSize()).toBeNull();
await testBrowser.close();
});
it('should disable viewport when --window-size is in args', async () => {
const testBrowser = new BrowserManager();
await testBrowser.launch({ headless: true, args: ['--window-size=800,600'] });
const page = testBrowser.getPage();
expect(page.viewportSize()).toBeNull();
await testBrowser.close();
});
it('should use default viewport when no window size args', async () => {
const testBrowser = new BrowserManager();
await testBrowser.launch({ headless: true });
const page = testBrowser.getPage();
expect(page.viewportSize()).toEqual({ width: 1280, height: 720 });
await testBrowser.close();
});
it('should use explicit viewport even with --start-maximized', async () => {
const testBrowser = new BrowserManager();
await testBrowser.launch({
headless: true,
args: ['--start-maximized'],
viewport: { width: 800, height: 600 },
});
const page = testBrowser.getPage();
expect(page.viewportSize()).toEqual({ width: 800, height: 600 });
await testBrowser.close();
});
});
describe('snapshot', () => {