@serenity-js/playwright 3.5.0 → 3.6.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.
Files changed (37) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/lib/screenplay/abilities/BrowseTheWebWithPlaywright.d.ts +58 -11
  3. package/lib/screenplay/abilities/BrowseTheWebWithPlaywright.d.ts.map +1 -1
  4. package/lib/screenplay/abilities/BrowseTheWebWithPlaywright.js +60 -18
  5. package/lib/screenplay/abilities/BrowseTheWebWithPlaywright.js.map +1 -1
  6. package/lib/screenplay/models/PlaywrightBrowsingSession.d.ts +14 -10
  7. package/lib/screenplay/models/PlaywrightBrowsingSession.d.ts.map +1 -1
  8. package/lib/screenplay/models/PlaywrightBrowsingSession.js +11 -20
  9. package/lib/screenplay/models/PlaywrightBrowsingSession.js.map +1 -1
  10. package/lib/screenplay/models/PlaywrightBrowsingSessionWithBrowser.d.ts +12 -0
  11. package/lib/screenplay/models/PlaywrightBrowsingSessionWithBrowser.d.ts.map +1 -0
  12. package/lib/screenplay/models/PlaywrightBrowsingSessionWithBrowser.js +27 -0
  13. package/lib/screenplay/models/PlaywrightBrowsingSessionWithBrowser.js.map +1 -0
  14. package/lib/screenplay/models/PlaywrightBrowsingSessionWithPage.d.ts +11 -0
  15. package/lib/screenplay/models/PlaywrightBrowsingSessionWithPage.d.ts.map +1 -0
  16. package/lib/screenplay/models/PlaywrightBrowsingSessionWithPage.js +26 -0
  17. package/lib/screenplay/models/PlaywrightBrowsingSessionWithPage.js.map +1 -0
  18. package/lib/screenplay/models/PlaywrightPage.d.ts +2 -1
  19. package/lib/screenplay/models/PlaywrightPage.d.ts.map +1 -1
  20. package/lib/screenplay/models/PlaywrightPage.js +3 -0
  21. package/lib/screenplay/models/PlaywrightPage.js.map +1 -1
  22. package/lib/screenplay/models/index.d.ts +2 -0
  23. package/lib/screenplay/models/index.d.ts.map +1 -1
  24. package/lib/screenplay/models/index.js +2 -0
  25. package/lib/screenplay/models/index.js.map +1 -1
  26. package/lib/screenplay/models/locators/PlaywrightLocator.d.ts +9 -0
  27. package/lib/screenplay/models/locators/PlaywrightLocator.d.ts.map +1 -1
  28. package/lib/screenplay/models/locators/PlaywrightLocator.js +5 -4
  29. package/lib/screenplay/models/locators/PlaywrightLocator.js.map +1 -1
  30. package/package.json +5 -5
  31. package/src/screenplay/abilities/BrowseTheWebWithPlaywright.ts +64 -20
  32. package/src/screenplay/models/PlaywrightBrowsingSession.ts +29 -31
  33. package/src/screenplay/models/PlaywrightBrowsingSessionWithBrowser.ts +33 -0
  34. package/src/screenplay/models/PlaywrightBrowsingSessionWithPage.ts +31 -0
  35. package/src/screenplay/models/PlaywrightPage.ts +13 -4
  36. package/src/screenplay/models/index.ts +2 -0
  37. package/src/screenplay/models/locators/PlaywrightLocator.ts +3 -3
package/CHANGELOG.md CHANGED
@@ -3,6 +3,23 @@
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.6.0](https://github.com/serenity-js/serenity-js/compare/v3.5.0...v3.6.0) (2023-07-11)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * **deps:** update dependency tiny-types to ^1.20.0 ([6d7bf43](https://github.com/serenity-js/serenity-js/commit/6d7bf43c6135968bc90869cb8f9782ed70ca8dd9))
12
+
13
+
14
+ ### Features
15
+
16
+ * **playwright-test:** enable BrowseTheWebWithPlaywright to reuse an existing page instance ([5c2deb1](https://github.com/serenity-js/serenity-js/commit/5c2deb1853f27884fcdaccccc0b1b108c0a8489b)), closes [#1784](https://github.com/serenity-js/serenity-js/issues/1784)
17
+ * **web:** you can now use Serenity/JS Screenplay Pattern APIs for UI component testing ([3c9aa4b](https://github.com/serenity-js/serenity-js/commit/3c9aa4b16d223844116ffcb21d23f9cc8b96a793)), closes [#1784](https://github.com/serenity-js/serenity-js/issues/1784)
18
+
19
+
20
+
21
+
22
+
6
23
  # [3.5.0](https://github.com/serenity-js/serenity-js/compare/v3.4.2...v3.5.0) (2023-07-02)
7
24
 
8
25
 
@@ -1,5 +1,4 @@
1
1
  import type { Discardable } from '@serenity-js/core';
2
- import type { BrowserCapabilities } from '@serenity-js/web';
3
2
  import { BrowseTheWeb } from '@serenity-js/web';
4
3
  import type * as playwright from 'playwright-core';
5
4
  import type { PlaywrightOptions } from '../../PlaywrightOptions';
@@ -9,6 +8,14 @@ import type { PlaywrightOptions } from '../../PlaywrightOptions';
9
8
  *
10
9
  * ## Using Playwright to `BrowseTheWeb`
11
10
  *
11
+ * In the example below, we configure the ability to {@apilink BrowseTheWebWithPlaywright} with a Playwright
12
+ * [`Browser`](https://playwright.dev/docs/api/class-browser) so that Serenity/JS {@apilink Actor|actors}
13
+ * can create a new [`BrowserContext`](https://playwright.dev/docs/api/class-browsercontext) and
14
+ * instantiate Playwright [`page`s](https://playwright.dev/docs/api/class-page) as and when needed.
15
+ *
16
+ * This configuration allows Serenity/JS to control the process of launching and shutting down browser instances
17
+ * and is useful when your test runner, e.g. [Cucumber.js](/api/cucumber), doesn't offer this functionality.
18
+ *
12
19
  * ```ts
13
20
  * import { actorCalled } from '@serenity-js/core'
14
21
  * import { BrowseTheWebWithPlaywright } from '@serenity-js/playwright'
@@ -31,6 +38,55 @@ import type { PlaywrightOptions } from '../../PlaywrightOptions';
31
38
  * )
32
39
  * ```
33
40
  *
41
+ * ## Using `BrowseTheWeb` with an existing Playwright `page`
42
+ *
43
+ * Test runners like [Playwright Test](/api/playwright-test/) manage Playwright browsers for you
44
+ * and offer a [`page`](https://playwright.dev/docs/api/class-page) instance you can
45
+ * inject into the ability to {@apilink BrowseTheWebWithPlaywright}.
46
+ *
47
+ * Note that [Serenity/JS Playwright Test module](/api/playwright-test/)
48
+ * automatically configures all your {@apilink Actor|actors}
49
+ * with an ability to {@apilink BrowseTheWebWithPlaywright},
50
+ * so you don't need to do it by hand unless you want to override the {@apilink SerenityOptions|default configuration}.
51
+ *
52
+ * The example below demonstrates how to use the {@apilink BrowseTheWebWithPlaywright.usingPage} API and
53
+ * override the default {@apilink Cast} of actors.
54
+ *
55
+ * ```ts title="specs/example.spec.ts"
56
+ * import { describe, it, test } from '@playwright/playwright-test'
57
+ * import { BrowseTheWebWithPlaywright } from '@serenity-js/playwright'
58
+ * import { By, Navigate, PageElement, Text } from '@serenity-js/web'
59
+ * import { Ensure, equals } from '@serenity-js/assertions'
60
+ *
61
+ * const HomePage = {
62
+ * title: () =>
63
+ * PageElement.located(By.css('h1')).describedAs('title')
64
+ * }
65
+ *
66
+ * describe('Serenity/JS with Playwright', () => {
67
+ *
68
+ * test.use({
69
+ * actors: async ({ page, contextOptions }, use) => {
70
+ * await use(
71
+ * Cast.where((actorName: string) => {
72
+ * return actor.whoCan(
73
+ * BrowseTheWebWithPlaywright.usingPage(page),
74
+ * // ... add any other abilities
75
+ * )
76
+ * })
77
+ * )
78
+ * }
79
+ * })
80
+ *
81
+ * it('lets you reuse an existing page', async ({ actor }) => {
82
+ * await actor.attemptsTo(
83
+ * Navigate.to(`https://serenity-js.org`),
84
+ * Ensure.that(Text.of(HomePage.title()), equals('Serenity/JS')),
85
+ * )
86
+ * })
87
+ * })
88
+ * ```
89
+ *
34
90
  * ## Learn more
35
91
  * - [Playwright website](https://playwright.dev/)
36
92
  * - {@apilink BrowseTheWeb}
@@ -40,9 +96,8 @@ import type { PlaywrightOptions } from '../../PlaywrightOptions';
40
96
  * @group Abilities
41
97
  */
42
98
  export declare class BrowseTheWebWithPlaywright extends BrowseTheWeb<playwright.Locator> implements Discardable {
43
- protected readonly browser: playwright.Browser;
44
99
  static using(browser: playwright.Browser, options?: PlaywrightOptions): BrowseTheWebWithPlaywright;
45
- constructor(browser: playwright.Browser, browserContextOptions?: PlaywrightOptions);
100
+ static usingPage(page: playwright.Page, options?: PlaywrightOptions): BrowseTheWebWithPlaywright;
46
101
  /**
47
102
  * Automatically closes any open {@apilink Page|Pages} when the {@apilink SceneFinishes}
48
103
  *
@@ -51,13 +106,5 @@ export declare class BrowseTheWebWithPlaywright extends BrowseTheWeb<playwright.
51
106
  * - {@apilink Discardable}
52
107
  */
53
108
  discard(): Promise<void>;
54
- /**
55
- * Returns {@apilink BrowserCapabilities|basic meta-data} about the browser associated with this ability.
56
- *
57
- * **Please note** that since Playwright does not expose information about the operating system
58
- * the tests are running on, **Serenity/JS assumes that the tests are running locally**
59
- * and therefore returns the value of Node.js `process.platform` for `platformName`.
60
- */
61
- browserCapabilities(): Promise<BrowserCapabilities>;
62
109
  }
63
110
  //# sourceMappingURL=BrowseTheWebWithPlaywright.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"BrowseTheWebWithPlaywright.d.ts","sourceRoot":"","sources":["../../../src/screenplay/abilities/BrowseTheWebWithPlaywright.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAC,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,KAAK,UAAU,MAAM,iBAAiB,CAAC;AAEnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAGjE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,qBAAa,0BAA2B,SAAQ,YAAY,CAAC,UAAU,CAAC,OAAO,CAAE,YAAW,WAAW;IAMvF,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO;IAJ1D,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,0BAA0B;gBAInE,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,qBAAqB,GAAE,iBAAsB;IAIzG;;;;;;OAMG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B;;;;;;OAMG;IACG,mBAAmB,IAAI,OAAO,CAAC,mBAAmB,CAAC;CAO5D"}
1
+ {"version":3,"file":"BrowseTheWebWithPlaywright.d.ts","sourceRoot":"","sources":["../../../src/screenplay/abilities/BrowseTheWebWithPlaywright.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,KAAK,UAAU,MAAM,iBAAiB,CAAC;AAEnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAMjE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4FG;AACH,qBAAa,0BAA2B,SAAQ,YAAY,CAAC,UAAU,CAAC,OAAO,CAAE,YAAW,WAAW;IAEnG,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,0BAA0B;IAIlG,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,0BAA0B;IAIhG;;;;;;OAMG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAGjC"}
@@ -9,6 +9,14 @@ const models_1 = require("../models");
9
9
  *
10
10
  * ## Using Playwright to `BrowseTheWeb`
11
11
  *
12
+ * In the example below, we configure the ability to {@apilink BrowseTheWebWithPlaywright} with a Playwright
13
+ * [`Browser`](https://playwright.dev/docs/api/class-browser) so that Serenity/JS {@apilink Actor|actors}
14
+ * can create a new [`BrowserContext`](https://playwright.dev/docs/api/class-browsercontext) and
15
+ * instantiate Playwright [`page`s](https://playwright.dev/docs/api/class-page) as and when needed.
16
+ *
17
+ * This configuration allows Serenity/JS to control the process of launching and shutting down browser instances
18
+ * and is useful when your test runner, e.g. [Cucumber.js](/api/cucumber), doesn't offer this functionality.
19
+ *
12
20
  * ```ts
13
21
  * import { actorCalled } from '@serenity-js/core'
14
22
  * import { BrowseTheWebWithPlaywright } from '@serenity-js/playwright'
@@ -31,6 +39,55 @@ const models_1 = require("../models");
31
39
  * )
32
40
  * ```
33
41
  *
42
+ * ## Using `BrowseTheWeb` with an existing Playwright `page`
43
+ *
44
+ * Test runners like [Playwright Test](/api/playwright-test/) manage Playwright browsers for you
45
+ * and offer a [`page`](https://playwright.dev/docs/api/class-page) instance you can
46
+ * inject into the ability to {@apilink BrowseTheWebWithPlaywright}.
47
+ *
48
+ * Note that [Serenity/JS Playwright Test module](/api/playwright-test/)
49
+ * automatically configures all your {@apilink Actor|actors}
50
+ * with an ability to {@apilink BrowseTheWebWithPlaywright},
51
+ * so you don't need to do it by hand unless you want to override the {@apilink SerenityOptions|default configuration}.
52
+ *
53
+ * The example below demonstrates how to use the {@apilink BrowseTheWebWithPlaywright.usingPage} API and
54
+ * override the default {@apilink Cast} of actors.
55
+ *
56
+ * ```ts title="specs/example.spec.ts"
57
+ * import { describe, it, test } from '@playwright/playwright-test'
58
+ * import { BrowseTheWebWithPlaywright } from '@serenity-js/playwright'
59
+ * import { By, Navigate, PageElement, Text } from '@serenity-js/web'
60
+ * import { Ensure, equals } from '@serenity-js/assertions'
61
+ *
62
+ * const HomePage = {
63
+ * title: () =>
64
+ * PageElement.located(By.css('h1')).describedAs('title')
65
+ * }
66
+ *
67
+ * describe('Serenity/JS with Playwright', () => {
68
+ *
69
+ * test.use({
70
+ * actors: async ({ page, contextOptions }, use) => {
71
+ * await use(
72
+ * Cast.where((actorName: string) => {
73
+ * return actor.whoCan(
74
+ * BrowseTheWebWithPlaywright.usingPage(page),
75
+ * // ... add any other abilities
76
+ * )
77
+ * })
78
+ * )
79
+ * }
80
+ * })
81
+ *
82
+ * it('lets you reuse an existing page', async ({ actor }) => {
83
+ * await actor.attemptsTo(
84
+ * Navigate.to(`https://serenity-js.org`),
85
+ * Ensure.that(Text.of(HomePage.title()), equals('Serenity/JS')),
86
+ * )
87
+ * })
88
+ * })
89
+ * ```
90
+ *
34
91
  * ## Learn more
35
92
  * - [Playwright website](https://playwright.dev/)
36
93
  * - {@apilink BrowseTheWeb}
@@ -41,11 +98,10 @@ const models_1 = require("../models");
41
98
  */
42
99
  class BrowseTheWebWithPlaywright extends web_1.BrowseTheWeb {
43
100
  static using(browser, options) {
44
- return new BrowseTheWebWithPlaywright(browser, options);
101
+ return new BrowseTheWebWithPlaywright(new models_1.PlaywrightBrowsingSessionWithBrowser(browser, options));
45
102
  }
46
- constructor(browser, browserContextOptions = {}) {
47
- super(new models_1.PlaywrightBrowsingSession(browser, browserContextOptions));
48
- this.browser = browser;
103
+ static usingPage(page, options) {
104
+ return new BrowseTheWebWithPlaywright(new models_1.PlaywrightBrowsingSessionWithPage(page, options));
49
105
  }
50
106
  /**
51
107
  * Automatically closes any open {@apilink Page|Pages} when the {@apilink SceneFinishes}
@@ -57,20 +113,6 @@ class BrowseTheWebWithPlaywright extends web_1.BrowseTheWeb {
57
113
  async discard() {
58
114
  await this.session.closeAllPages();
59
115
  }
60
- /**
61
- * Returns {@apilink BrowserCapabilities|basic meta-data} about the browser associated with this ability.
62
- *
63
- * **Please note** that since Playwright does not expose information about the operating system
64
- * the tests are running on, **Serenity/JS assumes that the tests are running locally**
65
- * and therefore returns the value of Node.js `process.platform` for `platformName`.
66
- */
67
- async browserCapabilities() {
68
- return {
69
- browserName: this.browser._initializer.name,
70
- platformName: process.platform,
71
- browserVersion: this.browser.version()
72
- };
73
- }
74
116
  }
75
117
  exports.BrowseTheWebWithPlaywright = BrowseTheWebWithPlaywright;
76
118
  //# sourceMappingURL=BrowseTheWebWithPlaywright.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BrowseTheWebWithPlaywright.js","sourceRoot":"","sources":["../../../src/screenplay/abilities/BrowseTheWebWithPlaywright.ts"],"names":[],"mappings":";;;AAEA,0CAAgD;AAIhD,sCAAsD;AAEtD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,MAAa,0BAA2B,SAAQ,kBAAgC;IAE5E,MAAM,CAAC,KAAK,CAAC,OAA2B,EAAE,OAA2B;QACjE,OAAO,IAAI,0BAA0B,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC5D,CAAC;IAED,YAA+B,OAA2B,EAAE,wBAA2C,EAAE;QACrG,KAAK,CAAC,IAAI,kCAAyB,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC,CAAC;QAD1C,YAAO,GAAP,OAAO,CAAoB;IAE1D,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,OAAO;QACT,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;IACvC,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,mBAAmB;QACrB,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;AAnCD,gEAmCC"}
1
+ {"version":3,"file":"BrowseTheWebWithPlaywright.js","sourceRoot":"","sources":["../../../src/screenplay/abilities/BrowseTheWebWithPlaywright.ts"],"names":[],"mappings":";;;AACA,0CAAgD;AAIhD,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,CAAC,CAAC,CAAC;IACtG,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,IAAqB,EAAE,OAA2B;QAC/D,OAAO,IAAI,0BAA0B,CAAC,IAAI,0CAAiC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IAChG,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,OAAO;QACT,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;IACvC,CAAC;CACJ;AApBD,gEAoBC"}
@@ -1,26 +1,30 @@
1
- import type { Cookie, CookieData } from '@serenity-js/web';
2
- import { BrowsingSession } from '@serenity-js/web';
1
+ import type { BrowserCapabilities } from '@serenity-js/web';
2
+ import { BrowsingSession, type Cookie, type CookieData } from '@serenity-js/web';
3
3
  import type * as playwright from 'playwright-core';
4
- import type { PlaywrightOptions } from '../../PlaywrightOptions';
4
+ import { type PlaywrightOptions } from '../../PlaywrightOptions';
5
5
  import { PlaywrightPage } from '../models';
6
6
  /**
7
7
  * Playwright-specific implementation of {@apilink BrowsingSession}.
8
8
  *
9
9
  * @group Models
10
10
  */
11
- export declare class PlaywrightBrowsingSession extends BrowsingSession<PlaywrightPage> {
12
- protected readonly browser: playwright.Browser;
11
+ export declare abstract class PlaywrightBrowsingSession extends BrowsingSession<PlaywrightPage> {
13
12
  protected readonly browserContextOptions: PlaywrightOptions;
14
13
  private currentPlaywrightBrowserContext;
15
- constructor(browser: playwright.Browser, browserContextOptions: PlaywrightOptions);
16
- protected registerCurrentPage(): Promise<PlaywrightPage>;
14
+ protected constructor(browserContextOptions: PlaywrightOptions);
17
15
  /**
18
- * @override
16
+ * Returns {@apilink BrowserCapabilities|basic meta-data} about the browser associated with this ability.
17
+ *
18
+ * **Please note** that since Playwright does not expose information about the operating system
19
+ * the tests are running on, **Serenity/JS assumes that the tests are running locally**
20
+ * and therefore returns the value of Node.js `process.platform` for `platformName`.
19
21
  */
20
- closeAllPages(): Promise<void>;
22
+ abstract browserCapabilities(): Promise<BrowserCapabilities>;
21
23
  cookie(name: string): Promise<Cookie>;
22
24
  setCookie(cookie: CookieData): Promise<void>;
23
25
  deleteAllCookies(): Promise<void>;
24
- private browserContext;
26
+ protected registerCurrentPage(): Promise<PlaywrightPage>;
27
+ protected browserContext(): Promise<playwright.BrowserContext>;
28
+ protected abstract createBrowserContext(options: PlaywrightOptions): Promise<playwright.BrowserContext>;
25
29
  }
26
30
  //# sourceMappingURL=PlaywrightBrowsingSession.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PlaywrightBrowsingSession.d.ts","sourceRoot":"","sources":["../../../src/screenplay/models/PlaywrightBrowsingSession.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,KAAK,UAAU,MAAM,iBAAiB,CAAC;AAEnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAoB,cAAc,EAAE,MAAM,WAAW,CAAC;AAE7D;;;;GAIG;AACH,qBAAa,yBAA0B,SAAQ,eAAe,CAAC,cAAc,CAAC;IAKtE,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO;IAC9C,SAAS,CAAC,QAAQ,CAAC,qBAAqB,EAAE,iBAAiB;IAJ/D,OAAO,CAAC,+BAA+B,CAA4B;gBAG5C,OAAO,EAAE,UAAU,CAAC,OAAO,EAC3B,qBAAqB,EAAE,iBAAiB;cAK/C,mBAAmB,IAAI,OAAO,CAAC,cAAc,CAAC;IAc9D;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAO9B,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;YAKzB,cAAc;CAqB/B"}
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;IAI7D,SAAS,CAAC,QAAQ,CAAC,qBAAqB,EAAE,iBAAiB;IAFjF,OAAO,CAAC,+BAA+B,CAA4B;IAEnE,SAAS,aAAgC,qBAAqB,EAAE,iBAAiB;IAIjF;;;;;;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;cAKd,mBAAmB,IAAI,OAAO,CAAC,cAAc,CAAC;cAcvD,cAAc,IAAI,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC;IAsBpE,SAAS,CAAC,QAAQ,CAAC,oBAAoB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC;CAC1G"}
@@ -10,28 +10,10 @@ const models_1 = require("../models");
10
10
  * @group Models
11
11
  */
12
12
  class PlaywrightBrowsingSession extends web_1.BrowsingSession {
13
- constructor(browser, browserContextOptions) {
13
+ constructor(browserContextOptions) {
14
14
  super();
15
- this.browser = browser;
16
15
  this.browserContextOptions = browserContextOptions;
17
16
  }
18
- async registerCurrentPage() {
19
- const context = await this.browserContext();
20
- await context.newPage();
21
- // calling context.newPage() triggers a callback registered via browserContext(),
22
- // which wraps playwright.Page in PlaywrightPage and adds it to the list of pages
23
- // returned by this.allPages()
24
- const allPages = await this.allPages();
25
- return allPages.at(-1);
26
- }
27
- /**
28
- * @override
29
- */
30
- async closeAllPages() {
31
- await super.closeAllPages();
32
- const context = await this.browserContext();
33
- await context.close();
34
- }
35
17
  async cookie(name) {
36
18
  const context = await this.browserContext();
37
19
  return new models_1.PlaywrightCookie(context, name);
@@ -44,9 +26,18 @@ class PlaywrightBrowsingSession extends web_1.BrowsingSession {
44
26
  const context = await this.browserContext();
45
27
  await context.clearCookies();
46
28
  }
29
+ async registerCurrentPage() {
30
+ const context = await this.browserContext();
31
+ await context.newPage();
32
+ // calling context.newPage() triggers a callback registered via browserContext(),
33
+ // which wraps playwright.Page in PlaywrightPage and adds it to the list of pages
34
+ // returned by this.allPages()
35
+ const allPages = await this.allPages();
36
+ return allPages.at(-1);
37
+ }
47
38
  async browserContext() {
48
39
  if (!this.currentPlaywrightBrowserContext) {
49
- this.currentPlaywrightBrowserContext = await this.browser.newContext(this.browserContextOptions);
40
+ this.currentPlaywrightBrowserContext = await this.createBrowserContext(this.browserContextOptions);
50
41
  this.currentPlaywrightBrowserContext.on('page', async (page) => {
51
42
  this.register(new models_1.PlaywrightPage(this, page, this.browserContextOptions, model_1.CorrelationId.create()));
52
43
  });
@@ -1 +1 @@
1
- {"version":3,"file":"PlaywrightBrowsingSession.js","sourceRoot":"","sources":["../../../src/screenplay/models/PlaywrightBrowsingSession.ts"],"names":[],"mappings":";;;AAAA,uDAA4D;AAE5D,0CAAmD;AAInD,sCAA6D;AAE7D;;;;GAIG;AACH,MAAa,yBAA0B,SAAQ,qBAA+B;IAI1E,YACuB,OAA2B,EAC3B,qBAAwC;QAE3D,KAAK,EAAE,CAAC;QAHW,YAAO,GAAP,OAAO,CAAoB;QAC3B,0BAAqB,GAArB,qBAAqB,CAAmB;IAG/D,CAAC;IAES,KAAK,CAAC,mBAAmB;QAC/B,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;IAED;;OAEG;IACH,KAAK,CAAC,aAAa;QACf,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;IAED,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;IAEO,KAAK,CAAC,cAAc;QACxB,IAAI,CAAE,IAAI,CAAC,+BAA+B,EAAE;YACxC,IAAI,CAAC,+BAA+B,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YAEjG,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;CACJ;AAxED,8DAwEC"}
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;IAInF,YAAyC,qBAAwC;QAC7E,KAAK,EAAE,CAAC;QAD6B,0BAAqB,GAArB,qBAAqB,CAAmB;IAEjF,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;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;IAES,KAAK,CAAC,cAAc;QAC1B,IAAI,CAAE,IAAI,CAAC,+BAA+B,EAAE;YACxC,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;AAtED,8DAsEC"}
@@ -0,0 +1,12 @@
1
+ import type { BrowserCapabilities } from '@serenity-js/web';
2
+ import type * as playwright from 'playwright-core';
3
+ import type { PlaywrightOptions } from '../../PlaywrightOptions';
4
+ import { PlaywrightBrowsingSession } from './PlaywrightBrowsingSession';
5
+ export declare class PlaywrightBrowsingSessionWithBrowser extends PlaywrightBrowsingSession {
6
+ protected readonly browser: playwright.Browser;
7
+ constructor(browser: playwright.Browser, browserContextOptions: PlaywrightOptions);
8
+ protected createBrowserContext(options: PlaywrightOptions): Promise<playwright.BrowserContext>;
9
+ closeAllPages(): Promise<void>;
10
+ browserCapabilities(): Promise<BrowserCapabilities>;
11
+ }
12
+ //# sourceMappingURL=PlaywrightBrowsingSessionWithBrowser.d.ts.map
@@ -0,0 +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;AACjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAExE,qBAAa,oCAAqC,SAAQ,yBAAyB;IAE3E,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO;gBAA3B,OAAO,EAAE,UAAU,CAAC,OAAO,EAC9C,qBAAqB,EAAE,iBAAiB;cAKzB,oBAAoB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC;IAIxF,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAO9B,mBAAmB,IAAI,OAAO,CAAC,mBAAmB,CAAC;CAOrE"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PlaywrightBrowsingSessionWithBrowser = void 0;
4
+ const PlaywrightBrowsingSession_1 = require("./PlaywrightBrowsingSession");
5
+ class PlaywrightBrowsingSessionWithBrowser extends PlaywrightBrowsingSession_1.PlaywrightBrowsingSession {
6
+ constructor(browser, browserContextOptions) {
7
+ super(browserContextOptions);
8
+ this.browser = browser;
9
+ }
10
+ createBrowserContext(options) {
11
+ return this.browser.newContext(this.browserContextOptions);
12
+ }
13
+ async closeAllPages() {
14
+ await super.closeAllPages();
15
+ const context = await this.browserContext();
16
+ await context.close();
17
+ }
18
+ async browserCapabilities() {
19
+ return {
20
+ browserName: this.browser._initializer.name,
21
+ platformName: process.platform,
22
+ browserVersion: this.browser.version()
23
+ };
24
+ }
25
+ }
26
+ exports.PlaywrightBrowsingSessionWithBrowser = PlaywrightBrowsingSessionWithBrowser;
27
+ //# sourceMappingURL=PlaywrightBrowsingSessionWithBrowser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlaywrightBrowsingSessionWithBrowser.js","sourceRoot":"","sources":["../../../src/screenplay/models/PlaywrightBrowsingSessionWithBrowser.ts"],"names":[],"mappings":";;;AAIA,2EAAwE;AAExE,MAAa,oCAAqC,SAAQ,qDAAyB;IAC/E,YACuB,OAA2B,EAC9C,qBAAwC;QAExC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAHV,YAAO,GAAP,OAAO,CAAoB;IAIlD,CAAC;IAEkB,oBAAoB,CAAC,OAA0B;QAC9D,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAC/D,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;AA1BD,oFA0BC"}
@@ -0,0 +1,11 @@
1
+ import type { BrowserCapabilities } from '@serenity-js/web';
2
+ import type * as playwright from 'playwright-core';
3
+ import type { PlaywrightOptions } from '../../PlaywrightOptions';
4
+ import { PlaywrightBrowsingSession } from './PlaywrightBrowsingSession';
5
+ export declare class PlaywrightBrowsingSessionWithPage extends PlaywrightBrowsingSession {
6
+ protected readonly page: playwright.Page;
7
+ constructor(page: playwright.Page, browserContextOptions: PlaywrightOptions);
8
+ protected createBrowserContext(options: PlaywrightOptions): Promise<playwright.BrowserContext>;
9
+ browserCapabilities(): Promise<BrowserCapabilities>;
10
+ }
11
+ //# sourceMappingURL=PlaywrightBrowsingSessionWithPage.d.ts.map
@@ -0,0 +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;AAGxE,qBAAa,iCAAkC,SAAQ,yBAAyB;IAExE,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI;gBAArB,IAAI,EAAE,UAAU,CAAC,IAAI,EACxC,qBAAqB,EAAE,iBAAiB;cAMnB,oBAAoB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC;IAI9F,mBAAmB,IAAI,OAAO,CAAC,mBAAmB,CAAC;CAQrE"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PlaywrightBrowsingSessionWithPage = void 0;
4
+ const model_1 = require("@serenity-js/core/lib/model");
5
+ const PlaywrightBrowsingSession_1 = require("./PlaywrightBrowsingSession");
6
+ const PlaywrightPage_1 = require("./PlaywrightPage");
7
+ class PlaywrightBrowsingSessionWithPage extends PlaywrightBrowsingSession_1.PlaywrightBrowsingSession {
8
+ constructor(page, browserContextOptions) {
9
+ super(browserContextOptions);
10
+ this.page = page;
11
+ this.currentBrowserPage = new PlaywrightPage_1.PlaywrightPage(this, this.page, this.browserContextOptions, model_1.CorrelationId.create());
12
+ }
13
+ async createBrowserContext(options) {
14
+ return this.page.context();
15
+ }
16
+ async browserCapabilities() {
17
+ const browser = await this.page.context().browser();
18
+ return {
19
+ browserName: browser._initializer.name,
20
+ platformName: process.platform,
21
+ browserVersion: browser.version()
22
+ };
23
+ }
24
+ }
25
+ exports.PlaywrightBrowsingSessionWithPage = PlaywrightBrowsingSessionWithPage;
26
+ //# sourceMappingURL=PlaywrightBrowsingSessionWithPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlaywrightBrowsingSessionWithPage.js","sourceRoot":"","sources":["../../../src/screenplay/models/PlaywrightBrowsingSessionWithPage.ts"],"names":[],"mappings":";;;AAAA,uDAA4D;AAK5D,2EAAwE;AACxE,qDAAkD;AAElD,MAAa,iCAAkC,SAAQ,qDAAyB;IAC5E,YACuB,IAAqB,EACxC,qBAAwC;QAExC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAHV,SAAI,GAAJ,IAAI,CAAiB;QAIxC,IAAI,CAAC,kBAAkB,GAAG,IAAI,+BAAc,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,qBAAqB,EAAE,qBAAa,CAAC,MAAM,EAAE,CAAC,CAAC;IACtH,CAAC;IAEkB,KAAK,CAAC,oBAAoB,CAAC,OAA0B;QACpE,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;IAC/B,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;AArBD,8EAqBC"}
@@ -1,5 +1,5 @@
1
1
  /// <reference types="node" />
2
- import type { QuestionAdapter } from '@serenity-js/core';
2
+ import { type QuestionAdapter } from '@serenity-js/core';
3
3
  import type { CorrelationId } from '@serenity-js/core/lib/model';
4
4
  import type { Cookie, CookieData, PageElement, Selector } from '@serenity-js/web';
5
5
  import { Key, Page, PageElements } from '@serenity-js/web';
@@ -18,6 +18,7 @@ export declare class PlaywrightPage extends Page<playwright.Locator> {
18
18
  private lastScriptExecutionSummary;
19
19
  static current(): QuestionAdapter<PlaywrightPage>;
20
20
  constructor(session: PlaywrightBrowsingSession, page: playwright.Page, options: PlaywrightOptions, pageId: CorrelationId);
21
+ createPageElement(nativeElement: playwright.Locator): PageElement<playwright.Locator>;
21
22
  locate(selector: Selector): PageElement<playwright.Locator>;
22
23
  locateAll(selector: Selector): PageElements<playwright.Locator>;
23
24
  navigateTo(destination: string): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"PlaywrightPage.d.ts","sourceRoot":"","sources":["../../../src/screenplay/models/PlaywrightPage.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAClF,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,KAAK,KAAK,UAAU,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAGjE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAI7E;;;;GAIG;AACH,qBAAa,cAAe,SAAQ,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;IAUpD,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAT5B,OAAO,CAAC,0BAA0B,CAA6B;WAE/C,OAAO,IAAI,eAAe,CAAC,cAAc,CAAC;gBAKtD,OAAO,EAAE,yBAAyB,EACjB,IAAI,EAAE,UAAU,CAAC,IAAI,EACrB,OAAO,EAAE,iBAAiB,EAC3C,MAAM,EAAE,aAAa;IAUzB,MAAM,CAAC,QAAQ,EAAE,QAAQ,GAAG,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC;IAS3D,SAAS,CAAC,QAAQ,EAAE,QAAQ,GAAG,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC;IASzD,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK9C,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAK7B,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAKhC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAKvB,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAc/C,aAAa,CAAC,MAAM,EAAE,cAAc,SAAS,GAAG,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,UAAU,EAAE,cAAc,KAAK,MAAM,CAAC,EAAE,GAAG,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;IA2B3J,kBAAkB,CAAC,MAAM,EAAE,cAAc,SAAS,GAAG,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;IAkCnN,yBAAyB,CAAC,MAAM,GAAG,GAAG,KAAK,MAAM;IAQ3C,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;IAMjC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIrC,SAAS,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBhD,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjC,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IAKxB,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;IAOvB,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IAKnB,YAAY,IAAI,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAI1D,eAAe,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAMtB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAIlC,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAIvB,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC;YAI9B,UAAU;YAMV,YAAY;CAG7B"}
1
+ {"version":3,"file":"PlaywrightPage.d.ts","sourceRoot":"","sources":["../../../src/screenplay/models/PlaywrightPage.ts"],"names":[],"mappings":"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"}
@@ -23,6 +23,9 @@ class PlaywrightPage extends web_1.Page {
23
23
  this.page = page;
24
24
  this.options = options;
25
25
  }
26
+ createPageElement(nativeElement) {
27
+ return new PlaywrightPageElement_1.PlaywrightPageElement(new locators_1.PlaywrightExistingElementLocator(this.rootLocator, new web_1.ByDeepCss(nativeElement._selector), nativeElement));
28
+ }
26
29
  locate(selector) {
27
30
  return new PlaywrightPageElement_1.PlaywrightPageElement(new locators_1.PlaywrightLocator(this.rootLocator, selector));
28
31
  }
@@ -1 +1 @@
1
- {"version":3,"file":"PlaywrightPage.js","sourceRoot":"","sources":["../../../src/screenplay/models/PlaywrightPage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PlaywrightPage.js","sourceRoot":"","sources":["../../../src/screenplay/models/PlaywrightPage.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,7 @@
1
1
  export * from './locators';
2
2
  export * from './PlaywrightBrowsingSession';
3
+ export * from './PlaywrightBrowsingSessionWithBrowser';
4
+ export * from './PlaywrightBrowsingSessionWithPage';
3
5
  export * from './PlaywrightCookie';
4
6
  export * from './PlaywrightPage';
5
7
  export * from './PlaywrightPageElement';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/screenplay/models/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/screenplay/models/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wCAAwC,CAAC;AACvD,cAAc,qCAAqC,CAAC;AACpD,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC"}
@@ -16,6 +16,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./locators"), exports);
18
18
  __exportStar(require("./PlaywrightBrowsingSession"), exports);
19
+ __exportStar(require("./PlaywrightBrowsingSessionWithBrowser"), exports);
20
+ __exportStar(require("./PlaywrightBrowsingSessionWithPage"), exports);
19
21
  __exportStar(require("./PlaywrightCookie"), exports);
20
22
  __exportStar(require("./PlaywrightPage"), exports);
21
23
  __exportStar(require("./PlaywrightPageElement"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/screenplay/models/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6CAA2B;AAC3B,8DAA4C;AAC5C,qDAAmC;AACnC,mDAAiC;AACjC,0DAAwC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/screenplay/models/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6CAA2B;AAC3B,8DAA4C;AAC5C,yEAAuD;AACvD,sEAAoD;AACpD,qDAAmC;AACnC,mDAAiC;AACjC,0DAAwC"}
@@ -18,4 +18,13 @@ export declare class PlaywrightLocator extends Locator<playwright.Locator, strin
18
18
  element(): PageElement<playwright.Locator>;
19
19
  allElements(): Promise<Array<PageElement<playwright.Locator>>>;
20
20
  }
21
+ /**
22
+ * @internal
23
+ */
24
+ export declare class PlaywrightExistingElementLocator extends PlaywrightLocator {
25
+ private readonly existingNativeElement;
26
+ constructor(parent: RootLocator<playwright.Locator>, selector: Selector, existingNativeElement: playwright.Locator);
27
+ nativeElement(): Promise<playwright.Locator>;
28
+ allNativeElements(): Promise<Array<playwright.Locator>>;
29
+ }
21
30
  //# sourceMappingURL=PlaywrightLocator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PlaywrightLocator.d.ts","sourceRoot":"","sources":["../../../../src/screenplay/models/locators/PlaywrightLocator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EAAmE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC5G,OAAO,KAAK,KAAK,UAAU,MAAM,iBAAiB,CAAC;AAInD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAErE;;;;GAIG;AACH,qBAAa,iBAAkB,SAAQ,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC;gBAGlE,MAAM,EAAE,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,EACvC,QAAQ,EAAE,QAAQ;IAMtB,SAAS,CAAC,cAAc,IAAI,MAAM;IA4B5B,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAsB7B,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC;IAM5C,iBAAiB,IAAI,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAU7D,EAAE,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC;IAItE,MAAM,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC;IAIrE,OAAO,IAAI,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC;IAIpC,WAAW,IAAI,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;CAavE"}
1
+ {"version":3,"file":"PlaywrightLocator.d.ts","sourceRoot":"","sources":["../../../../src/screenplay/models/locators/PlaywrightLocator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EAAmE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC5G,OAAO,KAAK,KAAK,UAAU,MAAM,iBAAiB,CAAC;AAInD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAErE;;;;GAIG;AACH,qBAAa,iBAAkB,SAAQ,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC;gBAGlE,MAAM,EAAE,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,EACvC,QAAQ,EAAE,QAAQ;IAMtB,SAAS,CAAC,cAAc,IAAI,MAAM;IA4B5B,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAsB7B,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC;IAM5C,iBAAiB,IAAI,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAU7D,EAAE,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC;IAItE,MAAM,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC;IAIrE,OAAO,IAAI,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC;IAIpC,WAAW,IAAI,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;CAavE;AAED;;GAEG;AACH,qBAAa,gCAAiC,SAAQ,iBAAiB;IAI/D,OAAO,CAAC,QAAQ,CAAC,qBAAqB;gBAFtC,MAAM,EAAE,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,EACvC,QAAQ,EAAE,QAAQ,EACD,qBAAqB,EAAE,UAAU,CAAC,OAAO;IAKxD,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC;IAI5C,iBAAiB,IAAI,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;CAGhE"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PlaywrightLocator = void 0;
3
+ exports.PlaywrightExistingElementLocator = exports.PlaywrightLocator = void 0;
4
4
  const core_1 = require("@serenity-js/core");
5
5
  const web_1 = require("@serenity-js/web");
6
6
  const promised_1 = require("../../promised");
@@ -75,14 +75,14 @@ class PlaywrightLocator extends web_1.Locator {
75
75
  }
76
76
  async allElements() {
77
77
  const elements = await this.allNativeElements();
78
- return elements.map(childElement => new PlaywrightPageElement_1.PlaywrightPageElement(new ExistingElementLocator(this.parent, this.selector, childElement)));
78
+ return elements.map(childElement => new PlaywrightPageElement_1.PlaywrightPageElement(new PlaywrightExistingElementLocator(this.parent, this.selector, childElement)));
79
79
  }
80
80
  }
81
81
  exports.PlaywrightLocator = PlaywrightLocator;
82
82
  /**
83
- * @private
83
+ * @internal
84
84
  */
85
- class ExistingElementLocator extends PlaywrightLocator {
85
+ class PlaywrightExistingElementLocator extends PlaywrightLocator {
86
86
  constructor(parent, selector, existingNativeElement) {
87
87
  super(parent, selector);
88
88
  this.existingNativeElement = existingNativeElement;
@@ -94,4 +94,5 @@ class ExistingElementLocator extends PlaywrightLocator {
94
94
  return [this.existingNativeElement];
95
95
  }
96
96
  }
97
+ exports.PlaywrightExistingElementLocator = PlaywrightExistingElementLocator;
97
98
  //# sourceMappingURL=PlaywrightLocator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PlaywrightLocator.js","sourceRoot":"","sources":["../../../../src/screenplay/models/locators/PlaywrightLocator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PlaywrightLocator.js","sourceRoot":"","sources":["../../../../src/screenplay/models/locators/PlaywrightLocator.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@serenity-js/playwright",
3
- "version": "3.5.0",
3
+ "version": "3.6.0",
4
4
  "description": "Serenity/JS Screenplay Pattern library for Playwright",
5
5
  "author": {
6
6
  "name": "Jan Molak",
@@ -43,10 +43,10 @@
43
43
  "node": "^16.13 || ^18.12 || ^20"
44
44
  },
45
45
  "dependencies": {
46
- "@serenity-js/core": "3.5.0",
47
- "@serenity-js/web": "3.5.0",
46
+ "@serenity-js/core": "3.6.0",
47
+ "@serenity-js/web": "3.6.0",
48
48
  "playwright-core": "^1.35.1",
49
- "tiny-types": "^1.19.1"
49
+ "tiny-types": "^1.20.0"
50
50
  },
51
51
  "devDependencies": {
52
52
  "@integration/testing-tools": "3.0.0",
@@ -58,5 +58,5 @@
58
58
  "ts-node": "^10.9.1",
59
59
  "typescript": "^5.1.6"
60
60
  },
61
- "gitHead": "c34ec9a491ded36cc178f219a9b3cae058c34c2b"
61
+ "gitHead": "970ac224860693ab70e813e176b7532241503b14"
62
62
  }
@@ -1,10 +1,12 @@
1
1
  import type { Discardable } from '@serenity-js/core';
2
- import type { BrowserCapabilities} from '@serenity-js/web';
3
2
  import { BrowseTheWeb } from '@serenity-js/web';
4
3
  import type * as playwright from 'playwright-core';
5
4
 
6
5
  import type { PlaywrightOptions } from '../../PlaywrightOptions';
7
- import { PlaywrightBrowsingSession } from '../models';
6
+ import {
7
+ PlaywrightBrowsingSessionWithBrowser,
8
+ PlaywrightBrowsingSessionWithPage
9
+ } from '../models';
8
10
 
9
11
  /**
10
12
  * This implementation of the {@apilink Ability|ability} to {@apilink BrowseTheWeb}
@@ -12,6 +14,14 @@ import { PlaywrightBrowsingSession } from '../models';
12
14
  *
13
15
  * ## Using Playwright to `BrowseTheWeb`
14
16
  *
17
+ * In the example below, we configure the ability to {@apilink BrowseTheWebWithPlaywright} with a Playwright
18
+ * [`Browser`](https://playwright.dev/docs/api/class-browser) so that Serenity/JS {@apilink Actor|actors}
19
+ * can create a new [`BrowserContext`](https://playwright.dev/docs/api/class-browsercontext) and
20
+ * instantiate Playwright [`page`s](https://playwright.dev/docs/api/class-page) as and when needed.
21
+ *
22
+ * This configuration allows Serenity/JS to control the process of launching and shutting down browser instances
23
+ * and is useful when your test runner, e.g. [Cucumber.js](/api/cucumber), doesn't offer this functionality.
24
+ *
15
25
  * ```ts
16
26
  * import { actorCalled } from '@serenity-js/core'
17
27
  * import { BrowseTheWebWithPlaywright } from '@serenity-js/playwright'
@@ -34,6 +44,55 @@ import { PlaywrightBrowsingSession } from '../models';
34
44
  * )
35
45
  * ```
36
46
  *
47
+ * ## Using `BrowseTheWeb` with an existing Playwright `page`
48
+ *
49
+ * Test runners like [Playwright Test](/api/playwright-test/) manage Playwright browsers for you
50
+ * and offer a [`page`](https://playwright.dev/docs/api/class-page) instance you can
51
+ * inject into the ability to {@apilink BrowseTheWebWithPlaywright}.
52
+ *
53
+ * Note that [Serenity/JS Playwright Test module](/api/playwright-test/)
54
+ * automatically configures all your {@apilink Actor|actors}
55
+ * with an ability to {@apilink BrowseTheWebWithPlaywright},
56
+ * so you don't need to do it by hand unless you want to override the {@apilink SerenityOptions|default configuration}.
57
+ *
58
+ * The example below demonstrates how to use the {@apilink BrowseTheWebWithPlaywright.usingPage} API and
59
+ * override the default {@apilink Cast} of actors.
60
+ *
61
+ * ```ts title="specs/example.spec.ts"
62
+ * import { describe, it, test } from '@playwright/playwright-test'
63
+ * import { BrowseTheWebWithPlaywright } from '@serenity-js/playwright'
64
+ * import { By, Navigate, PageElement, Text } from '@serenity-js/web'
65
+ * import { Ensure, equals } from '@serenity-js/assertions'
66
+ *
67
+ * const HomePage = {
68
+ * title: () =>
69
+ * PageElement.located(By.css('h1')).describedAs('title')
70
+ * }
71
+ *
72
+ * describe('Serenity/JS with Playwright', () => {
73
+ *
74
+ * test.use({
75
+ * actors: async ({ page, contextOptions }, use) => {
76
+ * await use(
77
+ * Cast.where((actorName: string) => {
78
+ * return actor.whoCan(
79
+ * BrowseTheWebWithPlaywright.usingPage(page),
80
+ * // ... add any other abilities
81
+ * )
82
+ * })
83
+ * )
84
+ * }
85
+ * })
86
+ *
87
+ * it('lets you reuse an existing page', async ({ actor }) => {
88
+ * await actor.attemptsTo(
89
+ * Navigate.to(`https://serenity-js.org`),
90
+ * Ensure.that(Text.of(HomePage.title()), equals('Serenity/JS')),
91
+ * )
92
+ * })
93
+ * })
94
+ * ```
95
+ *
37
96
  * ## Learn more
38
97
  * - [Playwright website](https://playwright.dev/)
39
98
  * - {@apilink BrowseTheWeb}
@@ -45,11 +104,11 @@ import { PlaywrightBrowsingSession } from '../models';
45
104
  export class BrowseTheWebWithPlaywright extends BrowseTheWeb<playwright.Locator> implements Discardable {
46
105
 
47
106
  static using(browser: playwright.Browser, options?: PlaywrightOptions): BrowseTheWebWithPlaywright {
48
- return new BrowseTheWebWithPlaywright(browser, options);
107
+ return new BrowseTheWebWithPlaywright(new PlaywrightBrowsingSessionWithBrowser(browser, options));
49
108
  }
50
109
 
51
- constructor(protected readonly browser: playwright.Browser, browserContextOptions: PlaywrightOptions = {}) {
52
- super(new PlaywrightBrowsingSession(browser, browserContextOptions));
110
+ static usingPage(page: playwright.Page, options?: PlaywrightOptions): BrowseTheWebWithPlaywright {
111
+ return new BrowseTheWebWithPlaywright(new PlaywrightBrowsingSessionWithPage(page, options));
53
112
  }
54
113
 
55
114
  /**
@@ -62,19 +121,4 @@ export class BrowseTheWebWithPlaywright extends BrowseTheWeb<playwright.Locator>
62
121
  async discard(): Promise<void> {
63
122
  await this.session.closeAllPages();
64
123
  }
65
-
66
- /**
67
- * Returns {@apilink BrowserCapabilities|basic meta-data} about the browser associated with this ability.
68
- *
69
- * **Please note** that since Playwright does not expose information about the operating system
70
- * the tests are running on, **Serenity/JS assumes that the tests are running locally**
71
- * and therefore returns the value of Node.js `process.platform` for `platformName`.
72
- */
73
- async browserCapabilities(): Promise<BrowserCapabilities> {
74
- return {
75
- browserName: (this.browser as any)._initializer.name, // todo: raise a PR to Playwright to expose this information
76
- platformName: process.platform, // todo: get the actual platform from Playwright
77
- browserVersion: this.browser.version()
78
- }
79
- }
80
124
  }
@@ -1,9 +1,9 @@
1
1
  import { CorrelationId } from '@serenity-js/core/lib/model';
2
- import type { Cookie, CookieData } from '@serenity-js/web';
3
- import { BrowsingSession } from '@serenity-js/web';
2
+ import type { BrowserCapabilities } from '@serenity-js/web';
3
+ import { BrowsingSession, type Cookie, type CookieData } from '@serenity-js/web';
4
4
  import type * as playwright from 'playwright-core';
5
5
 
6
- import type { PlaywrightOptions } from '../../PlaywrightOptions';
6
+ import { type PlaywrightOptions } from '../../PlaywrightOptions';
7
7
  import { PlaywrightCookie, PlaywrightPage } from '../models';
8
8
 
9
9
  /**
@@ -11,40 +11,22 @@ import { PlaywrightCookie, PlaywrightPage } from '../models';
11
11
  *
12
12
  * @group Models
13
13
  */
14
- export class PlaywrightBrowsingSession extends BrowsingSession<PlaywrightPage> {
14
+ export abstract class PlaywrightBrowsingSession extends BrowsingSession<PlaywrightPage> {
15
15
 
16
16
  private currentPlaywrightBrowserContext: playwright.BrowserContext;
17
17
 
18
- constructor(
19
- protected readonly browser: playwright.Browser,
20
- protected readonly browserContextOptions: PlaywrightOptions,
21
- ) {
18
+ protected constructor(protected readonly browserContextOptions: PlaywrightOptions) {
22
19
  super();
23
20
  }
24
21
 
25
- protected 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
-
39
22
  /**
40
- * @override
23
+ * Returns {@apilink BrowserCapabilities|basic meta-data} about the browser associated with this ability.
24
+ *
25
+ * **Please note** that since Playwright does not expose information about the operating system
26
+ * the tests are running on, **Serenity/JS assumes that the tests are running locally**
27
+ * and therefore returns the value of Node.js `process.platform` for `platformName`.
41
28
  */
42
- async closeAllPages(): Promise<void> {
43
- await super.closeAllPages();
44
-
45
- const context = await this.browserContext();
46
- await context.close();
47
- }
29
+ public abstract browserCapabilities(): Promise<BrowserCapabilities>;
48
30
 
49
31
  async cookie(name: string): Promise<Cookie> {
50
32
  const context = await this.browserContext();
@@ -62,9 +44,23 @@ export class PlaywrightBrowsingSession extends BrowsingSession<PlaywrightPage> {
62
44
  await context.clearCookies();
63
45
  }
64
46
 
65
- private async browserContext(): Promise<playwright.BrowserContext> {
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
+ protected async browserContext(): Promise<playwright.BrowserContext> {
66
62
  if (! this.currentPlaywrightBrowserContext) {
67
- this.currentPlaywrightBrowserContext = await this.browser.newContext(this.browserContextOptions);
63
+ this.currentPlaywrightBrowserContext = await this.createBrowserContext(this.browserContextOptions);
68
64
 
69
65
  this.currentPlaywrightBrowserContext.on('page', async page => {
70
66
  this.register(
@@ -83,4 +79,6 @@ export class PlaywrightBrowsingSession extends BrowsingSession<PlaywrightPage> {
83
79
 
84
80
  return this.currentPlaywrightBrowserContext;
85
81
  }
82
+
83
+ protected abstract createBrowserContext(options: PlaywrightOptions): Promise<playwright.BrowserContext>;
86
84
  }
@@ -0,0 +1,33 @@
1
+ import type { BrowserCapabilities } from '@serenity-js/web';
2
+ import type * as playwright from 'playwright-core';
3
+
4
+ import type { PlaywrightOptions } from '../../PlaywrightOptions';
5
+ import { PlaywrightBrowsingSession } from './PlaywrightBrowsingSession';
6
+
7
+ export class PlaywrightBrowsingSessionWithBrowser extends PlaywrightBrowsingSession {
8
+ constructor(
9
+ protected readonly browser: playwright.Browser,
10
+ browserContextOptions: PlaywrightOptions,
11
+ ) {
12
+ super(browserContextOptions);
13
+ }
14
+
15
+ protected override createBrowserContext(options: PlaywrightOptions): Promise<playwright.BrowserContext> {
16
+ return this.browser.newContext(this.browserContextOptions);
17
+ }
18
+
19
+ override async closeAllPages(): Promise<void> {
20
+ await super.closeAllPages();
21
+
22
+ const context = await this.browserContext();
23
+ await context.close();
24
+ }
25
+
26
+ override async browserCapabilities(): Promise<BrowserCapabilities> {
27
+ return {
28
+ browserName: (this.browser as any)._initializer.name, // todo: raise a PR to Playwright to expose this information
29
+ platformName: process.platform, // todo: get the actual platform from Playwright
30
+ browserVersion: this.browser.version()
31
+ }
32
+ }
33
+ }
@@ -0,0 +1,31 @@
1
+ import { CorrelationId } from '@serenity-js/core/lib/model';
2
+ import type { BrowserCapabilities } from '@serenity-js/web';
3
+ import type * as playwright from 'playwright-core';
4
+
5
+ import type { PlaywrightOptions } from '../../PlaywrightOptions';
6
+ import { PlaywrightBrowsingSession } from './PlaywrightBrowsingSession';
7
+ import { PlaywrightPage } from './PlaywrightPage';
8
+
9
+ export class PlaywrightBrowsingSessionWithPage extends PlaywrightBrowsingSession {
10
+ constructor(
11
+ protected readonly page: playwright.Page,
12
+ browserContextOptions: PlaywrightOptions,
13
+ ) {
14
+ super(browserContextOptions);
15
+ this.currentBrowserPage = new PlaywrightPage(this, this.page, this.browserContextOptions, CorrelationId.create());
16
+ }
17
+
18
+ protected override async createBrowserContext(options: PlaywrightOptions): Promise<playwright.BrowserContext> {
19
+ return this.page.context();
20
+ }
21
+
22
+ override async browserCapabilities(): Promise<BrowserCapabilities> {
23
+ const browser = await this.page.context().browser();
24
+ return {
25
+ browserName: (browser as any)._initializer.name, // todo: raise a PR to Playwright to expose this information
26
+ platformName: process.platform, // todo: get the actual platform from Playwright
27
+ browserVersion: browser.version()
28
+ }
29
+ }
30
+ }
31
+
@@ -1,15 +1,14 @@
1
- import type { QuestionAdapter } from '@serenity-js/core';
2
- import { LogicError } from '@serenity-js/core';
1
+ import { LogicError, type QuestionAdapter } from '@serenity-js/core';
3
2
  import { asyncMap } from '@serenity-js/core/lib/io';
4
3
  import type { CorrelationId } from '@serenity-js/core/lib/model';
5
4
  import type { Cookie, CookieData, PageElement, Selector } from '@serenity-js/web';
6
- import { Key, Page, PageElements } from '@serenity-js/web';
5
+ import { ByDeepCss, Key, Page, PageElements } from '@serenity-js/web';
7
6
  import type * as playwright from 'playwright-core';
8
7
  import { URL } from 'url';
9
8
 
10
9
  import type { PlaywrightOptions } from '../../PlaywrightOptions';
11
10
  import { promised } from '../promised';
12
- import { PlaywrightLocator, PlaywrightRootLocator } from './locators';
11
+ import { PlaywrightExistingElementLocator, PlaywrightLocator, PlaywrightRootLocator } from './locators';
13
12
  import type { PlaywrightBrowsingSession } from './PlaywrightBrowsingSession';
14
13
  import { PlaywrightModalDialogHandler } from './PlaywrightModalDialogHandler';
15
14
  import { PlaywrightPageElement } from './PlaywrightPageElement';
@@ -41,6 +40,16 @@ export class PlaywrightPage extends Page<playwright.Locator> {
41
40
  );
42
41
  }
43
42
 
43
+ createPageElement(nativeElement: playwright.Locator): PageElement<playwright.Locator> {
44
+ return new PlaywrightPageElement(
45
+ new PlaywrightExistingElementLocator(
46
+ this.rootLocator,
47
+ new ByDeepCss((nativeElement as any)._selector),
48
+ nativeElement,
49
+ )
50
+ );
51
+ }
52
+
44
53
  locate(selector: Selector): PageElement<playwright.Locator> {
45
54
  return new PlaywrightPageElement(
46
55
  new PlaywrightLocator(
@@ -1,5 +1,7 @@
1
1
  export * from './locators';
2
2
  export * from './PlaywrightBrowsingSession';
3
+ export * from './PlaywrightBrowsingSessionWithBrowser';
4
+ export * from './PlaywrightBrowsingSessionWithPage';
3
5
  export * from './PlaywrightCookie';
4
6
  export * from './PlaywrightPage';
5
7
  export * from './PlaywrightPageElement';
@@ -105,7 +105,7 @@ export class PlaywrightLocator extends Locator<playwright.Locator, string> {
105
105
 
106
106
  return elements.map(childElement =>
107
107
  new PlaywrightPageElement(
108
- new ExistingElementLocator(
108
+ new PlaywrightExistingElementLocator(
109
109
  this.parent as PlaywrightRootLocator,
110
110
  this.selector,
111
111
  childElement,
@@ -116,9 +116,9 @@ export class PlaywrightLocator extends Locator<playwright.Locator, string> {
116
116
  }
117
117
 
118
118
  /**
119
- * @private
119
+ * @internal
120
120
  */
121
- class ExistingElementLocator extends PlaywrightLocator {
121
+ export class PlaywrightExistingElementLocator extends PlaywrightLocator {
122
122
  constructor(
123
123
  parent: RootLocator<playwright.Locator>,
124
124
  selector: Selector,