diff --git a/packages/playwright-core/src/client/electron.ts b/packages/playwright-core/src/client/electron.ts index bd9d82d168..dfdfbb8664 100644 --- a/packages/playwright-core/src/client/electron.ts +++ b/packages/playwright-core/src/client/electron.ts @@ -108,7 +108,7 @@ export class ElectronApplication extends ChannelOwner {}); } async waitForEvent(event: string, optionsOrPredicate: WaitForEventOptions = {}): Promise { diff --git a/packages/playwright-core/src/server/electron/electron.ts b/packages/playwright-core/src/server/electron/electron.ts index cb5b4730a3..7ad3995494 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'), '--inspect=0', '--remote-debugging-port=0', options.cwd || process.cwd(), ...args]; + const electronArguments = ['-r', require.resolve('./loader'), '--inspect=0', '--remote-debugging-port=0', ...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 109b38ad04..3180abc013 100644 --- a/packages/playwright-core/src/server/electron/loader.ts +++ b/packages/playwright-core/src/server/electron/loader.ts @@ -15,17 +15,11 @@ */ const { app } = require('electron'); -const fs = require('fs'); -const path = require('path'); const { chromiumSwitches } = require('../chromium/chromiumSwitches'); -// 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] +// [Electron, -r, loader.js, --inspect=0, --remote-debugging-port=0, ...args] +process.argv.splice(1, 4); + for (const arg of chromiumSwitches) { const match = arg.match(/--([^=]*)=?(.*)/)!; @@ -44,20 +38,12 @@ app.emit = (event: string | symbol, ...args: any[]): boolean => { return originalEmit(event, ...args); }; -app.getAppPath = () => { - if (fs.statSync(appPath).isFile()) - return path.dirname(appPath); - return appPath; -}; - let isReady = false; let whenReadyCallback: (event: any) => any; const whenReadyPromise = new Promise(f => whenReadyCallback = f); app.isReady = () => isReady; app.whenReady = () => whenReadyPromise; -require(appPath); - (globalThis as any).__playwright_run = async () => { // Wait for app to be ready to avoid browser initialization races. const event = await originalWhenReady; diff --git a/tests/electron/electron-app-pre-ready-app.js b/tests/electron/electron-app-pre-ready.js similarity index 100% rename from tests/electron/electron-app-pre-ready-app.js rename to tests/electron/electron-app-pre-ready.js diff --git a/tests/electron/electron-app.spec.ts b/tests/electron/electron-app.spec.ts index d744954526..5c43b67cf0 100644 --- a/tests/electron/electron-app.spec.ts +++ b/tests/electron/electron-app.spec.ts @@ -197,12 +197,25 @@ test('should detach debugger on app-initiated exit', async ({ launchElectronApp }); test('should run pre-ready apis', async ({ launchElectronApp }) => { - await launchElectronApp('electron-pre-ready-app.js'); + await launchElectronApp('electron-app-pre-ready.js'); }); test('should resolve app path for folder apps', async ({ launchElectronApp }) => { const electronApp = await launchElectronApp('.'); const appPath = await electronApp.evaluate(async ({ app }) => app.getAppPath()); expect(appPath).toBe(path.resolve(__dirname)); - await electronApp.close(); +}); + +test('should return app name / version from manifest', async ({ launchElectronApp }) => { + const electronApp = await launchElectronApp('.'); + const data = await electronApp.evaluate(async ({ app }) => { + return { + name: app.getName(), + version: app.getVersion(), + }; + }); + expect(data).toEqual({ + name: 'my-electron-app', + version: '1.0.0' + }); }); diff --git a/tests/electron/package.json b/tests/electron/package.json new file mode 100644 index 0000000000..9e2baa32af --- /dev/null +++ b/tests/electron/package.json @@ -0,0 +1,8 @@ +{ + "name": "my-electron-app", + "version": "1.0.0", + "description": "Hello World!", + "main": "main.js", + "author": "Jane Doe", + "license": "MIT" +}