diff --git a/packages/playwright-core/src/server/electron/electron.ts b/packages/playwright-core/src/server/electron/electron.ts index 618a0229629a1..2c054a7871745 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'), '--inspect=0', '--remote-debugging-port=0', options.cwd || process.cwd(), ...args]; 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..b95687083ca2f 100644 --- a/packages/playwright-core/src/server/electron/loader.ts +++ b/packages/playwright-core/src/server/electron/loader.ts @@ -18,7 +18,13 @@ const { app } = require('electron'); const path = require('path'); const { chromiumSwitches } = require('../chromium/chromiumSwitches'); -const appPath = path.resolve(process.argv[2], process.argv[3]); +// Command line is like: +// [Electron, loader.js, --inspect=0, --remote-debugging-port=0, options.cwd, app.js, ...args] +const appPath = path.resolve(process.argv[4], process.argv[5]); +process.argv.splice(2, 4); +process.argv[1] = appPath; +// Now it is like +// [Electron, app.js, ...args] 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]);