@serenity-js/playwright 3.14.1 → 3.15.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 +20 -0
- package/README.md +10 -9
- package/lib/screenplay/abilities/BrowseTheWebWithPlaywright.js +1 -1
- package/lib/screenplay/abilities/BrowseTheWebWithPlaywright.js.map +1 -1
- package/lib/screenplay/models/PlaywrightBrowsingSession.d.ts +4 -2
- package/lib/screenplay/models/PlaywrightBrowsingSession.d.ts.map +1 -1
- package/lib/screenplay/models/PlaywrightBrowsingSession.js +6 -10
- package/lib/screenplay/models/PlaywrightBrowsingSession.js.map +1 -1
- package/lib/screenplay/models/PlaywrightBrowsingSessionWithBrowser.d.ts +2 -2
- package/lib/screenplay/models/PlaywrightBrowsingSessionWithBrowser.d.ts.map +1 -1
- package/lib/screenplay/models/PlaywrightBrowsingSessionWithBrowser.js +10 -6
- package/lib/screenplay/models/PlaywrightBrowsingSessionWithBrowser.js.map +1 -1
- package/lib/screenplay/models/PlaywrightBrowsingSessionWithPage.d.ts +8 -1
- package/lib/screenplay/models/PlaywrightBrowsingSessionWithPage.d.ts.map +1 -1
- package/lib/screenplay/models/PlaywrightBrowsingSessionWithPage.js +21 -3
- package/lib/screenplay/models/PlaywrightBrowsingSessionWithPage.js.map +1 -1
- package/lib/screenplay/models/PlaywrightPage.d.ts.map +1 -1
- package/lib/screenplay/models/PlaywrightPage.js +10 -2
- package/lib/screenplay/models/PlaywrightPage.js.map +1 -1
- package/package.json +5 -5
- package/src/screenplay/abilities/BrowseTheWebWithPlaywright.ts +1 -1
- package/src/screenplay/models/PlaywrightBrowsingSession.ts +7 -15
- package/src/screenplay/models/PlaywrightBrowsingSessionWithBrowser.ts +17 -6
- package/src/screenplay/models/PlaywrightBrowsingSessionWithPage.ts +28 -3
- package/src/screenplay/models/PlaywrightPage.ts +17 -4
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,26 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [3.15.0](https://github.com/serenity-js/serenity-js/compare/v3.14.2...v3.15.0) (2024-01-12)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @serenity-js/playwright
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
## [3.14.2](https://github.com/serenity-js/serenity-js/compare/v3.14.1...v3.14.2) (2023-12-12)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
### Bug Fixes
|
|
18
|
+
|
|
19
|
+
* **playwright-test:** fixed switching between multiple pages ([375f3aa](https://github.com/serenity-js/serenity-js/commit/375f3aaac05843b71a88d56ae0f5e4d99522f10e))
|
|
20
|
+
* **playwright:** ignore taking the screenshot if the page is already closed ([fdedeb8](https://github.com/serenity-js/serenity-js/commit/fdedeb8d8ca5fe6406101be930c17ad281a8f26d))
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
6
26
|
## [3.14.1](https://github.com/serenity-js/serenity-js/compare/v3.14.0...v3.14.1) (2023-12-10)
|
|
7
27
|
|
|
8
28
|
|
package/README.md
CHANGED
|
@@ -12,7 +12,7 @@ of complex software systems faster, more collaborative and easier to scale.
|
|
|
12
12
|
- [Serenity/JS web testing tutorial](https://serenity-js.org/handbook/web-testing/your-first-web-scenario)
|
|
13
13
|
- [Serenity/JS Handbook](https://serenity-js.org/handbook) and [Getting Started guides](https://serenity-js.org/handbook/getting-started/)
|
|
14
14
|
- [API documentation](https://serenity-js.org/api/core)
|
|
15
|
-
- [Serenity/JS Project Templates on GitHub](https://serenity-js.org/handbook/getting-started
|
|
15
|
+
- [Serenity/JS Project Templates on GitHub](https://serenity-js.org/handbook/getting-started/project-templates/)
|
|
16
16
|
|
|
17
17
|
👋 Join the Serenity/JS Community!
|
|
18
18
|
- Meet other Serenity/JS developers and maintainers on the [Serenity/JS Community chat channel](https://matrix.to/#/#serenity-js:gitter.im),
|
|
@@ -48,11 +48,9 @@ and review the [Serenity/JS Cucumber and Playwright Project Template](https://gi
|
|
|
48
48
|
|
|
49
49
|
```typescript
|
|
50
50
|
import { Ensure, equals } from '@serenity-js/assertions'
|
|
51
|
-
import { actorCalled, Actor,
|
|
52
|
-
import { ConsoleReporter } from '@serenity-js/console-reporter'
|
|
51
|
+
import { actorCalled, Actor, Cast, configure, Duration } from '@serenity-js/core'
|
|
53
52
|
import { BrowseTheWebWithPlaywright, PlaywrightOptions } from '@serenity-js/playwright'
|
|
54
|
-
import {
|
|
55
|
-
import { By, Navigate, PageElement, Photographer, TakePhotosOfFailures, Text } from '@serenity-js/web'
|
|
53
|
+
import { By, Navigate, PageElement, TakePhotosOfFailures, Text } from '@serenity-js/web'
|
|
56
54
|
|
|
57
55
|
import { describe, it, beforeAll, afterAll } from 'mocha'
|
|
58
56
|
import * as playwright from 'playwright'
|
|
@@ -101,10 +99,13 @@ describe('Serenity/JS', () => {
|
|
|
101
99
|
defaultTimeout: Duration.ofMilliseconds(750).inMilliseconds(),
|
|
102
100
|
}),
|
|
103
101
|
crew: [
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
102
|
+
[ '@serenity-js/console-reporter', { theme: 'auto' } ],
|
|
103
|
+
[ '@serenity-js/core:ArtifactArchiver', { outputDirectory: 'target/site/serenity' } ],
|
|
104
|
+
[ '@serenity-js/web:Photographer', {
|
|
105
|
+
strategy: 'TakePhotosOfFailures',
|
|
106
|
+
// strategy: 'TakePhotosOfInteractions',
|
|
107
|
+
} ],
|
|
108
|
+
[ '@serenity-js/serenity-bdd', { specDirectory: 'spec' } ],
|
|
108
109
|
]
|
|
109
110
|
})
|
|
110
111
|
})
|
|
@@ -125,7 +125,7 @@ class BrowseTheWebWithPlaywright extends web_1.BrowseTheWeb {
|
|
|
125
125
|
return new BrowseTheWebWithPlaywright(new models_1.PlaywrightBrowsingSessionWithBrowser(browser, options, playwright.selectors));
|
|
126
126
|
}
|
|
127
127
|
static usingPage(page, options) {
|
|
128
|
-
return new BrowseTheWebWithPlaywright(new models_1.PlaywrightBrowsingSessionWithPage(page, options));
|
|
128
|
+
return new BrowseTheWebWithPlaywright(new models_1.PlaywrightBrowsingSessionWithPage(page, options, playwright.selectors));
|
|
129
129
|
}
|
|
130
130
|
/**
|
|
131
131
|
* Automatically closes any open {@apilink Page|Pages} when the {@apilink SceneFinishes}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BrowseTheWebWithPlaywright.js","sourceRoot":"","sources":["../../../src/screenplay/abilities/BrowseTheWebWithPlaywright.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AACA,0CAAgD;AAChD,4DAA8C;AAG9C,sCAGmB;AAEnB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4FG;AACH,MAAa,0BAA2B,SAAQ,kBAAgC;IAE5E,MAAM,CAAC,KAAK,CAAC,OAA2B,EAAE,OAA2B;QACjE,OAAO,IAAI,0BAA0B,CAAC,IAAI,6CAAoC,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;IAC5H,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,IAAqB,EAAE,OAA2B;QAC/D,OAAO,IAAI,0BAA0B,CAAC,IAAI,0CAAiC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"BrowseTheWebWithPlaywright.js","sourceRoot":"","sources":["../../../src/screenplay/abilities/BrowseTheWebWithPlaywright.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AACA,0CAAgD;AAChD,4DAA8C;AAG9C,sCAGmB;AAEnB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4FG;AACH,MAAa,0BAA2B,SAAQ,kBAAgC;IAE5E,MAAM,CAAC,KAAK,CAAC,OAA2B,EAAE,OAA2B;QACjE,OAAO,IAAI,0BAA0B,CAAC,IAAI,6CAAoC,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;IAC5H,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,IAAqB,EAAE,OAA2B;QAC/D,OAAO,IAAI,0BAA0B,CAAC,IAAI,0CAAiC,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;IACtH,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,OAAO;QACT,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;IACvC,CAAC;CACJ;AApBD,gEAoBC"}
|
|
@@ -2,6 +2,7 @@ import type { BrowserCapabilities } from '@serenity-js/web';
|
|
|
2
2
|
import { BrowsingSession, type Cookie, type CookieData } from '@serenity-js/web';
|
|
3
3
|
import type * as playwright from 'playwright-core';
|
|
4
4
|
import { type PlaywrightOptions } from '../../PlaywrightOptions';
|
|
5
|
+
import { SerenitySelectorEngines } from '../../selector-engines';
|
|
5
6
|
import { PlaywrightPage } from '../models';
|
|
6
7
|
/**
|
|
7
8
|
* Playwright-specific implementation of {@apilink BrowsingSession}.
|
|
@@ -10,8 +11,10 @@ import { PlaywrightPage } from '../models';
|
|
|
10
11
|
*/
|
|
11
12
|
export declare abstract class PlaywrightBrowsingSession extends BrowsingSession<PlaywrightPage> {
|
|
12
13
|
protected readonly browserContextOptions: PlaywrightOptions;
|
|
14
|
+
protected readonly selectors: playwright.Selectors;
|
|
15
|
+
protected readonly serenitySelectorEngines: SerenitySelectorEngines;
|
|
13
16
|
private currentPlaywrightBrowserContext;
|
|
14
|
-
protected constructor(browserContextOptions: PlaywrightOptions);
|
|
17
|
+
protected constructor(browserContextOptions: PlaywrightOptions, selectors: playwright.Selectors);
|
|
15
18
|
/**
|
|
16
19
|
* Returns {@apilink BrowserCapabilities|basic meta-data} about the browser associated with this ability.
|
|
17
20
|
*
|
|
@@ -23,7 +26,6 @@ export declare abstract class PlaywrightBrowsingSession extends BrowsingSession<
|
|
|
23
26
|
cookie(name: string): Promise<Cookie>;
|
|
24
27
|
setCookie(cookie: CookieData): Promise<void>;
|
|
25
28
|
deleteAllCookies(): Promise<void>;
|
|
26
|
-
protected registerCurrentPage(): Promise<PlaywrightPage>;
|
|
27
29
|
protected browserContext(): Promise<playwright.BrowserContext>;
|
|
28
30
|
protected abstract createBrowserContext(options: PlaywrightOptions): Promise<playwright.BrowserContext>;
|
|
29
31
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlaywrightBrowsingSession.d.ts","sourceRoot":"","sources":["../../../src/screenplay/models/PlaywrightBrowsingSession.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,KAAK,MAAM,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACjF,OAAO,KAAK,KAAK,UAAU,MAAM,iBAAiB,CAAC;AAEnD,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAoB,cAAc,EAAE,MAAM,WAAW,CAAC;AAE7D;;;;GAIG;AACH,8BAAsB,yBAA0B,SAAQ,eAAe,CAAC,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"PlaywrightBrowsingSession.d.ts","sourceRoot":"","sources":["../../../src/screenplay/models/PlaywrightBrowsingSession.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,KAAK,MAAM,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACjF,OAAO,KAAK,KAAK,UAAU,MAAM,iBAAiB,CAAC;AAEnD,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAoB,cAAc,EAAE,MAAM,WAAW,CAAC;AAE7D;;;;GAIG;AACH,8BAAsB,yBAA0B,SAAQ,eAAe,CAAC,cAAc,CAAC;IAM/E,SAAS,CAAC,QAAQ,CAAC,qBAAqB,EAAE,iBAAiB;IAC3D,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC,SAAS;IALtD,SAAS,CAAC,QAAQ,CAAC,uBAAuB,0BAAiC;IAC3E,OAAO,CAAC,+BAA+B,CAA4B;IAEnE,SAAS,aACc,qBAAqB,EAAE,iBAAiB,EACxC,SAAS,EAAE,UAAU,CAAC,SAAS;IAKtD;;;;;;OAMG;aACa,mBAAmB,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAE7D,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKrC,SAAS,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAM5C,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;cAKvB,cAAc,IAAI,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC;IAuBpE,SAAS,CAAC,QAAQ,CAAC,oBAAoB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC;CAC1G"}
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.PlaywrightBrowsingSession = void 0;
|
|
4
4
|
const model_1 = require("@serenity-js/core/lib/model");
|
|
5
5
|
const web_1 = require("@serenity-js/web");
|
|
6
|
+
const selector_engines_1 = require("../../selector-engines");
|
|
6
7
|
const models_1 = require("../models");
|
|
7
8
|
/**
|
|
8
9
|
* Playwright-specific implementation of {@apilink BrowsingSession}.
|
|
@@ -11,10 +12,13 @@ const models_1 = require("../models");
|
|
|
11
12
|
*/
|
|
12
13
|
class PlaywrightBrowsingSession extends web_1.BrowsingSession {
|
|
13
14
|
browserContextOptions;
|
|
15
|
+
selectors;
|
|
16
|
+
serenitySelectorEngines = new selector_engines_1.SerenitySelectorEngines();
|
|
14
17
|
currentPlaywrightBrowserContext;
|
|
15
|
-
constructor(browserContextOptions) {
|
|
18
|
+
constructor(browserContextOptions, selectors) {
|
|
16
19
|
super();
|
|
17
20
|
this.browserContextOptions = browserContextOptions;
|
|
21
|
+
this.selectors = selectors;
|
|
18
22
|
}
|
|
19
23
|
async cookie(name) {
|
|
20
24
|
const context = await this.browserContext();
|
|
@@ -28,17 +32,9 @@ class PlaywrightBrowsingSession extends web_1.BrowsingSession {
|
|
|
28
32
|
const context = await this.browserContext();
|
|
29
33
|
await context.clearCookies();
|
|
30
34
|
}
|
|
31
|
-
async registerCurrentPage() {
|
|
32
|
-
const context = await this.browserContext();
|
|
33
|
-
await context.newPage();
|
|
34
|
-
// calling context.newPage() triggers a callback registered via browserContext(),
|
|
35
|
-
// which wraps playwright.Page in PlaywrightPage and adds it to the list of pages
|
|
36
|
-
// returned by this.allPages()
|
|
37
|
-
const allPages = await this.allPages();
|
|
38
|
-
return allPages.at(-1);
|
|
39
|
-
}
|
|
40
35
|
async browserContext() {
|
|
41
36
|
if (!this.currentPlaywrightBrowserContext) {
|
|
37
|
+
await this.serenitySelectorEngines.ensureRegisteredWith(this.selectors);
|
|
42
38
|
this.currentPlaywrightBrowserContext = await this.createBrowserContext(this.browserContextOptions);
|
|
43
39
|
this.currentPlaywrightBrowserContext.on('page', async (page) => {
|
|
44
40
|
this.register(new models_1.PlaywrightPage(this, page, this.browserContextOptions, model_1.CorrelationId.create()));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlaywrightBrowsingSession.js","sourceRoot":"","sources":["../../../src/screenplay/models/PlaywrightBrowsingSession.ts"],"names":[],"mappings":";;;AAAA,uDAA4D;AAE5D,0CAAiF;AAIjF,sCAA6D;AAE7D;;;;GAIG;AACH,MAAsB,yBAA0B,SAAQ,qBAA+B;
|
|
1
|
+
{"version":3,"file":"PlaywrightBrowsingSession.js","sourceRoot":"","sources":["../../../src/screenplay/models/PlaywrightBrowsingSession.ts"],"names":[],"mappings":";;;AAAA,uDAA4D;AAE5D,0CAAiF;AAIjF,6DAAiE;AACjE,sCAA6D;AAE7D;;;;GAIG;AACH,MAAsB,yBAA0B,SAAQ,qBAA+B;IAM5D;IACA;IALJ,uBAAuB,GAAG,IAAI,0CAAuB,EAAE,CAAC;IACnE,+BAA+B,CAA4B;IAEnE,YACuB,qBAAwC,EACxC,SAA+B;QAElD,KAAK,EAAE,CAAC;QAHW,0BAAqB,GAArB,qBAAqB,CAAmB;QACxC,cAAS,GAAT,SAAS,CAAsB;IAGtD,CAAC;IAWD,KAAK,CAAC,MAAM,CAAC,IAAY;QACrB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5C,OAAO,IAAI,yBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,MAAkB;QAC9B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAE5C,MAAM,OAAO,CAAC,UAAU,CAAC,CAAE,MAAM,CAAE,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,gBAAgB;QAClB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAA;QAC3C,MAAM,OAAO,CAAC,YAAY,EAAE,CAAC;IACjC,CAAC;IAES,KAAK,CAAC,cAAc;QAC1B,IAAI,CAAE,IAAI,CAAC,+BAA+B,EAAE;YACxC,MAAM,IAAI,CAAC,uBAAuB,CAAC,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACxE,IAAI,CAAC,+BAA+B,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YAEnG,IAAI,CAAC,+BAA+B,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,EAAC,IAAI,EAAC,EAAE;gBACzD,IAAI,CAAC,QAAQ,CACT,IAAI,uBAAc,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,qBAAqB,EAAE,qBAAa,CAAC,MAAM,EAAE,CAAC,CACrF,CAAC;YACN,CAAC,CAAC,CAAC;YAEH,IAAI,IAAI,CAAC,qBAAqB,EAAE,wBAAwB,EAAE;gBACtD,IAAI,CAAC,+BAA+B,CAAC,2BAA2B,CAAC,IAAI,CAAC,qBAAqB,EAAE,wBAAwB,CAAC,CAAC;aAC1H;YAED,IAAI,IAAI,CAAC,qBAAqB,EAAE,cAAc,EAAE;gBAC5C,IAAI,CAAC,+BAA+B,CAAC,iBAAiB,CAAC,IAAI,CAAC,qBAAqB,EAAE,cAAc,CAAC,CAAC;aACtG;SACJ;QAED,OAAO,IAAI,CAAC,+BAA+B,CAAC;IAChD,CAAC;CAGJ;AA7DD,8DA6DC"}
|
|
@@ -2,15 +2,15 @@ import type { BrowserCapabilities } from '@serenity-js/web';
|
|
|
2
2
|
import type * as playwright from 'playwright-core';
|
|
3
3
|
import type { PlaywrightOptions } from '../../PlaywrightOptions';
|
|
4
4
|
import { PlaywrightBrowsingSession } from './PlaywrightBrowsingSession';
|
|
5
|
+
import type { PlaywrightPage } from './PlaywrightPage';
|
|
5
6
|
/**
|
|
6
7
|
* @group Models
|
|
7
8
|
*/
|
|
8
9
|
export declare class PlaywrightBrowsingSessionWithBrowser extends PlaywrightBrowsingSession {
|
|
9
10
|
protected readonly browser: playwright.Browser;
|
|
10
|
-
private readonly selectors;
|
|
11
|
-
private readonly serenitySelectorEngines;
|
|
12
11
|
constructor(browser: playwright.Browser, browserContextOptions: PlaywrightOptions, selectors: playwright.Selectors);
|
|
13
12
|
protected createBrowserContext(options: PlaywrightOptions): Promise<playwright.BrowserContext>;
|
|
13
|
+
protected registerCurrentPage(): Promise<PlaywrightPage>;
|
|
14
14
|
closeAllPages(): Promise<void>;
|
|
15
15
|
browserCapabilities(): Promise<BrowserCapabilities>;
|
|
16
16
|
}
|
|
@@ -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,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;
|
|
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,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD;;GAEG;AACH,qBAAa,oCAAqC,SAAQ,yBAAyB;IAG3E,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO;gBAA3B,OAAO,EAAE,UAAU,CAAC,OAAO,EAC9C,qBAAqB,EAAE,iBAAiB,EACxC,SAAS,EAAE,UAAU,CAAC,SAAS;cAKV,oBAAoB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC;cAIpF,mBAAmB,IAAI,OAAO,CAAC,cAAc,CAAC;IAcxD,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAO9B,mBAAmB,IAAI,OAAO,CAAC,mBAAmB,CAAC;CAOrE"}
|
|
@@ -1,24 +1,28 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.PlaywrightBrowsingSessionWithBrowser = void 0;
|
|
4
|
-
const selector_engines_1 = require("../../selector-engines");
|
|
5
4
|
const PlaywrightBrowsingSession_1 = require("./PlaywrightBrowsingSession");
|
|
6
5
|
/**
|
|
7
6
|
* @group Models
|
|
8
7
|
*/
|
|
9
8
|
class PlaywrightBrowsingSessionWithBrowser extends PlaywrightBrowsingSession_1.PlaywrightBrowsingSession {
|
|
10
9
|
browser;
|
|
11
|
-
selectors;
|
|
12
|
-
serenitySelectorEngines = new selector_engines_1.SerenitySelectorEngines();
|
|
13
10
|
constructor(browser, browserContextOptions, selectors) {
|
|
14
|
-
super(browserContextOptions);
|
|
11
|
+
super(browserContextOptions, selectors);
|
|
15
12
|
this.browser = browser;
|
|
16
|
-
this.selectors = selectors;
|
|
17
13
|
}
|
|
18
14
|
async createBrowserContext(options) {
|
|
19
|
-
await this.serenitySelectorEngines.ensureRegisteredWith(this.selectors);
|
|
20
15
|
return this.browser.newContext(this.browserContextOptions);
|
|
21
16
|
}
|
|
17
|
+
async registerCurrentPage() {
|
|
18
|
+
const context = await this.browserContext();
|
|
19
|
+
await context.newPage();
|
|
20
|
+
// calling context.newPage() triggers a callback registered via browserContext(),
|
|
21
|
+
// which wraps playwright.Page in PlaywrightPage and adds it to the list of pages
|
|
22
|
+
// returned by this.allPages()
|
|
23
|
+
const allPages = await this.allPages();
|
|
24
|
+
return allPages.at(-1);
|
|
25
|
+
}
|
|
22
26
|
async closeAllPages() {
|
|
23
27
|
await super.closeAllPages();
|
|
24
28
|
const context = await this.browserContext();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlaywrightBrowsingSessionWithBrowser.js","sourceRoot":"","sources":["../../../src/screenplay/models/PlaywrightBrowsingSessionWithBrowser.ts"],"names":[],"mappings":";;;AAIA,
|
|
1
|
+
{"version":3,"file":"PlaywrightBrowsingSessionWithBrowser.js","sourceRoot":"","sources":["../../../src/screenplay/models/PlaywrightBrowsingSessionWithBrowser.ts"],"names":[],"mappings":";;;AAIA,2EAAwE;AAGxE;;GAEG;AACH,MAAa,oCAAqC,SAAQ,qDAAyB;IAGxD;IADvB,YACuB,OAA2B,EAC9C,qBAAwC,EACxC,SAA+B;QAE/B,KAAK,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC;QAJrB,YAAO,GAAP,OAAO,CAAoB;IAKlD,CAAC;IAEkB,KAAK,CAAC,oBAAoB,CAAC,OAA0B;QACpE,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,aAAa;QACxB,MAAM,KAAK,CAAC,aAAa,EAAE,CAAC;QAE5B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5C,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC;IAEQ,KAAK,CAAC,mBAAmB;QAC9B,OAAO;YACH,WAAW,EAAG,IAAI,CAAC,OAAe,CAAC,YAAY,CAAC,IAAI;YACpD,YAAY,EAAE,OAAO,CAAC,QAAQ;YAC9B,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;SACzC,CAAA;IACL,CAAC;CACJ;AA1CD,oFA0CC"}
|
|
@@ -2,13 +2,20 @@ import type { BrowserCapabilities } from '@serenity-js/web';
|
|
|
2
2
|
import type * as playwright from 'playwright-core';
|
|
3
3
|
import type { PlaywrightOptions } from '../../PlaywrightOptions';
|
|
4
4
|
import { PlaywrightBrowsingSession } from './PlaywrightBrowsingSession';
|
|
5
|
+
import { PlaywrightPage } from './PlaywrightPage';
|
|
5
6
|
/**
|
|
6
7
|
* @group Models
|
|
7
8
|
*/
|
|
8
9
|
export declare class PlaywrightBrowsingSessionWithPage extends PlaywrightBrowsingSession {
|
|
9
10
|
protected readonly page: playwright.Page;
|
|
10
|
-
|
|
11
|
+
private readonly playwrightManagedPageId;
|
|
12
|
+
constructor(page: playwright.Page, browserContextOptions: PlaywrightOptions, selectors: playwright.Selectors);
|
|
13
|
+
protected registerCurrentPage(): Promise<PlaywrightPage>;
|
|
11
14
|
protected createBrowserContext(options: PlaywrightOptions): Promise<playwright.BrowserContext>;
|
|
15
|
+
/**
|
|
16
|
+
* Closes any newly opened pages, leaving only the original one managed by Playwright Test.
|
|
17
|
+
*/
|
|
18
|
+
closeAllPages(): Promise<void>;
|
|
12
19
|
browserCapabilities(): Promise<BrowserCapabilities>;
|
|
13
20
|
}
|
|
14
21
|
//# 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,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,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,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD;;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,iBAAiB,EACxC,SAAS,EAAE,UAAU,CAAC,SAAS;cAKV,mBAAmB,IAAI,OAAO,CAAC,cAAc,CAAC;cAU9C,oBAAoB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC;IAI7G;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAWrB,mBAAmB,IAAI,OAAO,CAAC,mBAAmB,CAAC;CAQrE"}
|
|
@@ -9,14 +9,32 @@ const PlaywrightPage_1 = require("./PlaywrightPage");
|
|
|
9
9
|
*/
|
|
10
10
|
class PlaywrightBrowsingSessionWithPage extends PlaywrightBrowsingSession_1.PlaywrightBrowsingSession {
|
|
11
11
|
page;
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
playwrightManagedPageId = model_1.CorrelationId.create();
|
|
13
|
+
constructor(page, browserContextOptions, selectors) {
|
|
14
|
+
super(browserContextOptions, selectors);
|
|
14
15
|
this.page = page;
|
|
15
|
-
|
|
16
|
+
}
|
|
17
|
+
async registerCurrentPage() {
|
|
18
|
+
await this.browserContext();
|
|
19
|
+
const playwrightPage = new PlaywrightPage_1.PlaywrightPage(this, this.page, this.browserContextOptions, this.playwrightManagedPageId);
|
|
20
|
+
this.register(playwrightPage);
|
|
21
|
+
return playwrightPage;
|
|
16
22
|
}
|
|
17
23
|
async createBrowserContext(options) {
|
|
18
24
|
return this.page.context();
|
|
19
25
|
}
|
|
26
|
+
/**
|
|
27
|
+
* Closes any newly opened pages, leaving only the original one managed by Playwright Test.
|
|
28
|
+
*/
|
|
29
|
+
async closeAllPages() {
|
|
30
|
+
for (const page of this.pages.values()) {
|
|
31
|
+
if (!page.id.equals(this.playwrightManagedPageId)) {
|
|
32
|
+
await page.close();
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
this.pages.clear();
|
|
36
|
+
this.currentBrowserPage = undefined;
|
|
37
|
+
}
|
|
20
38
|
async browserCapabilities() {
|
|
21
39
|
const browser = await this.page.context().browser();
|
|
22
40
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlaywrightBrowsingSessionWithPage.js","sourceRoot":"","sources":["../../../src/screenplay/models/PlaywrightBrowsingSessionWithPage.ts"],"names":[],"mappings":";;;AAAA,uDAA4D;AAK5D,2EAAwE;AACxE,qDAAkD;AAElD;;GAEG;AACH,MAAa,iCAAkC,SAAQ,qDAAyB;
|
|
1
|
+
{"version":3,"file":"PlaywrightBrowsingSessionWithPage.js","sourceRoot":"","sources":["../../../src/screenplay/models/PlaywrightBrowsingSessionWithPage.ts"],"names":[],"mappings":";;;AAAA,uDAA4D;AAK5D,2EAAwE;AACxE,qDAAkD;AAElD;;GAEG;AACH,MAAa,iCAAkC,SAAQ,qDAAyB;IAIrD;IAHN,uBAAuB,GAAkB,qBAAa,CAAC,MAAM,EAAE,CAAC;IAEjF,YACuB,IAAqB,EACxC,qBAAwC,EACxC,SAA+B;QAE/B,KAAK,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC;QAJrB,SAAI,GAAJ,IAAI,CAAiB;IAK5C,CAAC;IAEkB,KAAK,CAAC,mBAAmB;QACxC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAE5B,MAAM,cAAc,GAAG,IAAI,+BAAc,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,qBAAqB,EAAE,IAAI,CAAC,uBAAuB,CAAC,CAAC;QAErH,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QAE9B,OAAO,cAAc,CAAC;IAC1B,CAAC;IAEkB,KAAK,CAAC,oBAAoB,CAAC,OAA0B;QACpE,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa;QACf,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE;YACpC,IAAI,CAAE,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,EAAE;gBAChD,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;aACtB;SACJ;QAED,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnB,IAAI,CAAC,kBAAkB,GAAG,SAAS,CAAC;IACxC,CAAC;IAEQ,KAAK,CAAC,mBAAmB;QAC9B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC;QACpD,OAAO;YACH,WAAW,EAAG,OAAe,CAAC,YAAY,CAAC,IAAI;YAC/C,YAAY,EAAE,OAAO,CAAC,QAAQ;YAC9B,cAAc,EAAE,OAAO,CAAC,OAAO,EAAE;SACpC,CAAA;IACL,CAAC;CACJ;AA/CD,8EA+CC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlaywrightPage.d.ts","sourceRoot":"","sources":["../../../src/screenplay/models/PlaywrightPage.ts"],"names":[],"mappings":";AAAA,OAAO,EAAoB,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAE3E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"PlaywrightPage.d.ts","sourceRoot":"","sources":["../../../src/screenplay/models/PlaywrightPage.ts"],"names":[],"mappings":"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"}
|
|
@@ -102,8 +102,16 @@ class PlaywrightPage extends web_1.Page {
|
|
|
102
102
|
return this.lastScriptExecutionSummary.result;
|
|
103
103
|
}
|
|
104
104
|
async takeScreenshot() {
|
|
105
|
-
|
|
106
|
-
|
|
105
|
+
try {
|
|
106
|
+
const screenshot = await this.page.screenshot();
|
|
107
|
+
return screenshot.toString('base64');
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
if (error?.message.includes('Target page, context or browser has been closed')) {
|
|
111
|
+
throw new web_1.BrowserWindowClosedError(`Couldn't take screenshot since the browser window is already closed`, error);
|
|
112
|
+
}
|
|
113
|
+
throw error;
|
|
114
|
+
}
|
|
107
115
|
}
|
|
108
116
|
async cookie(name) {
|
|
109
117
|
return this.session.cookie(name);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlaywrightPage.js","sourceRoot":"","sources":["../../../src/screenplay/models/PlaywrightPage.ts"],"names":[],"mappings":";;;AAAA,4CAA2E;AAC3E,iDAAoD;AAGpD,
|
|
1
|
+
{"version":3,"file":"PlaywrightPage.js","sourceRoot":"","sources":["../../../src/screenplay/models/PlaywrightPage.ts"],"names":[],"mappings":";;;AAAA,4CAA2E;AAC3E,iDAAoD;AAGpD,0CAAuG;AAEvG,6BAA0B;AAG1B,0CAAuC;AACvC,yCAAwG;AAExG,iFAA8E;AAC9E,mEAAgE;AAEhE;;;;GAIG;AACH,MAAa,cAAe,SAAQ,UAAwB;IAUnC;IACA;IATb,0BAA0B,CAA6B;IAE/D,MAAM,CAAU,OAAO;QACnB,OAAO,KAAK,CAAC,OAAO,EAAqC,CAAC;IAC9D,CAAC;IAED,YACI,OAAkC,EACjB,IAAqB,EACrB,OAA0B,EAC3C,MAAqB;QAErB,KAAK,CACD,OAAO,EACP,IAAI,gCAAqB,CAAC,IAAI,CAAC,EAC/B,IAAI,2DAA4B,CAAC,IAAI,CAAC,EACtC,MAAM,CACT,CAAC;QATe,SAAI,GAAJ,IAAI,CAAiB;QACrB,YAAO,GAAP,OAAO,CAAmB;IAS/C,CAAC;IAED,iBAAiB,CAAC,aAAiC;QAC/C,OAAO,IAAI,6CAAqB,CAC5B,IAAI,2CAAgC,CAChC,IAAI,CAAC,WAAW,EAChB,IAAI,eAAS,CAAE,aAAqB,CAAC,SAAS,CAAC,EAC/C,aAAa,CAChB,CACJ,CAAC;IACN,CAAC;IAED,MAAM,CAAC,QAAkB;QACrB,OAAO,IAAI,6CAAqB,CAC5B,IAAI,4BAAiB,CACjB,IAAI,CAAC,WAAW,EAChB,QAAQ,CACX,CACJ,CAAC;IACN,CAAC;IAED,SAAS,CAAC,QAAkB;QACxB,OAAO,WAAI,CAAC,EAAE,CACV,IAAI,yBAAmB,CACnB,IAAI,4BAAiB,CACjB,IAAI,CAAC,WAAW,EAChB,QAAQ,CACX,CACJ,CACJ,CAAC;IACN,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,WAAmB;QAChC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,0BAA0B,EAAE,CAAC,CAAC;QAC3F,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,YAAY;QACd,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,0BAA0B,EAAE,CAAC,CAAC;QAChF,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,eAAe;QACjB,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,0BAA0B,EAAE,CAAC,CAAC;QACnF,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,MAAM;QACR,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,0BAA0B,EAAE,CAAC,CAAC;QAChF,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,IAAsB;QACjC,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YAC/B,IAAI,CAAE,SAAG,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;gBAClB,OAAO,GAAG,CAAC;aACd;YAED,OAAO,GAAG,CAAC,YAAY,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAC1B,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CACxB,CAAC;IACN,CAAC;IAED,KAAK,CAAC,aAAa,CAAuC,MAA4D,EAAE,GAAG,IAAoB;QAE3I,MAAM,eAAe,GAAG,MAAM,IAAA,aAAQ,EAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAChD,IAAI,YAAY,6CAAqB;YACjC,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;YAC/D,CAAC,CAAC,IAAI,CACK,CAAC;QAEpB,MAAM,gBAAgB,GAAG,OAAO,MAAM,KAAK,UAAU;YACjD,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;YAChB,CAAC,CAAC,MAAM,CAAC,uBAAwB,MAAO,IAAI,CAAC,CAAC;QAElD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CACnC,IAAI,QAAQ,CAAC;;0BAEE,gBAAiB;aAC/B,CAA6C,EAC9C,eAAe,CAClB,CAAC;QAEF,IAAI,CAAC,0BAA0B,GAAG,IAAI,0BAA0B,CAC5D,MAAM,CACT,CAAC;QAEF,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAuC,MAAyG,EAAE,GAAG,IAAoB;QAE7L,MAAM,eAAe,GAAG,MAAM,IAAA,aAAQ,EAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAChD,IAAI,YAAY,6CAAqB;YACjC,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;YAC/D,CAAC,CAAC,IAAI,CACK,CAAC;QAEpB,MAAM,gBAAgB,GAAG,OAAO,MAAM,KAAK,UAAU;YACjD,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;YAChB,CAAC,CAAC,MAAM,CAAC,uBAAwB,MAAO,IAAI,CAAC,CAAC;QAElD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CACnC,IAAI,QAAQ,CAAC;;;;;kCAKU,gBAAiB;;;;;aAKvC,CAA6C,EAC9C,eAAe,CAClB,CAAC;QAEF,IAAI,CAAC,0BAA0B,GAAG,IAAI,0BAA0B,CAC5D,MAAM,CACT,CAAC;QAEF,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,yBAAyB;QACrB,IAAI,CAAE,IAAI,CAAC,0BAA0B,EAAE;YACnC,MAAM,IAAI,iBAAU,CAAC,6DAA6D,CAAC,CAAC;SACvF;QAED,OAAO,IAAI,CAAC,0BAA0B,CAAC,MAAgB,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,cAAc;QAChB,IAAI;YACA,MAAM,UAAU,GAAW,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YAExD,OAAO,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;SACxC;QACD,OAAM,KAAK,EAAE;YAET,IAAI,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,iDAAiD,CAAC,EAAE;gBAC5E,MAAM,IAAI,8BAAwB,CAC9B,qEAAqE,EACrE,KAAK,CACR,CAAC;aACL;YAED,MAAM,KAAK,CAAC;SACf;IACL,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAY;QACrB,OAAQ,IAAI,CAAC,OAAqC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,UAAsB;QAClC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QAElC,MAAM,MAAM,GAAG;YACX,IAAI,EAAQ,UAAU,CAAC,IAAI;YAC3B,KAAK,EAAO,UAAU,CAAC,KAAK;YAC5B,MAAM,EAAM,UAAU,CAAC,MAAM;YAC7B,IAAI,EAAQ,UAAU,CAAC,IAAI;YAC3B,GAAG,EAAS,CAAC,CAAC,UAAU,CAAC,MAAM,IAAI,UAAU,CAAC,IAAI,CAAC,CAAK,mDAAmD;gBACvG,CAAC,CAAC,GAAG;gBACL,CAAC,CAAC,SAAS;YACf,MAAM,EAAM,UAAU,CAAC,MAAM;YAC7B,QAAQ,EAAI,UAAU,CAAC,QAAQ;YAC/B,OAAO,EAAK,UAAU,CAAC,MAAM;gBACzB,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE;gBAC/B,CAAC,CAAC,SAAS;YACf,QAAQ,EAAI,UAAU,CAAC,QAAQ;SAClC,CAAC;QAEF,OAAQ,IAAI,CAAC,OAAqC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACzE,CAAC;IAED,KAAK,CAAC,gBAAgB;QAClB,MAAO,IAAI,CAAC,OAAqC,CAAC,gBAAgB,EAAE,CAAC;IACzE,CAAC;IAED,KAAK,CAAC,KAAK;QACP,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAC/C,OAAO,YAAY,CAAC,KAAK,EAAE,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,IAAI;QACN,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAC/C,OAAO,YAAY,CAAC,QAAQ,CACxB,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CACpB,CAAC;IACN,CAAC;IAED,KAAK,CAAC,GAAG;QACL,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAC/C,OAAO,IAAI,SAAG,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,YAAY;QACd,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,IAAuC;QACzD,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,KAAK;QACP,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACxB,MAAO,IAAI,CAAC,kBAAmD,CAAC,OAAO,EAAE,CAAC;QAC1E,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,WAAW;QACb,MAAM,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACjD,CAAC;IAED,SAAS;QACL,OAAO,IAAA,mBAAQ,EAAC,CAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,UAAU;QACZ,OAAO,IAAA,mBAAQ,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAEO,KAAK,CAAC,UAAU;QACpB,IAAI,CAAC,0BAA0B,GAAG,SAAS,CAAC;QAC5C,MAAM,IAAI,CAAC,WAAW,CAAC,iBAAiB,EAAE,CAAA;QAC1C,MAAM,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC;IAC1C,CAAC;IAEO,KAAK,CAAC,YAAY;QACtB,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,aAAa,EAAiC,CAAC;IACjF,CAAC;CACJ;AAhQD,wCAgQC;AAED;;GAEG;AACH,MAAM,0BAA0B;IACA;IAA5B,YAA4B,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;IAAG,CAAC;CACjD"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@serenity-js/playwright",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.15.0",
|
|
4
4
|
"description": "Serenity/JS Screenplay Pattern library for Playwright",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Jan Molak",
|
|
@@ -44,8 +44,8 @@
|
|
|
44
44
|
"node": "^16.13 || ^18.12 || ^20"
|
|
45
45
|
},
|
|
46
46
|
"dependencies": {
|
|
47
|
-
"@serenity-js/core": "3.
|
|
48
|
-
"@serenity-js/web": "3.
|
|
47
|
+
"@serenity-js/core": "3.15.0",
|
|
48
|
+
"@serenity-js/web": "3.15.0",
|
|
49
49
|
"playwright-core": "1.40.1",
|
|
50
50
|
"tiny-types": "1.21.0"
|
|
51
51
|
},
|
|
@@ -53,11 +53,11 @@
|
|
|
53
53
|
"@integration/testing-tools": "3.0.0",
|
|
54
54
|
"@types/chai": "4.3.11",
|
|
55
55
|
"@types/mocha": "10.0.6",
|
|
56
|
-
"c8": "
|
|
56
|
+
"c8": "9.0.0",
|
|
57
57
|
"mocha": "10.2.0",
|
|
58
58
|
"mocha-multi": "1.1.7",
|
|
59
59
|
"ts-node": "10.9.2",
|
|
60
60
|
"typescript": "5.1.6"
|
|
61
61
|
},
|
|
62
|
-
"gitHead": "
|
|
62
|
+
"gitHead": "f3580d6b6380e9f175544929b9504a85c1d204ad"
|
|
63
63
|
}
|
|
@@ -108,7 +108,7 @@ export class BrowseTheWebWithPlaywright extends BrowseTheWeb<playwright.Locator>
|
|
|
108
108
|
}
|
|
109
109
|
|
|
110
110
|
static usingPage(page: playwright.Page, options?: PlaywrightOptions): BrowseTheWebWithPlaywright {
|
|
111
|
-
return new BrowseTheWebWithPlaywright(new PlaywrightBrowsingSessionWithPage(page, options));
|
|
111
|
+
return new BrowseTheWebWithPlaywright(new PlaywrightBrowsingSessionWithPage(page, options, playwright.selectors));
|
|
112
112
|
}
|
|
113
113
|
|
|
114
114
|
/**
|
|
@@ -4,6 +4,7 @@ import { BrowsingSession, type Cookie, type CookieData } from '@serenity-js/web'
|
|
|
4
4
|
import type * as playwright from 'playwright-core';
|
|
5
5
|
|
|
6
6
|
import { type PlaywrightOptions } from '../../PlaywrightOptions';
|
|
7
|
+
import { SerenitySelectorEngines } from '../../selector-engines';
|
|
7
8
|
import { PlaywrightCookie, PlaywrightPage } from '../models';
|
|
8
9
|
|
|
9
10
|
/**
|
|
@@ -13,9 +14,13 @@ import { PlaywrightCookie, PlaywrightPage } from '../models';
|
|
|
13
14
|
*/
|
|
14
15
|
export abstract class PlaywrightBrowsingSession extends BrowsingSession<PlaywrightPage> {
|
|
15
16
|
|
|
17
|
+
protected readonly serenitySelectorEngines = new SerenitySelectorEngines();
|
|
16
18
|
private currentPlaywrightBrowserContext: playwright.BrowserContext;
|
|
17
19
|
|
|
18
|
-
protected constructor(
|
|
20
|
+
protected constructor(
|
|
21
|
+
protected readonly browserContextOptions: PlaywrightOptions,
|
|
22
|
+
protected readonly selectors: playwright.Selectors
|
|
23
|
+
) {
|
|
19
24
|
super();
|
|
20
25
|
}
|
|
21
26
|
|
|
@@ -44,22 +49,9 @@ export abstract class PlaywrightBrowsingSession extends BrowsingSession<Playwrig
|
|
|
44
49
|
await context.clearCookies();
|
|
45
50
|
}
|
|
46
51
|
|
|
47
|
-
protected override async registerCurrentPage(): Promise<PlaywrightPage> {
|
|
48
|
-
const context = await this.browserContext();
|
|
49
|
-
|
|
50
|
-
await context.newPage();
|
|
51
|
-
|
|
52
|
-
// calling context.newPage() triggers a callback registered via browserContext(),
|
|
53
|
-
// which wraps playwright.Page in PlaywrightPage and adds it to the list of pages
|
|
54
|
-
// returned by this.allPages()
|
|
55
|
-
|
|
56
|
-
const allPages = await this.allPages()
|
|
57
|
-
|
|
58
|
-
return allPages.at(-1);
|
|
59
|
-
}
|
|
60
|
-
|
|
61
52
|
protected async browserContext(): Promise<playwright.BrowserContext> {
|
|
62
53
|
if (! this.currentPlaywrightBrowserContext) {
|
|
54
|
+
await this.serenitySelectorEngines.ensureRegisteredWith(this.selectors);
|
|
63
55
|
this.currentPlaywrightBrowserContext = await this.createBrowserContext(this.browserContextOptions);
|
|
64
56
|
|
|
65
57
|
this.currentPlaywrightBrowserContext.on('page', async page => {
|
|
@@ -2,29 +2,40 @@ import type { BrowserCapabilities } from '@serenity-js/web';
|
|
|
2
2
|
import type * as playwright from 'playwright-core';
|
|
3
3
|
|
|
4
4
|
import type { PlaywrightOptions } from '../../PlaywrightOptions';
|
|
5
|
-
import { SerenitySelectorEngines } from '../../selector-engines';
|
|
6
5
|
import { PlaywrightBrowsingSession } from './PlaywrightBrowsingSession';
|
|
6
|
+
import type { PlaywrightPage } from './PlaywrightPage';
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* @group Models
|
|
10
10
|
*/
|
|
11
11
|
export class PlaywrightBrowsingSessionWithBrowser extends PlaywrightBrowsingSession {
|
|
12
|
-
private readonly serenitySelectorEngines = new SerenitySelectorEngines();
|
|
13
12
|
|
|
14
13
|
constructor(
|
|
15
14
|
protected readonly browser: playwright.Browser,
|
|
16
15
|
browserContextOptions: PlaywrightOptions,
|
|
17
|
-
|
|
16
|
+
selectors: playwright.Selectors,
|
|
18
17
|
) {
|
|
19
|
-
super(browserContextOptions);
|
|
18
|
+
super(browserContextOptions, selectors);
|
|
20
19
|
}
|
|
21
20
|
|
|
22
21
|
protected override async createBrowserContext(options: PlaywrightOptions): Promise<playwright.BrowserContext> {
|
|
23
|
-
await this.serenitySelectorEngines.ensureRegisteredWith(this.selectors);
|
|
24
|
-
|
|
25
22
|
return this.browser.newContext(this.browserContextOptions);
|
|
26
23
|
}
|
|
27
24
|
|
|
25
|
+
protected override async registerCurrentPage(): Promise<PlaywrightPage> {
|
|
26
|
+
const context = await this.browserContext();
|
|
27
|
+
|
|
28
|
+
await context.newPage();
|
|
29
|
+
|
|
30
|
+
// calling context.newPage() triggers a callback registered via browserContext(),
|
|
31
|
+
// which wraps playwright.Page in PlaywrightPage and adds it to the list of pages
|
|
32
|
+
// returned by this.allPages()
|
|
33
|
+
|
|
34
|
+
const allPages = await this.allPages()
|
|
35
|
+
|
|
36
|
+
return allPages.at(-1);
|
|
37
|
+
}
|
|
38
|
+
|
|
28
39
|
override async closeAllPages(): Promise<void> {
|
|
29
40
|
await super.closeAllPages();
|
|
30
41
|
|
|
@@ -10,18 +10,44 @@ import { PlaywrightPage } from './PlaywrightPage';
|
|
|
10
10
|
* @group Models
|
|
11
11
|
*/
|
|
12
12
|
export class PlaywrightBrowsingSessionWithPage extends PlaywrightBrowsingSession {
|
|
13
|
+
private readonly playwrightManagedPageId: CorrelationId = CorrelationId.create();
|
|
14
|
+
|
|
13
15
|
constructor(
|
|
14
16
|
protected readonly page: playwright.Page,
|
|
15
17
|
browserContextOptions: PlaywrightOptions,
|
|
18
|
+
selectors: playwright.Selectors,
|
|
16
19
|
) {
|
|
17
|
-
super(browserContextOptions);
|
|
18
|
-
|
|
20
|
+
super(browserContextOptions, selectors);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
protected override async registerCurrentPage(): Promise<PlaywrightPage> {
|
|
24
|
+
await this.browserContext();
|
|
25
|
+
|
|
26
|
+
const playwrightPage = new PlaywrightPage(this, this.page, this.browserContextOptions, this.playwrightManagedPageId);
|
|
27
|
+
|
|
28
|
+
this.register(playwrightPage);
|
|
29
|
+
|
|
30
|
+
return playwrightPage;
|
|
19
31
|
}
|
|
20
32
|
|
|
21
33
|
protected override async createBrowserContext(options: PlaywrightOptions): Promise<playwright.BrowserContext> {
|
|
22
34
|
return this.page.context();
|
|
23
35
|
}
|
|
24
36
|
|
|
37
|
+
/**
|
|
38
|
+
* Closes any newly opened pages, leaving only the original one managed by Playwright Test.
|
|
39
|
+
*/
|
|
40
|
+
async closeAllPages(): Promise<void> {
|
|
41
|
+
for (const page of this.pages.values()) {
|
|
42
|
+
if (! page.id.equals(this.playwrightManagedPageId)) {
|
|
43
|
+
await page.close();
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
this.pages.clear();
|
|
48
|
+
this.currentBrowserPage = undefined;
|
|
49
|
+
}
|
|
50
|
+
|
|
25
51
|
override async browserCapabilities(): Promise<BrowserCapabilities> {
|
|
26
52
|
const browser = await this.page.context().browser();
|
|
27
53
|
return {
|
|
@@ -31,4 +57,3 @@ export class PlaywrightBrowsingSessionWithPage extends PlaywrightBrowsingSession
|
|
|
31
57
|
}
|
|
32
58
|
}
|
|
33
59
|
}
|
|
34
|
-
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { List, LogicError, type QuestionAdapter } from '@serenity-js/core';
|
|
2
2
|
import { asyncMap } from '@serenity-js/core/lib/io';
|
|
3
3
|
import type { CorrelationId } from '@serenity-js/core/lib/model';
|
|
4
|
-
import type { Cookie, CookieData, PageElement, PageElements,Selector } from '@serenity-js/web';
|
|
5
|
-
import { ByDeepCss, Key, Page, PageElementsLocator } from '@serenity-js/web';
|
|
4
|
+
import type { Cookie, CookieData, PageElement, PageElements, Selector } from '@serenity-js/web';
|
|
5
|
+
import { BrowserWindowClosedError, ByDeepCss, Key, Page, PageElementsLocator } from '@serenity-js/web';
|
|
6
6
|
import type * as playwright from 'playwright-core';
|
|
7
7
|
import { URL } from 'url';
|
|
8
8
|
|
|
@@ -174,9 +174,22 @@ export class PlaywrightPage extends Page<playwright.Locator> {
|
|
|
174
174
|
}
|
|
175
175
|
|
|
176
176
|
async takeScreenshot(): Promise<string> {
|
|
177
|
-
|
|
177
|
+
try {
|
|
178
|
+
const screenshot: Buffer = await this.page.screenshot();
|
|
178
179
|
|
|
179
|
-
|
|
180
|
+
return screenshot.toString('base64');
|
|
181
|
+
}
|
|
182
|
+
catch(error) {
|
|
183
|
+
|
|
184
|
+
if (error?.message.includes('Target page, context or browser has been closed')) {
|
|
185
|
+
throw new BrowserWindowClosedError(
|
|
186
|
+
`Couldn't take screenshot since the browser window is already closed`,
|
|
187
|
+
error
|
|
188
|
+
);
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
throw error;
|
|
192
|
+
}
|
|
180
193
|
}
|
|
181
194
|
|
|
182
195
|
async cookie(name: string): Promise<Cookie> {
|