diff --git a/packages/playwright-core/src/server/electron/electron.ts b/packages/playwright-core/src/server/electron/electron.ts index 618a0229629a1..d2e86d988d906 100644 --- a/packages/playwright-core/src/server/electron/electron.ts +++ b/packages/playwright-core/src/server/electron/electron.ts @@ -130,7 +130,7 @@ export class Electron extends SdkObject { controller.setLogName('browser'); return controller.run(async progress => { let app: ElectronApplication | undefined = undefined; - const electronArguments = [require.resolve('./loader'), options.cwd || process.cwd(), ...args, '--inspect=0', '--remote-debugging-port=0']; + const electronArguments = [require.resolve('./loader'), options.cwd || process.cwd(), args[0], '--inspect=0', '--remote-debugging-port=0', ...args.slice(1)]; if (os.platform() === 'linux') { const runningAsRoot = process.geteuid && process.geteuid() === 0; diff --git a/packages/playwright-core/src/server/electron/loader.ts b/packages/playwright-core/src/server/electron/loader.ts index b5124e61b72fe..abe58673dc61c 100644 --- a/packages/playwright-core/src/server/electron/loader.ts +++ b/packages/playwright-core/src/server/electron/loader.ts @@ -19,6 +19,9 @@ const path = require('path'); const { chromiumSwitches } = require('../chromium/chromiumSwitches'); const appPath = path.resolve(process.argv[2], process.argv[3]); +// Remove cwd, user app, --inspect=0, --remote-debugging-port=0 +process.argv.splice(2, 4); +process.argv[1] = appPath; for (const arg of chromiumSwitches) { const match = arg.match(/--([^=]*)=?(.*)/)!; diff --git a/tests/electron/electron-app.spec.ts b/tests/electron/electron-app.spec.ts index e5f3c7c68e90b..f382987361f7f 100644 --- a/tests/electron/electron-app.spec.ts +++ b/tests/electron/electron-app.spec.ts @@ -38,6 +38,11 @@ test('should script application', async ({ electronApp }) => { expect(appPath).toBe(path.resolve(__dirname)); }); +test('should preserve args', async ({ electronApp }) => { + const argv = await electronApp.evaluate(async ({ app }) => process.argv); + expect(argv.slice(1)).toEqual([expect.stringContaining('electron/electron-app.js')]); +}); + test('should return windows', async ({ electronApp, newWindow }) => { const window = await newWindow(); expect(electronApp.windows()).toEqual([window]);