@serenity-js/playwright 3.42.2 → 3.43.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +17 -0
- package/esm/screenplay/abilities/BrowseTheWebWithPlaywright.d.ts +60 -2
- package/esm/screenplay/abilities/BrowseTheWebWithPlaywright.d.ts.map +1 -1
- package/esm/screenplay/abilities/BrowseTheWebWithPlaywright.js +74 -2
- package/esm/screenplay/abilities/BrowseTheWebWithPlaywright.js.map +1 -1
- package/esm/screenplay/models/ElectronLaunchOptions.d.ts +55 -0
- package/esm/screenplay/models/ElectronLaunchOptions.d.ts.map +1 -0
- package/esm/screenplay/models/ElectronLaunchOptions.js +2 -0
- package/esm/screenplay/models/ElectronLaunchOptions.js.map +1 -0
- package/esm/screenplay/models/PlaywrightBrowsingSessionWithBrowser.d.ts +3 -2
- package/esm/screenplay/models/PlaywrightBrowsingSessionWithBrowser.d.ts.map +1 -1
- package/esm/screenplay/models/PlaywrightBrowsingSessionWithBrowser.js +6 -5
- package/esm/screenplay/models/PlaywrightBrowsingSessionWithBrowser.js.map +1 -1
- package/esm/screenplay/models/PlaywrightBrowsingSessionWithElectron.d.ts +52 -0
- package/esm/screenplay/models/PlaywrightBrowsingSessionWithElectron.d.ts.map +1 -0
- package/esm/screenplay/models/PlaywrightBrowsingSessionWithElectron.js +103 -0
- package/esm/screenplay/models/PlaywrightBrowsingSessionWithElectron.js.map +1 -0
- package/esm/screenplay/models/PlaywrightBrowsingSessionWithPage.d.ts +1 -0
- package/esm/screenplay/models/PlaywrightBrowsingSessionWithPage.d.ts.map +1 -1
- package/esm/screenplay/models/PlaywrightBrowsingSessionWithPage.js +3 -0
- package/esm/screenplay/models/PlaywrightBrowsingSessionWithPage.js.map +1 -1
- package/esm/screenplay/models/SelfLaunchingPlaywrightBrowsingSessionWithElectron.d.ts +52 -0
- package/esm/screenplay/models/SelfLaunchingPlaywrightBrowsingSessionWithElectron.d.ts.map +1 -0
- package/esm/screenplay/models/SelfLaunchingPlaywrightBrowsingSessionWithElectron.js +70 -0
- package/esm/screenplay/models/SelfLaunchingPlaywrightBrowsingSessionWithElectron.js.map +1 -0
- package/esm/screenplay/models/index.d.ts +3 -0
- package/esm/screenplay/models/index.d.ts.map +1 -1
- package/esm/screenplay/models/index.js +3 -0
- package/esm/screenplay/models/index.js.map +1 -1
- package/lib/screenplay/abilities/BrowseTheWebWithPlaywright.d.ts +60 -2
- package/lib/screenplay/abilities/BrowseTheWebWithPlaywright.d.ts.map +1 -1
- package/lib/screenplay/abilities/BrowseTheWebWithPlaywright.js +73 -1
- package/lib/screenplay/abilities/BrowseTheWebWithPlaywright.js.map +1 -1
- package/lib/screenplay/models/ElectronLaunchOptions.d.ts +55 -0
- package/lib/screenplay/models/ElectronLaunchOptions.d.ts.map +1 -0
- package/lib/screenplay/models/ElectronLaunchOptions.js +3 -0
- package/lib/screenplay/models/ElectronLaunchOptions.js.map +1 -0
- package/lib/screenplay/models/PlaywrightBrowsingSessionWithBrowser.d.ts +3 -2
- package/lib/screenplay/models/PlaywrightBrowsingSessionWithBrowser.d.ts.map +1 -1
- package/lib/screenplay/models/PlaywrightBrowsingSessionWithBrowser.js +6 -5
- package/lib/screenplay/models/PlaywrightBrowsingSessionWithBrowser.js.map +1 -1
- package/lib/screenplay/models/PlaywrightBrowsingSessionWithElectron.d.ts +52 -0
- package/lib/screenplay/models/PlaywrightBrowsingSessionWithElectron.d.ts.map +1 -0
- package/lib/screenplay/models/PlaywrightBrowsingSessionWithElectron.js +107 -0
- package/lib/screenplay/models/PlaywrightBrowsingSessionWithElectron.js.map +1 -0
- package/lib/screenplay/models/PlaywrightBrowsingSessionWithPage.d.ts +1 -0
- package/lib/screenplay/models/PlaywrightBrowsingSessionWithPage.d.ts.map +1 -1
- package/lib/screenplay/models/PlaywrightBrowsingSessionWithPage.js +3 -0
- package/lib/screenplay/models/PlaywrightBrowsingSessionWithPage.js.map +1 -1
- package/lib/screenplay/models/SelfLaunchingPlaywrightBrowsingSessionWithElectron.d.ts +52 -0
- package/lib/screenplay/models/SelfLaunchingPlaywrightBrowsingSessionWithElectron.d.ts.map +1 -0
- package/lib/screenplay/models/SelfLaunchingPlaywrightBrowsingSessionWithElectron.js +107 -0
- package/lib/screenplay/models/SelfLaunchingPlaywrightBrowsingSessionWithElectron.js.map +1 -0
- package/lib/screenplay/models/index.d.ts +3 -0
- package/lib/screenplay/models/index.d.ts.map +1 -1
- package/lib/screenplay/models/index.js +3 -0
- package/lib/screenplay/models/index.js.map +1 -1
- package/package.json +13 -6
- package/src/screenplay/abilities/BrowseTheWebWithPlaywright.ts +112 -7
- package/src/screenplay/models/ElectronLaunchOptions.ts +55 -0
- package/src/screenplay/models/PlaywrightBrowsingSessionWithBrowser.ts +13 -8
- package/src/screenplay/models/PlaywrightBrowsingSessionWithElectron.ts +129 -0
- package/src/screenplay/models/PlaywrightBrowsingSessionWithPage.ts +4 -0
- package/src/screenplay/models/SelfLaunchingPlaywrightBrowsingSessionWithElectron.ts +85 -0
- package/src/screenplay/models/index.ts +3 -0
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import * as playwright from 'playwright-core';
|
|
2
|
+
import { PlaywrightBrowsingSessionWithElectron } from './PlaywrightBrowsingSessionWithElectron.js';
|
|
3
|
+
/**
|
|
4
|
+
* Self-launching implementation of [`PlaywrightBrowsingSession`](https://serenity-js.org/api/playwright/class/PlaywrightBrowsingSession/)
|
|
5
|
+
* for Electron applications.
|
|
6
|
+
*
|
|
7
|
+
* This class launches the Electron application on first use and closes it when discarded.
|
|
8
|
+
* Use this for test runners like Mocha or Jasmine that don't manage Electron lifecycle.
|
|
9
|
+
*
|
|
10
|
+
* ## Example
|
|
11
|
+
*
|
|
12
|
+
* ```typescript
|
|
13
|
+
* import { actorCalled } from '@serenity-js/core';
|
|
14
|
+
* import { BrowseTheWebWithPlaywright } from '@serenity-js/playwright';
|
|
15
|
+
*
|
|
16
|
+
* const actor = actorCalled('Tester').whoCan(
|
|
17
|
+
* BrowseTheWebWithPlaywright.launchingElectronApp({
|
|
18
|
+
* args: ['path/to/main.js'],
|
|
19
|
+
* cwd: 'path/to/app',
|
|
20
|
+
* })
|
|
21
|
+
* );
|
|
22
|
+
*
|
|
23
|
+
* // The app is automatically closed when the actor is dismissed
|
|
24
|
+
* ```
|
|
25
|
+
*
|
|
26
|
+
* @group Models
|
|
27
|
+
*/
|
|
28
|
+
export class SelfLaunchingPlaywrightBrowsingSessionWithElectron extends PlaywrightBrowsingSessionWithElectron {
|
|
29
|
+
launchOptions;
|
|
30
|
+
constructor(launchOptions, extraBrowserContextOptions, selectors) {
|
|
31
|
+
// setting electronApp to undefined since it's lazily initialised
|
|
32
|
+
super(undefined, extraBrowserContextOptions, selectors);
|
|
33
|
+
this.launchOptions = launchOptions;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Launches the Electron application using the configured launch options.
|
|
37
|
+
*
|
|
38
|
+
* This method is idempotent - calling it multiple times will only launch
|
|
39
|
+
* the application once.
|
|
40
|
+
*/
|
|
41
|
+
async initialise() {
|
|
42
|
+
if (this.electronApp) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
this.electronApp = await playwright._electron.launch(this.launchOptions);
|
|
46
|
+
this.currentBrowserPage = await this.registerCurrentPage();
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Returns `true` if the Electron application has been launched.
|
|
50
|
+
*/
|
|
51
|
+
isInitialised() {
|
|
52
|
+
return this.electronApp !== undefined;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Closes the Electron application that was launched by this session.
|
|
56
|
+
* Called when the ability is discarded.
|
|
57
|
+
*/
|
|
58
|
+
async closeElectronApp() {
|
|
59
|
+
if (this.electronApp) {
|
|
60
|
+
await this.electronApp.close();
|
|
61
|
+
this.electronApp = undefined;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
async discard() {
|
|
65
|
+
await this.closeElectronApp();
|
|
66
|
+
this.pages.clear();
|
|
67
|
+
this.currentBrowserPage = undefined;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=SelfLaunchingPlaywrightBrowsingSessionWithElectron.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SelfLaunchingPlaywrightBrowsingSessionWithElectron.js","sourceRoot":"","sources":["../../../src/screenplay/models/SelfLaunchingPlaywrightBrowsingSessionWithElectron.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAC;AAI9C,OAAO,EAAE,qCAAqC,EAAE,MAAM,4CAA4C,CAAC;AAEnG;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,OAAO,kDACT,SAAQ,qCAAqC;IAIxB;IADrB,YACqB,aAAoC,EACrD,0BAA+D,EAC/D,SAA+B;QAE/B,iEAAiE;QACjE,KAAK,CAAC,SAAS,EAAE,0BAA0B,EAAE,SAAS,CAAC,CAAC;QALvC,kBAAa,GAAb,aAAa,CAAuB;IAMzD,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,UAAU;QACZ,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,OAAO;QACX,CAAC;QAED,IAAI,CAAC,WAAW,GAAG,MAAM,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACzE,IAAI,CAAC,kBAAkB,GAAG,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC/D,CAAC;IAED;;OAEG;IACH,aAAa;QACT,OAAO,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC;IAC1C,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,gBAAgB;QAClB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;YAC/B,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;QACjC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,OAAO;QACT,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAE9B,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnB,IAAI,CAAC,kBAAkB,GAAG,SAAS,CAAC;IACxC,CAAC;CACJ"}
|
|
@@ -1,8 +1,11 @@
|
|
|
1
|
+
export * from './ElectronLaunchOptions.js';
|
|
1
2
|
export * from './locators/index.js';
|
|
2
3
|
export * from './PlaywrightBrowsingSession.js';
|
|
3
4
|
export * from './PlaywrightBrowsingSessionWithBrowser.js';
|
|
5
|
+
export * from './PlaywrightBrowsingSessionWithElectron.js';
|
|
4
6
|
export * from './PlaywrightBrowsingSessionWithPage.js';
|
|
5
7
|
export * from './PlaywrightCookie.js';
|
|
6
8
|
export * from './PlaywrightPage.js';
|
|
7
9
|
export * from './PlaywrightPageElement.js';
|
|
10
|
+
export * from './SelfLaunchingPlaywrightBrowsingSessionWithElectron.js';
|
|
8
11
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/screenplay/models/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,2CAA2C,CAAC;AAC1D,cAAc,wCAAwC,CAAC;AACvD,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/screenplay/models/index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,2CAA2C,CAAC;AAC1D,cAAc,4CAA4C,CAAC;AAC3D,cAAc,wCAAwC,CAAC;AACvD,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yDAAyD,CAAC"}
|
|
@@ -1,8 +1,11 @@
|
|
|
1
|
+
export * from './ElectronLaunchOptions.js';
|
|
1
2
|
export * from './locators/index.js';
|
|
2
3
|
export * from './PlaywrightBrowsingSession.js';
|
|
3
4
|
export * from './PlaywrightBrowsingSessionWithBrowser.js';
|
|
5
|
+
export * from './PlaywrightBrowsingSessionWithElectron.js';
|
|
4
6
|
export * from './PlaywrightBrowsingSessionWithPage.js';
|
|
5
7
|
export * from './PlaywrightCookie.js';
|
|
6
8
|
export * from './PlaywrightPage.js';
|
|
7
9
|
export * from './PlaywrightPageElement.js';
|
|
10
|
+
export * from './SelfLaunchingPlaywrightBrowsingSessionWithElectron.js';
|
|
8
11
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/screenplay/models/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,2CAA2C,CAAC;AAC1D,cAAc,wCAAwC,CAAC;AACvD,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/screenplay/models/index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,2CAA2C,CAAC;AAC1D,cAAc,4CAA4C,CAAC;AAC3D,cAAc,wCAAwC,CAAC;AACvD,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yDAAyD,CAAC"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { Discardable, Initialisable } from '@serenity-js/core';
|
|
2
2
|
import { BrowseTheWeb } from '@serenity-js/web';
|
|
3
3
|
import * as playwright from 'playwright-core';
|
|
4
4
|
import type { ExtraBrowserContextOptions } from '../../ExtraBrowserContextOptions.js';
|
|
5
|
+
import { type ElectronLaunchOptions } from '../models/index.js';
|
|
5
6
|
/**
|
|
6
7
|
* This implementation of the [ability](https://serenity-js.org/api/core/class/Ability/) to [`BrowseTheWeb`](https://serenity-js.org/api/web/class/BrowseTheWeb/)
|
|
7
8
|
* enables the [`Actor`](https://serenity-js.org/api/core/class/Actor/) to interact with web front-ends using [Playwright](https://playwright.dev/).
|
|
@@ -148,12 +149,69 @@ import type { ExtraBrowserContextOptions } from '../../ExtraBrowserContextOption
|
|
|
148
149
|
*
|
|
149
150
|
* @group Abilities
|
|
150
151
|
*/
|
|
151
|
-
export declare class BrowseTheWebWithPlaywright extends BrowseTheWeb<playwright.Locator> implements Discardable {
|
|
152
|
+
export declare class BrowseTheWebWithPlaywright extends BrowseTheWeb<playwright.Locator> implements Initialisable, Discardable {
|
|
152
153
|
static using(browser: playwright.Browser, browserContextOptions?: playwright.BrowserContextOptions, extraBrowserContextOptions?: ExtraBrowserContextOptions): BrowseTheWebWithPlaywright;
|
|
153
154
|
static usingPage(page: playwright.Page, extraBrowserContextOptions?: ExtraBrowserContextOptions): BrowseTheWebWithPlaywright;
|
|
155
|
+
/**
|
|
156
|
+
* Creates an ability to browse the web using an already-launched Electron application.
|
|
157
|
+
*
|
|
158
|
+
* Use this method when the Electron application lifecycle is managed externally,
|
|
159
|
+
* such as in Playwright Test where the app is launched per-worker.
|
|
160
|
+
*
|
|
161
|
+
* ## Example
|
|
162
|
+
*
|
|
163
|
+
* ```ts
|
|
164
|
+
* import { _electron as electron } from 'playwright';
|
|
165
|
+
* import { actorCalled } from '@serenity-js/core';
|
|
166
|
+
* import { BrowseTheWebWithPlaywright } from '@serenity-js/playwright';
|
|
167
|
+
*
|
|
168
|
+
* const electronApp = await electron.launch({ args: ['main.js'] });
|
|
169
|
+
*
|
|
170
|
+
* const actor = actorCalled('Tester').whoCan(
|
|
171
|
+
* BrowseTheWebWithPlaywright.usingElectronApp(electronApp)
|
|
172
|
+
* );
|
|
173
|
+
*
|
|
174
|
+
* // After tests, close the app manually
|
|
175
|
+
* await electronApp.close();
|
|
176
|
+
* ```
|
|
177
|
+
*
|
|
178
|
+
* @param electronApp - An already-launched Playwright ElectronApplication instance
|
|
179
|
+
* @param extraBrowserContextOptions - Optional configuration for timeouts and navigation
|
|
180
|
+
*/
|
|
181
|
+
static usingElectronApp(electronApp: playwright.ElectronApplication, extraBrowserContextOptions?: ExtraBrowserContextOptions): BrowseTheWebWithPlaywright;
|
|
182
|
+
/**
|
|
183
|
+
* Creates an ability to browse the web by launching and managing an Electron application.
|
|
184
|
+
*
|
|
185
|
+
* Use this method when you want Serenity/JS to manage the Electron application lifecycle.
|
|
186
|
+
* The app is launched on first use and closed when the ability is discarded.
|
|
187
|
+
*
|
|
188
|
+
* ## Example
|
|
189
|
+
*
|
|
190
|
+
* ```typescript
|
|
191
|
+
* import { actorCalled } from '@serenity-js/core';
|
|
192
|
+
* import { BrowseTheWebWithPlaywright } from '@serenity-js/playwright';
|
|
193
|
+
*
|
|
194
|
+
* const actor = actorCalled('Tester').whoCan(
|
|
195
|
+
* BrowseTheWebWithPlaywright.launchingElectronApp({
|
|
196
|
+
* args: ['path/to/main.js'],
|
|
197
|
+
* cwd: 'path/to/app',
|
|
198
|
+
* })
|
|
199
|
+
* );
|
|
200
|
+
*
|
|
201
|
+
* // The app is automatically closed when the actor is dismissed
|
|
202
|
+
* ```
|
|
203
|
+
*
|
|
204
|
+
* @param launchOptions - Options for launching the Electron application
|
|
205
|
+
* @param extraBrowserContextOptions - Optional configuration for timeouts and navigation
|
|
206
|
+
*/
|
|
207
|
+
static launchingElectronApp(launchOptions: ElectronLaunchOptions, extraBrowserContextOptions?: ExtraBrowserContextOptions): BrowseTheWebWithPlaywright;
|
|
208
|
+
initialise(): Promise<void>;
|
|
209
|
+
isInitialised(): boolean;
|
|
154
210
|
/**
|
|
155
211
|
* Automatically closes any open [pages](https://serenity-js.org/api/web/class/Page/) when the [SceneFinishes](https://serenity-js.org/api/core-events/class/SceneFinishes/)
|
|
156
212
|
*
|
|
213
|
+
* For self-launching Electron sessions, also closes the Electron application.
|
|
214
|
+
*
|
|
157
215
|
* #### Learn more
|
|
158
216
|
* - [`PlaywrightBrowsingSession.closeAllPages`](https://serenity-js.org/api/playwright/class/PlaywrightBrowsingSession/#closeAllPages)
|
|
159
217
|
* - [`Discardable`](https://serenity-js.org/api/core/interface/Discardable/)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BrowseTheWebWithPlaywright.d.ts","sourceRoot":"","sources":["../../../src/screenplay/abilities/BrowseTheWebWithPlaywright.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"BrowseTheWebWithPlaywright.d.ts","sourceRoot":"","sources":["../../../src/screenplay/abilities/BrowseTheWebWithPlaywright.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAC;AAE9C,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,qCAAqC,CAAC;AACtF,OAAO,EACH,KAAK,qBAAqB,EAK7B,MAAM,oBAAoB,CAAC;AAE5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiJG;AACH,qBAAa,0BACT,SAAQ,YAAY,CAAC,UAAU,CAAC,OAAO,CACvC,YAAW,aAAa,EAAE,WAAW;IAErC,MAAM,CAAC,KAAK,CACR,OAAO,EAAE,UAAU,CAAC,OAAO,EAC3B,qBAAqB,CAAC,EAAE,UAAU,CAAC,qBAAqB,EACxD,0BAA0B,CAAC,EAAE,0BAA0B,GACxD,0BAA0B;IAI7B,MAAM,CAAC,SAAS,CACZ,IAAI,EAAE,UAAU,CAAC,IAAI,EACrB,0BAA0B,CAAC,EAAE,0BAA0B,GACxD,0BAA0B;IAI7B;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,MAAM,CAAC,gBAAgB,CACnB,WAAW,EAAE,UAAU,CAAC,mBAAmB,EAC3C,0BAA0B,CAAC,EAAE,0BAA0B,GACxD,0BAA0B;IAU7B;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,MAAM,CAAC,oBAAoB,CACvB,aAAa,EAAE,qBAAqB,EACpC,0BAA0B,CAAC,EAAE,0BAA0B,GACxD,0BAA0B;IAUvB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAMjC,aAAa,IAAI,OAAO;IAMxB;;;;;;;;OAQG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAKjC"}
|
|
@@ -34,6 +34,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.BrowseTheWebWithPlaywright = void 0;
|
|
37
|
+
const core_1 = require("@serenity-js/core");
|
|
37
38
|
const web_1 = require("@serenity-js/web");
|
|
38
39
|
const playwright = __importStar(require("playwright-core"));
|
|
39
40
|
const index_js_1 = require("../models/index.js");
|
|
@@ -190,15 +191,86 @@ class BrowseTheWebWithPlaywright extends web_1.BrowseTheWeb {
|
|
|
190
191
|
static usingPage(page, extraBrowserContextOptions) {
|
|
191
192
|
return new BrowseTheWebWithPlaywright(new index_js_1.PlaywrightBrowsingSessionWithPage(page, extraBrowserContextOptions, playwright.selectors));
|
|
192
193
|
}
|
|
194
|
+
/**
|
|
195
|
+
* Creates an ability to browse the web using an already-launched Electron application.
|
|
196
|
+
*
|
|
197
|
+
* Use this method when the Electron application lifecycle is managed externally,
|
|
198
|
+
* such as in Playwright Test where the app is launched per-worker.
|
|
199
|
+
*
|
|
200
|
+
* ## Example
|
|
201
|
+
*
|
|
202
|
+
* ```ts
|
|
203
|
+
* import { _electron as electron } from 'playwright';
|
|
204
|
+
* import { actorCalled } from '@serenity-js/core';
|
|
205
|
+
* import { BrowseTheWebWithPlaywright } from '@serenity-js/playwright';
|
|
206
|
+
*
|
|
207
|
+
* const electronApp = await electron.launch({ args: ['main.js'] });
|
|
208
|
+
*
|
|
209
|
+
* const actor = actorCalled('Tester').whoCan(
|
|
210
|
+
* BrowseTheWebWithPlaywright.usingElectronApp(electronApp)
|
|
211
|
+
* );
|
|
212
|
+
*
|
|
213
|
+
* // After tests, close the app manually
|
|
214
|
+
* await electronApp.close();
|
|
215
|
+
* ```
|
|
216
|
+
*
|
|
217
|
+
* @param electronApp - An already-launched Playwright ElectronApplication instance
|
|
218
|
+
* @param extraBrowserContextOptions - Optional configuration for timeouts and navigation
|
|
219
|
+
*/
|
|
220
|
+
static usingElectronApp(electronApp, extraBrowserContextOptions) {
|
|
221
|
+
return new BrowseTheWebWithPlaywright(new index_js_1.PlaywrightBrowsingSessionWithElectron(electronApp, extraBrowserContextOptions ?? {}, playwright.selectors));
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Creates an ability to browse the web by launching and managing an Electron application.
|
|
225
|
+
*
|
|
226
|
+
* Use this method when you want Serenity/JS to manage the Electron application lifecycle.
|
|
227
|
+
* The app is launched on first use and closed when the ability is discarded.
|
|
228
|
+
*
|
|
229
|
+
* ## Example
|
|
230
|
+
*
|
|
231
|
+
* ```typescript
|
|
232
|
+
* import { actorCalled } from '@serenity-js/core';
|
|
233
|
+
* import { BrowseTheWebWithPlaywright } from '@serenity-js/playwright';
|
|
234
|
+
*
|
|
235
|
+
* const actor = actorCalled('Tester').whoCan(
|
|
236
|
+
* BrowseTheWebWithPlaywright.launchingElectronApp({
|
|
237
|
+
* args: ['path/to/main.js'],
|
|
238
|
+
* cwd: 'path/to/app',
|
|
239
|
+
* })
|
|
240
|
+
* );
|
|
241
|
+
*
|
|
242
|
+
* // The app is automatically closed when the actor is dismissed
|
|
243
|
+
* ```
|
|
244
|
+
*
|
|
245
|
+
* @param launchOptions - Options for launching the Electron application
|
|
246
|
+
* @param extraBrowserContextOptions - Optional configuration for timeouts and navigation
|
|
247
|
+
*/
|
|
248
|
+
static launchingElectronApp(launchOptions, extraBrowserContextOptions) {
|
|
249
|
+
return new BrowseTheWebWithPlaywright(new index_js_1.SelfLaunchingPlaywrightBrowsingSessionWithElectron(launchOptions, extraBrowserContextOptions ?? {}, playwright.selectors));
|
|
250
|
+
}
|
|
251
|
+
async initialise() {
|
|
252
|
+
if (core_1.Initialisable.isInitialisable(this.session)) {
|
|
253
|
+
await this.session.initialise();
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
isInitialised() {
|
|
257
|
+
return core_1.Initialisable.isInitialisable(this.session)
|
|
258
|
+
? this.session.isInitialised()
|
|
259
|
+
: true;
|
|
260
|
+
}
|
|
193
261
|
/**
|
|
194
262
|
* Automatically closes any open [pages](https://serenity-js.org/api/web/class/Page/) when the [SceneFinishes](https://serenity-js.org/api/core-events/class/SceneFinishes/)
|
|
195
263
|
*
|
|
264
|
+
* For self-launching Electron sessions, also closes the Electron application.
|
|
265
|
+
*
|
|
196
266
|
* #### Learn more
|
|
197
267
|
* - [`PlaywrightBrowsingSession.closeAllPages`](https://serenity-js.org/api/playwright/class/PlaywrightBrowsingSession/#closeAllPages)
|
|
198
268
|
* - [`Discardable`](https://serenity-js.org/api/core/interface/Discardable/)
|
|
199
269
|
*/
|
|
200
270
|
async discard() {
|
|
201
|
-
|
|
271
|
+
if (core_1.Discardable.isDiscardable(this.session)) {
|
|
272
|
+
await this.session.discard();
|
|
273
|
+
}
|
|
202
274
|
}
|
|
203
275
|
}
|
|
204
276
|
exports.BrowseTheWebWithPlaywright = BrowseTheWebWithPlaywright;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BrowseTheWebWithPlaywright.js","sourceRoot":"","sources":["../../../src/screenplay/abilities/BrowseTheWebWithPlaywright.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"BrowseTheWebWithPlaywright.js","sourceRoot":"","sources":["../../../src/screenplay/abilities/BrowseTheWebWithPlaywright.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4CAA+D;AAC/D,0CAAgD;AAChD,4DAA8C;AAG9C,iDAM4B;AAE5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiJG;AACH,MAAa,0BACT,SAAQ,kBAAgC;IAGxC,MAAM,CAAC,KAAK,CACR,OAA2B,EAC3B,qBAAwD,EACxD,0BAAuD;QAEvD,OAAO,IAAI,0BAA0B,CAAC,IAAI,+CAAoC,CAAC,OAAO,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;IACtK,CAAC;IAED,MAAM,CAAC,SAAS,CACZ,IAAqB,EACrB,0BAAuD;QAEvD,OAAO,IAAI,0BAA0B,CAAC,IAAI,4CAAiC,CAAC,IAAI,EAAE,0BAA0B,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;IACzI,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,MAAM,CAAC,gBAAgB,CACnB,WAA2C,EAC3C,0BAAuD;QAEvD,OAAO,IAAI,0BAA0B,CACjC,IAAI,gDAAqC,CACrC,WAAW,EACX,0BAA0B,IAAI,EAAE,EAChC,UAAU,CAAC,SAAS,CACvB,CACJ,CAAC;IACN,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,MAAM,CAAC,oBAAoB,CACvB,aAAoC,EACpC,0BAAuD;QAEvD,OAAO,IAAI,0BAA0B,CACjC,IAAI,6DAAkD,CAClD,aAAa,EACb,0BAA0B,IAAI,EAAE,EAChC,UAAU,CAAC,SAAS,CACvB,CACJ,CAAC;IACN,CAAC;IAED,KAAK,CAAC,UAAU;QACZ,IAAI,oBAAa,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC9C,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;QACpC,CAAC;IACL,CAAC;IAED,aAAa;QACT,OAAO,oBAAa,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC;YAC9C,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE;YAC9B,CAAC,CAAC,IAAI,CAAC;IACf,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,OAAO;QACT,IAAI,kBAAW,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC1C,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACjC,CAAC;IACL,CAAC;CACJ;AA1HD,gEA0HC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type * as playwright from 'playwright-core';
|
|
2
|
+
/**
|
|
3
|
+
* Options for launching an Electron application via Playwright.
|
|
4
|
+
*
|
|
5
|
+
* This type re-exports Playwright's Electron launch options with additional documentation
|
|
6
|
+
* for commonly used properties.
|
|
7
|
+
*
|
|
8
|
+
* ## Example
|
|
9
|
+
*
|
|
10
|
+
* ```typescript
|
|
11
|
+
* import { actorCalled } from '@serenity-js/core';
|
|
12
|
+
* import { BrowseTheWebWithPlaywright, ElectronLaunchOptions } from '@serenity-js/playwright';
|
|
13
|
+
*
|
|
14
|
+
* const options: ElectronLaunchOptions = {
|
|
15
|
+
* executablePath: '/path/to/electron',
|
|
16
|
+
* args: ['main.js'],
|
|
17
|
+
* cwd: '/path/to/app',
|
|
18
|
+
* env: { NODE_ENV: 'test' },
|
|
19
|
+
* timeout: 30000,
|
|
20
|
+
* };
|
|
21
|
+
*
|
|
22
|
+
* const actor = actorCalled('Tester').whoCan(
|
|
23
|
+
* BrowseTheWebWithPlaywright.launchingElectronApp(options)
|
|
24
|
+
* );
|
|
25
|
+
* ```
|
|
26
|
+
*
|
|
27
|
+
* ## Common Options
|
|
28
|
+
*
|
|
29
|
+
* - **executablePath**: Path to the Electron executable. If not specified, uses the default
|
|
30
|
+
* Electron installed in `node_modules/.bin/electron`.
|
|
31
|
+
* - **args**: Command-line arguments passed to the application. Typically includes the path
|
|
32
|
+
* to the main script (e.g., `['main.js']`).
|
|
33
|
+
* - **cwd**: Current working directory for the Electron process.
|
|
34
|
+
* - **env**: Environment variables visible to the Electron process. Defaults to `process.env`.
|
|
35
|
+
* - **timeout**: Maximum time in milliseconds to wait for the application to start.
|
|
36
|
+
* Defaults to 30000 (30 seconds). Pass 0 to disable timeout.
|
|
37
|
+
*
|
|
38
|
+
* ## Additional Options
|
|
39
|
+
*
|
|
40
|
+
* - **acceptDownloads**: Whether to automatically download all attachments. Defaults to `true`.
|
|
41
|
+
* - **bypassCSP**: Toggles bypassing page's Content-Security-Policy. Defaults to `false`.
|
|
42
|
+
* - **colorScheme**: Emulates `prefers-colors-scheme` media feature. Supported values are `'light'`, `'dark'`, and `'no-preference'`.
|
|
43
|
+
* - **locale**: Specify user locale, for example `en-GB`, `de-DE`, etc.
|
|
44
|
+
* - **offline**: Whether to emulate network being offline. Defaults to `false`.
|
|
45
|
+
* - **recordVideo**: Enables video recording for all pages.
|
|
46
|
+
* - **timezoneId**: Changes the timezone of the context.
|
|
47
|
+
*
|
|
48
|
+
* ## Learn more
|
|
49
|
+
* - [Playwright Electron API](https://playwright.dev/docs/api/class-electron)
|
|
50
|
+
* - [Electron Testing with Playwright](https://playwright.dev/docs/electron)
|
|
51
|
+
*
|
|
52
|
+
* @group Configuration
|
|
53
|
+
*/
|
|
54
|
+
export type ElectronLaunchOptions = Parameters<typeof playwright._electron.launch>[0];
|
|
55
|
+
//# sourceMappingURL=ElectronLaunchOptions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ElectronLaunchOptions.d.ts","sourceRoot":"","sources":["../../../src/screenplay/models/ElectronLaunchOptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,UAAU,MAAM,iBAAiB,CAAC;AAEnD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AACH,MAAM,MAAM,qBAAqB,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ElectronLaunchOptions.js","sourceRoot":"","sources":["../../../src/screenplay/models/ElectronLaunchOptions.ts"],"names":[],"mappings":""}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { Discardable } from '@serenity-js/core';
|
|
1
2
|
import type { BrowserCapabilities } from '@serenity-js/web';
|
|
2
3
|
import type * as playwright from 'playwright-core';
|
|
3
4
|
import type { ExtraBrowserContextOptions } from '../../ExtraBrowserContextOptions.js';
|
|
@@ -6,13 +7,13 @@ import type { PlaywrightPage } from './PlaywrightPage.js';
|
|
|
6
7
|
/**
|
|
7
8
|
* @group Models
|
|
8
9
|
*/
|
|
9
|
-
export declare class PlaywrightBrowsingSessionWithBrowser extends PlaywrightBrowsingSession {
|
|
10
|
+
export declare class PlaywrightBrowsingSessionWithBrowser extends PlaywrightBrowsingSession implements Discardable {
|
|
10
11
|
protected readonly browser: playwright.Browser;
|
|
11
12
|
protected readonly browserContextOptions: playwright.BrowserContextOptions;
|
|
12
13
|
constructor(browser: playwright.Browser, browserContextOptions: playwright.BrowserContextOptions, extraBrowserContextOptions: ExtraBrowserContextOptions, selectors: playwright.Selectors);
|
|
13
14
|
protected createBrowserContext(): Promise<playwright.BrowserContext>;
|
|
14
15
|
protected registerCurrentPage(): Promise<PlaywrightPage>;
|
|
15
|
-
closeAllPages(): Promise<void>;
|
|
16
16
|
browserCapabilities(): Promise<BrowserCapabilities>;
|
|
17
|
+
discard(): Promise<void>;
|
|
17
18
|
}
|
|
18
19
|
//# sourceMappingURL=PlaywrightBrowsingSessionWithBrowser.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlaywrightBrowsingSessionWithBrowser.d.ts","sourceRoot":"","sources":["../../../src/screenplay/models/PlaywrightBrowsingSessionWithBrowser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,KAAK,KAAK,UAAU,MAAM,iBAAiB,CAAC;AAEnD,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,qCAAqC,CAAC;AACtF,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D;;GAEG;AACH,qBAAa,
|
|
1
|
+
{"version":3,"file":"PlaywrightBrowsingSessionWithBrowser.d.ts","sourceRoot":"","sources":["../../../src/screenplay/models/PlaywrightBrowsingSessionWithBrowser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,KAAK,KAAK,UAAU,MAAM,iBAAiB,CAAC;AAEnD,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,qCAAqC,CAAC;AACtF,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D;;GAEG;AACH,qBAAa,oCACT,SAAQ,yBACR,YAAW,WAAW;IAIlB,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO;IAC9C,SAAS,CAAC,QAAQ,CAAC,qBAAqB,EAAE,UAAU,CAAC,qBAAqB;gBADvD,OAAO,EAAE,UAAU,CAAC,OAAO,EAC3B,qBAAqB,EAAE,UAAU,CAAC,qBAAqB,EAC1E,0BAA0B,EAAE,0BAA0B,EACtD,SAAS,EAAE,UAAU,CAAC,SAAS;cAKV,oBAAoB,IAAI,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC;cAK1D,mBAAmB,IAAI,OAAO,CAAC,cAAc,CAAC;IAcxD,mBAAmB,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAQ5D,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAMjC"}
|
|
@@ -14,6 +14,7 @@ class PlaywrightBrowsingSessionWithBrowser extends PlaywrightBrowsingSession_js_
|
|
|
14
14
|
this.browserContextOptions = browserContextOptions;
|
|
15
15
|
}
|
|
16
16
|
async createBrowserContext() {
|
|
17
|
+
// todo: move to initialise?
|
|
17
18
|
return this.browser.newContext(this.browserContextOptions);
|
|
18
19
|
}
|
|
19
20
|
async registerCurrentPage() {
|
|
@@ -25,11 +26,6 @@ class PlaywrightBrowsingSessionWithBrowser extends PlaywrightBrowsingSession_js_
|
|
|
25
26
|
const allPages = await this.allPages();
|
|
26
27
|
return allPages.at(-1);
|
|
27
28
|
}
|
|
28
|
-
async closeAllPages() {
|
|
29
|
-
await super.closeAllPages();
|
|
30
|
-
const context = await this.browserContext();
|
|
31
|
-
await context.close();
|
|
32
|
-
}
|
|
33
29
|
async browserCapabilities() {
|
|
34
30
|
return {
|
|
35
31
|
browserName: this.browser._initializer.name, // todo: raise a PR to Playwright to expose this information
|
|
@@ -37,6 +33,11 @@ class PlaywrightBrowsingSessionWithBrowser extends PlaywrightBrowsingSession_js_
|
|
|
37
33
|
browserVersion: this.browser.version()
|
|
38
34
|
};
|
|
39
35
|
}
|
|
36
|
+
async discard() {
|
|
37
|
+
await this.closeAllPages();
|
|
38
|
+
const context = await this.browserContext();
|
|
39
|
+
await context.close();
|
|
40
|
+
}
|
|
40
41
|
}
|
|
41
42
|
exports.PlaywrightBrowsingSessionWithBrowser = PlaywrightBrowsingSessionWithBrowser;
|
|
42
43
|
//# sourceMappingURL=PlaywrightBrowsingSessionWithBrowser.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlaywrightBrowsingSessionWithBrowser.js","sourceRoot":"","sources":["../../../src/screenplay/models/PlaywrightBrowsingSessionWithBrowser.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"PlaywrightBrowsingSessionWithBrowser.js","sourceRoot":"","sources":["../../../src/screenplay/models/PlaywrightBrowsingSessionWithBrowser.ts"],"names":[],"mappings":";;;AAKA,iFAA2E;AAG3E;;GAEG;AACH,MAAa,oCACT,SAAQ,wDAAyB;IAKV;IACA;IAFvB,YACuB,OAA2B,EAC3B,qBAAuD,EAC1E,0BAAsD,EACtD,SAA+B;QAE/B,KAAK,CAAC,0BAA0B,EAAE,SAAS,CAAC,CAAC;QAL1B,YAAO,GAAP,OAAO,CAAoB;QAC3B,0BAAqB,GAArB,qBAAqB,CAAkC;IAK9E,CAAC;IAEkB,KAAK,CAAC,oBAAoB;QACzC,4BAA4B;QAC5B,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAC/D,CAAC;IAEkB,KAAK,CAAC,mBAAmB;QACxC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAE5C,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QAExB,iFAAiF;QACjF,iFAAiF;QACjF,8BAA8B;QAE9B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAA;QAEtC,OAAO,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAEQ,KAAK,CAAC,mBAAmB;QAC9B,OAAO;YACH,WAAW,EAAG,IAAI,CAAC,OAAe,CAAC,YAAY,CAAC,IAAI,EAAI,4DAA4D;YACpH,YAAY,EAAE,OAAO,CAAC,QAAQ,EAA0B,gDAAgD;YACxG,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;SACzC,CAAA;IACL,CAAC;IAED,KAAK,CAAC,OAAO;QACT,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAE3B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5C,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC;CACJ;AA/CD,oFA+CC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { BrowserCapabilities } from '@serenity-js/web';
|
|
2
|
+
import type * as playwright from 'playwright-core';
|
|
3
|
+
import type { ExtraBrowserContextOptions } from '../../ExtraBrowserContextOptions.js';
|
|
4
|
+
import { PlaywrightBrowsingSession } from './PlaywrightBrowsingSession.js';
|
|
5
|
+
import { PlaywrightPage } from './PlaywrightPage.js';
|
|
6
|
+
/**
|
|
7
|
+
* Playwright-specific implementation of [`BrowsingSession`](https://serenity-js.org/api/web/class/BrowsingSession/)
|
|
8
|
+
* for Electron applications.
|
|
9
|
+
*
|
|
10
|
+
* Use this class when you have an already-launched `ElectronApplication` instance,
|
|
11
|
+
* typically in Playwright Test scenarios where the app is managed per-worker.
|
|
12
|
+
*
|
|
13
|
+
* ## Example
|
|
14
|
+
*
|
|
15
|
+
* ```ts
|
|
16
|
+
* import { _electron as electron } from 'playwright';
|
|
17
|
+
* import { actorCalled } from '@serenity-js/core';
|
|
18
|
+
* import { BrowseTheWebWithPlaywright } from '@serenity-js/playwright';
|
|
19
|
+
*
|
|
20
|
+
* const electronApp = await electron.launch({ args: ['main.js'] });
|
|
21
|
+
*
|
|
22
|
+
* const actor = actorCalled('Tester').whoCan(
|
|
23
|
+
* BrowseTheWebWithPlaywright.usingElectronApp(electronApp)
|
|
24
|
+
* );
|
|
25
|
+
*
|
|
26
|
+
* // After tests, close the app manually
|
|
27
|
+
* await electronApp.close();
|
|
28
|
+
* ```
|
|
29
|
+
*
|
|
30
|
+
* @group Models
|
|
31
|
+
*/
|
|
32
|
+
export declare class PlaywrightBrowsingSessionWithElectron extends PlaywrightBrowsingSession {
|
|
33
|
+
protected electronApp: playwright.ElectronApplication;
|
|
34
|
+
constructor(electronApp: playwright.ElectronApplication, extraBrowserContextOptions: Partial<ExtraBrowserContextOptions>, selectors: playwright.Selectors);
|
|
35
|
+
protected createBrowserContext(): Promise<playwright.BrowserContext>;
|
|
36
|
+
protected registerCurrentPage(): Promise<PlaywrightPage>;
|
|
37
|
+
/**
|
|
38
|
+
* Closes all Electron windows but does NOT close the Electron application itself.
|
|
39
|
+
* The application lifecycle is managed externally.
|
|
40
|
+
*/
|
|
41
|
+
closeAllPages(): Promise<void>;
|
|
42
|
+
/**
|
|
43
|
+
* Returns [basic meta-data](https://serenity-js.org/api/web/interface/BrowserCapabilities/) about the Electron application.
|
|
44
|
+
*
|
|
45
|
+
* **Please note** that since Playwright does not expose information about the operating system
|
|
46
|
+
* the tests are running on, **Serenity/JS assumes that the tests are running locally**
|
|
47
|
+
* and therefore returns the value of Node.js `process.platform` for `platformName`.
|
|
48
|
+
*/
|
|
49
|
+
browserCapabilities(): Promise<BrowserCapabilities>;
|
|
50
|
+
private getElectronVersion;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=PlaywrightBrowsingSessionWithElectron.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlaywrightBrowsingSessionWithElectron.d.ts","sourceRoot":"","sources":["../../../src/screenplay/models/PlaywrightBrowsingSessionWithElectron.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,KAAK,KAAK,UAAU,MAAM,iBAAiB,CAAC;AAEnD,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,qCAAqC,CAAC;AACtF,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,qBAAa,qCAAsC,SAAQ,yBAAyB;IAG5E,SAAS,CAAC,WAAW,EAAE,UAAU,CAAC,mBAAmB;gBAA3C,WAAW,EAAE,UAAU,CAAC,mBAAmB,EACrD,0BAA0B,EAAE,OAAO,CAAC,0BAA0B,CAAC,EAC/D,SAAS,EAAE,UAAU,CAAC,SAAS;cAKV,oBAAoB,IAAI,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC;cAI1D,mBAAmB,IAAI,OAAO,CAAC,cAAc,CAAC;IA2CvE;;;OAGG;IACY,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAO7C;;;;;;OAMG;IACY,mBAAmB,IAAI,OAAO,CAAC,mBAAmB,CAAC;YAQpD,kBAAkB;CAWnC"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PlaywrightBrowsingSessionWithElectron = void 0;
|
|
4
|
+
const model_1 = require("@serenity-js/core/model");
|
|
5
|
+
const PlaywrightBrowsingSession_js_1 = require("./PlaywrightBrowsingSession.js");
|
|
6
|
+
const PlaywrightPage_js_1 = require("./PlaywrightPage.js");
|
|
7
|
+
/**
|
|
8
|
+
* Playwright-specific implementation of [`BrowsingSession`](https://serenity-js.org/api/web/class/BrowsingSession/)
|
|
9
|
+
* for Electron applications.
|
|
10
|
+
*
|
|
11
|
+
* Use this class when you have an already-launched `ElectronApplication` instance,
|
|
12
|
+
* typically in Playwright Test scenarios where the app is managed per-worker.
|
|
13
|
+
*
|
|
14
|
+
* ## Example
|
|
15
|
+
*
|
|
16
|
+
* ```ts
|
|
17
|
+
* import { _electron as electron } from 'playwright';
|
|
18
|
+
* import { actorCalled } from '@serenity-js/core';
|
|
19
|
+
* import { BrowseTheWebWithPlaywright } from '@serenity-js/playwright';
|
|
20
|
+
*
|
|
21
|
+
* const electronApp = await electron.launch({ args: ['main.js'] });
|
|
22
|
+
*
|
|
23
|
+
* const actor = actorCalled('Tester').whoCan(
|
|
24
|
+
* BrowseTheWebWithPlaywright.usingElectronApp(electronApp)
|
|
25
|
+
* );
|
|
26
|
+
*
|
|
27
|
+
* // After tests, close the app manually
|
|
28
|
+
* await electronApp.close();
|
|
29
|
+
* ```
|
|
30
|
+
*
|
|
31
|
+
* @group Models
|
|
32
|
+
*/
|
|
33
|
+
class PlaywrightBrowsingSessionWithElectron extends PlaywrightBrowsingSession_js_1.PlaywrightBrowsingSession {
|
|
34
|
+
electronApp;
|
|
35
|
+
constructor(electronApp, extraBrowserContextOptions, selectors) {
|
|
36
|
+
super(extraBrowserContextOptions, selectors);
|
|
37
|
+
this.electronApp = electronApp;
|
|
38
|
+
}
|
|
39
|
+
async createBrowserContext() {
|
|
40
|
+
return this.electronApp.context();
|
|
41
|
+
}
|
|
42
|
+
async registerCurrentPage() {
|
|
43
|
+
// Ensure browser context is initialized before accessing windows
|
|
44
|
+
await this.browserContext();
|
|
45
|
+
const windows = this.electronApp.windows();
|
|
46
|
+
let targetPage;
|
|
47
|
+
if (windows.length === 0) {
|
|
48
|
+
// Wait for the first window to open
|
|
49
|
+
targetPage = await this.electronApp.firstWindow();
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
// Use the last opened window
|
|
53
|
+
targetPage = windows.at(-1);
|
|
54
|
+
}
|
|
55
|
+
// Check if this window is already registered
|
|
56
|
+
const allPages = await this.allPages();
|
|
57
|
+
for (const page of allPages) {
|
|
58
|
+
const nativePage = await page.nativePage();
|
|
59
|
+
if (nativePage === targetPage) {
|
|
60
|
+
return page;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
// Create and register a new PlaywrightPage
|
|
64
|
+
const playwrightPage = new PlaywrightPage_js_1.PlaywrightPage(this, targetPage, this.extraBrowserContextOptions, model_1.CorrelationId.create());
|
|
65
|
+
this.register(playwrightPage);
|
|
66
|
+
// Set up close handler for automatic deregistration
|
|
67
|
+
targetPage.on('close', () => {
|
|
68
|
+
this.deregister(playwrightPage.id);
|
|
69
|
+
});
|
|
70
|
+
return playwrightPage;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Closes all Electron windows but does NOT close the Electron application itself.
|
|
74
|
+
* The application lifecycle is managed externally.
|
|
75
|
+
*/
|
|
76
|
+
async closeAllPages() {
|
|
77
|
+
const pages = await this.allPages();
|
|
78
|
+
for (const page of pages) {
|
|
79
|
+
await page.close();
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Returns [basic meta-data](https://serenity-js.org/api/web/interface/BrowserCapabilities/) about the Electron application.
|
|
84
|
+
*
|
|
85
|
+
* **Please note** that since Playwright does not expose information about the operating system
|
|
86
|
+
* the tests are running on, **Serenity/JS assumes that the tests are running locally**
|
|
87
|
+
* and therefore returns the value of Node.js `process.platform` for `platformName`.
|
|
88
|
+
*/
|
|
89
|
+
async browserCapabilities() {
|
|
90
|
+
return {
|
|
91
|
+
browserName: 'electron',
|
|
92
|
+
platformName: process.platform,
|
|
93
|
+
browserVersion: await this.getElectronVersion(),
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
async getElectronVersion() {
|
|
97
|
+
try {
|
|
98
|
+
const version = await this.electronApp.evaluate(() => process.versions.electron);
|
|
99
|
+
return version || 'unknown';
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
return 'unknown';
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
exports.PlaywrightBrowsingSessionWithElectron = PlaywrightBrowsingSessionWithElectron;
|
|
107
|
+
//# sourceMappingURL=PlaywrightBrowsingSessionWithElectron.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlaywrightBrowsingSessionWithElectron.js","sourceRoot":"","sources":["../../../src/screenplay/models/PlaywrightBrowsingSessionWithElectron.ts"],"names":[],"mappings":";;;AAAA,mDAAwD;AAKxD,iFAA2E;AAC3E,2DAAqD;AAErD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAa,qCAAsC,SAAQ,wDAAyB;IAGlE;IADd,YACc,WAA2C,EACrD,0BAA+D,EAC/D,SAA+B;QAE/B,KAAK,CAAC,0BAA0B,EAAE,SAAS,CAAC,CAAC;QAJnC,gBAAW,GAAX,WAAW,CAAgC;IAKzD,CAAC;IAEkB,KAAK,CAAC,oBAAoB;QACzC,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;IACtC,CAAC;IAEkB,KAAK,CAAC,mBAAmB;QACxC,iEAAiE;QACjE,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QAE3C,IAAI,UAA2B,CAAC;QAEhC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,oCAAoC;YACpC,UAAU,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;QACtD,CAAC;aACI,CAAC;YACF,6BAA6B;YAC7B,UAAU,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC;QACjC,CAAC;QAED,6CAA6C;QAC7C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACvC,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC1B,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;YAC3C,IAAI,UAAU,KAAK,UAAU,EAAE,CAAC;gBAC5B,OAAO,IAAI,CAAC;YAChB,CAAC;QACL,CAAC;QAED,2CAA2C;QAC3C,MAAM,cAAc,GAAG,IAAI,kCAAc,CACrC,IAAI,EACJ,UAAU,EACV,IAAI,CAAC,0BAA0B,EAC/B,qBAAa,CAAC,MAAM,EAAE,CACzB,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QAE9B,oDAAoD;QACpD,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACxB,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,OAAO,cAAc,CAAC;IAC1B,CAAC;IAED;;;OAGG;IACM,KAAK,CAAC,aAAa;QACxB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACvB,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC;IACL,CAAC;IAED;;;;;;OAMG;IACM,KAAK,CAAC,mBAAmB;QAC9B,OAAO;YACH,WAAW,EAAE,UAAU;YACvB,YAAY,EAAE,OAAO,CAAC,QAAQ;YAC9B,cAAc,EAAE,MAAM,IAAI,CAAC,kBAAkB,EAAE;SAClD,CAAC;IACN,CAAC;IAEO,KAAK,CAAC,kBAAkB;QAC5B,IAAI,CAAC;YACD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAC3C,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAClC,CAAC;YACF,OAAO,OAAO,IAAI,SAAS,CAAC;QAChC,CAAC;QACD,MAAM,CAAC;YACH,OAAO,SAAS,CAAC;QACrB,CAAC;IACL,CAAC;CACJ;AA9FD,sFA8FC"}
|
|
@@ -17,5 +17,6 @@ export declare class PlaywrightBrowsingSessionWithPage extends PlaywrightBrowsin
|
|
|
17
17
|
*/
|
|
18
18
|
closeAllPages(): Promise<void>;
|
|
19
19
|
browserCapabilities(): Promise<BrowserCapabilities>;
|
|
20
|
+
discard(): Promise<void>;
|
|
20
21
|
}
|
|
21
22
|
//# sourceMappingURL=PlaywrightBrowsingSessionWithPage.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlaywrightBrowsingSessionWithPage.d.ts","sourceRoot":"","sources":["../../../src/screenplay/models/PlaywrightBrowsingSessionWithPage.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,KAAK,KAAK,UAAU,MAAM,iBAAiB,CAAC;AAEnD,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,qCAAqC,CAAC;AACtF,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD;;GAEG;AACH,qBAAa,iCAAkC,SAAQ,yBAAyB;IAIxE,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI;IAH5C,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAyC;gBAG1D,IAAI,EAAE,UAAU,CAAC,IAAI,EACxC,qBAAqB,EAAE,0BAA0B,EACjD,SAAS,EAAE,UAAU,CAAC,SAAS;cAKV,mBAAmB,IAAI,OAAO,CAAC,cAAc,CAAC;cAU9C,oBAAoB,IAAI,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC;IAInF;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAWrB,mBAAmB,IAAI,OAAO,CAAC,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"PlaywrightBrowsingSessionWithPage.d.ts","sourceRoot":"","sources":["../../../src/screenplay/models/PlaywrightBrowsingSessionWithPage.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,KAAK,KAAK,UAAU,MAAM,iBAAiB,CAAC;AAEnD,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,qCAAqC,CAAC;AACtF,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD;;GAEG;AACH,qBAAa,iCAAkC,SAAQ,yBAAyB;IAIxE,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI;IAH5C,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAyC;gBAG1D,IAAI,EAAE,UAAU,CAAC,IAAI,EACxC,qBAAqB,EAAE,0BAA0B,EACjD,SAAS,EAAE,UAAU,CAAC,SAAS;cAKV,mBAAmB,IAAI,OAAO,CAAC,cAAc,CAAC;cAU9C,oBAAoB,IAAI,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC;IAInF;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAWrB,mBAAmB,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAS5D,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAGjC"}
|