# playwright-electron This package contains the [Electron](https://www.electronjs.org/) flavor of [Playwright](http://github.com/microsoft/playwright). ## How to demo ```bash npm i --save-dev electron@beta playwright-electron npx mocha ``` `index.js` - main Electron application file. ```js const { app, BrowserWindow } = require('electron'); function createWindow () { let win = new BrowserWindow({ width: 800, height: 600, }); win.loadFile('index.html'); } app.whenReady().then(createWindow); ``` `index.html` - page that Electron opens in a BrowserWindow. ```js Hello World!

Hello World!

``` `test/spec.js` - test file ```js const { electron } = require('playwright-electron'); const assert = require('assert'); const electronPath = require('electron'); const path = require('path') describe('Sanity checks', function () { this.timeout(10000); beforeEach(async () => { // Before each test start Electron application. this.app = await electron.launch(electronPath, { path: electronPath, args: [path.join(__dirname, '..')] // loads index.js }); }); afterEach(async () => { // After each test close Electron application. await this.app.close(); }); it('script application', async () => { const appPath = await this.app.evaluate(async ({ app }) => { // This runs in the main Electron process, first parameter is // the result of the require('electron') in the main app script. return app.getAppPath(); }); assert.equal(appPath, path.join(__dirname, '..')); }); it('window title', async () => { // Return value of this.app.firstWindow a Playwright Page. // See https://playwright.dev/#path=docs%2Fapi.md&q=class-page. // Get a Playwright page for the first Electron window. // It awaits for the page to be available. Alternatively use // this.app.windows() or this.app.waitForEvent('window'). const page = await this.app.firstWindow(); assert.equal(await page.title(), 'Hello World!'); }); it('capture screenshot', async () => { const page = await this.app.firstWindow(); // Capture window screenshot. await page.screenshot({ path: 'intro.png' }); }); it('sniff console', async () => { const page = await this.app.firstWindow(); // Collect console logs. let consoleText; page.on('console', message => consoleText = message.text()); // Click button. await page.click('text=Click me'); // Check that click produced console message. assert.equal(consoleText, 'click'); }); it('intercept network', async () => { await this.app.firstWindow(); // Return value of this.app.context() is a Playwright BrowserContext. // See https://playwright.dev/#path=docs%2Fapi.md&q=class-browsercontext. await await this.app.context().route('**/empty.html', (route, request) => { route.fulfill({ status: 200, contentType: 'text/html', body: 'Hello World', }) }); // Helper method to create BrowserWindow. const page = await this.app.newBrowserWindow({ width: 800, height: 600 }); await page.goto('https://localhost:1000/empty.html'); assert.equal(await page.title(), 'Hello World'); }); it('should maximize window', async () => { await this.app.firstWindow(); const page = await this.app.newBrowserWindow({ width: 800, height: 600 }); // page.browserWindow is a Playwright JSHandle pointing at Electron's // BrowserWindow. // https://playwright.dev/#path=docs%2Fapi.md&q=class-jshandle await page.browserWindow.evaluate(browserWindow => browserWindow.maximize()); }); }); ```