@serenity-js/playwright 3.0.0-rc.20

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 (62) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/LICENSE.md +201 -0
  3. package/NOTICE.md +1 -0
  4. package/README.md +145 -0
  5. package/lib/PlaywrightOptions.d.ts +40 -0
  6. package/lib/PlaywrightOptions.js +3 -0
  7. package/lib/PlaywrightOptions.js.map +1 -0
  8. package/lib/index.d.ts +2 -0
  9. package/lib/index.js +19 -0
  10. package/lib/index.js.map +1 -0
  11. package/lib/screenplay/abilities/BrowseTheWebWithPlaywright.d.ts +71 -0
  12. package/lib/screenplay/abilities/BrowseTheWebWithPlaywright.js +86 -0
  13. package/lib/screenplay/abilities/BrowseTheWebWithPlaywright.js.map +1 -0
  14. package/lib/screenplay/abilities/index.d.ts +1 -0
  15. package/lib/screenplay/abilities/index.js +18 -0
  16. package/lib/screenplay/abilities/index.js.map +1 -0
  17. package/lib/screenplay/index.d.ts +2 -0
  18. package/lib/screenplay/index.js +19 -0
  19. package/lib/screenplay/index.js.map +1 -0
  20. package/lib/screenplay/models/PlaywrightBrowsingSession.d.ts +25 -0
  21. package/lib/screenplay/models/PlaywrightBrowsingSession.js +67 -0
  22. package/lib/screenplay/models/PlaywrightBrowsingSession.js.map +1 -0
  23. package/lib/screenplay/models/PlaywrightCookie.d.ts +8 -0
  24. package/lib/screenplay/models/PlaywrightCookie.js +39 -0
  25. package/lib/screenplay/models/PlaywrightCookie.js.map +1 -0
  26. package/lib/screenplay/models/PlaywrightModalDialogHandler.d.ts +13 -0
  27. package/lib/screenplay/models/PlaywrightModalDialogHandler.js +45 -0
  28. package/lib/screenplay/models/PlaywrightModalDialogHandler.js.map +1 -0
  29. package/lib/screenplay/models/PlaywrightPage.d.ts +58 -0
  30. package/lib/screenplay/models/PlaywrightPage.js +177 -0
  31. package/lib/screenplay/models/PlaywrightPage.js.map +1 -0
  32. package/lib/screenplay/models/PlaywrightPageElement.d.ts +24 -0
  33. package/lib/screenplay/models/PlaywrightPageElement.js +194 -0
  34. package/lib/screenplay/models/PlaywrightPageElement.js.map +1 -0
  35. package/lib/screenplay/models/index.d.ts +5 -0
  36. package/lib/screenplay/models/index.js +22 -0
  37. package/lib/screenplay/models/index.js.map +1 -0
  38. package/lib/screenplay/models/locators/PlaywrightLocator.d.ts +13 -0
  39. package/lib/screenplay/models/locators/PlaywrightLocator.js +77 -0
  40. package/lib/screenplay/models/locators/PlaywrightLocator.js.map +1 -0
  41. package/lib/screenplay/models/locators/PlaywrightRootLocator.d.ts +11 -0
  42. package/lib/screenplay/models/locators/PlaywrightRootLocator.js +26 -0
  43. package/lib/screenplay/models/locators/PlaywrightRootLocator.js.map +1 -0
  44. package/lib/screenplay/models/locators/index.d.ts +2 -0
  45. package/lib/screenplay/models/locators/index.js +19 -0
  46. package/lib/screenplay/models/locators/index.js.map +1 -0
  47. package/package.json +68 -0
  48. package/src/PlaywrightOptions.ts +43 -0
  49. package/src/index.ts +2 -0
  50. package/src/screenplay/abilities/BrowseTheWebWithPlaywright.ts +89 -0
  51. package/src/screenplay/abilities/index.ts +1 -0
  52. package/src/screenplay/index.ts +2 -0
  53. package/src/screenplay/models/PlaywrightBrowsingSession.ts +88 -0
  54. package/src/screenplay/models/PlaywrightCookie.ts +46 -0
  55. package/src/screenplay/models/PlaywrightModalDialogHandler.ts +53 -0
  56. package/src/screenplay/models/PlaywrightPage.ts +258 -0
  57. package/src/screenplay/models/PlaywrightPageElement.ts +235 -0
  58. package/src/screenplay/models/index.ts +5 -0
  59. package/src/screenplay/models/locators/PlaywrightLocator.ts +113 -0
  60. package/src/screenplay/models/locators/PlaywrightRootLocator.ts +29 -0
  61. package/src/screenplay/models/locators/index.ts +2 -0
  62. package/tsconfig.eslint.json +10 -0
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./abilities"), exports);
18
+ __exportStar(require("./models"), exports);
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/screenplay/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA4B;AAC5B,2CAAyB"}
@@ -0,0 +1,25 @@
1
+ import { BrowsingSession, Cookie, CookieData } from '@serenity-js/web';
2
+ import * as playwright from 'playwright-core';
3
+ import { PlaywrightOptions } from '../../PlaywrightOptions';
4
+ import { PlaywrightPage } from '../models';
5
+ /**
6
+ * @desc
7
+ * Playwright-specific implementation of the {@link @serenity-js/web/lib/screenplay/models~BrowsingSession}.
8
+ *
9
+ * @see {@link @serenity-js/web/lib/screenplay/models~BrowsingSession}
10
+ */
11
+ export declare class PlaywrightBrowsingSession extends BrowsingSession<PlaywrightPage> {
12
+ protected readonly browser: playwright.Browser;
13
+ protected readonly browserContextOptions: PlaywrightOptions;
14
+ private currentPlaywrightBrowserContext;
15
+ constructor(browser: playwright.Browser, browserContextOptions: PlaywrightOptions);
16
+ protected registerCurrentPage(): Promise<PlaywrightPage>;
17
+ /**
18
+ * @override
19
+ */
20
+ closeAllPages(): Promise<void>;
21
+ cookie(name: string): Promise<Cookie>;
22
+ setCookie(cookie: CookieData): Promise<void>;
23
+ deleteAllCookies(): Promise<void>;
24
+ private browserContext;
25
+ }
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PlaywrightBrowsingSession = void 0;
4
+ const model_1 = require("@serenity-js/core/lib/model");
5
+ const web_1 = require("@serenity-js/web");
6
+ const models_1 = require("../models");
7
+ /**
8
+ * @desc
9
+ * Playwright-specific implementation of the {@link @serenity-js/web/lib/screenplay/models~BrowsingSession}.
10
+ *
11
+ * @see {@link @serenity-js/web/lib/screenplay/models~BrowsingSession}
12
+ */
13
+ class PlaywrightBrowsingSession extends web_1.BrowsingSession {
14
+ constructor(browser, browserContextOptions) {
15
+ super();
16
+ this.browser = browser;
17
+ this.browserContextOptions = browserContextOptions;
18
+ }
19
+ async registerCurrentPage() {
20
+ const context = await this.browserContext();
21
+ await context.newPage();
22
+ // calling context.newPage() triggers a callback registered via browserContext(),
23
+ // which wraps playwright.Page in PlaywrightPage and adds it to the list of pages
24
+ // returned by this.allPages()
25
+ const allPages = await this.allPages();
26
+ return allPages[allPages.length - 1];
27
+ }
28
+ /**
29
+ * @override
30
+ */
31
+ async closeAllPages() {
32
+ await super.closeAllPages();
33
+ const context = await this.browserContext();
34
+ await context.close();
35
+ }
36
+ async cookie(name) {
37
+ const context = await this.browserContext();
38
+ return new models_1.PlaywrightCookie(context, name);
39
+ }
40
+ async setCookie(cookie) {
41
+ const context = await this.browserContext();
42
+ await context.addCookies([cookie]);
43
+ }
44
+ async deleteAllCookies() {
45
+ const context = await this.browserContext();
46
+ await context.clearCookies();
47
+ }
48
+ async browserContext() {
49
+ var _a, _b, _c, _d;
50
+ if (!this.currentPlaywrightBrowserContext) {
51
+ this.currentPlaywrightBrowserContext = await this.browser.newContext(this.browserContextOptions);
52
+ this.currentPlaywrightBrowserContext.on('page', async (page) => {
53
+ await page.waitForLoadState();
54
+ this.register(new models_1.PlaywrightPage(this, page, this.browserContextOptions, model_1.CorrelationId.create()));
55
+ });
56
+ if ((_a = this.browserContextOptions) === null || _a === void 0 ? void 0 : _a.defaultNavigationTimeout) {
57
+ this.currentPlaywrightBrowserContext.setDefaultNavigationTimeout((_b = this.browserContextOptions) === null || _b === void 0 ? void 0 : _b.defaultNavigationTimeout);
58
+ }
59
+ if ((_c = this.browserContextOptions) === null || _c === void 0 ? void 0 : _c.defaultTimeout) {
60
+ this.currentPlaywrightBrowserContext.setDefaultTimeout((_d = this.browserContextOptions) === null || _d === void 0 ? void 0 : _d.defaultTimeout);
61
+ }
62
+ }
63
+ return this.currentPlaywrightBrowserContext;
64
+ }
65
+ }
66
+ exports.PlaywrightBrowsingSession = PlaywrightBrowsingSession;
67
+ //# sourceMappingURL=PlaywrightBrowsingSession.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlaywrightBrowsingSession.js","sourceRoot":"","sources":["../../../src/screenplay/models/PlaywrightBrowsingSession.ts"],"names":[],"mappings":";;;AAAA,uDAA4D;AAC5D,0CAAuE;AAIvE,sCAA6D;AAE7D;;;;;GAKG;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,QAAQ,CAAC,MAAM,GAAC,CAAC,CAAC,CAAC;IACvC,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,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAE9B,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,MAAA,IAAI,CAAC,qBAAqB,0CAAE,wBAAwB,EAAE;gBACtD,IAAI,CAAC,+BAA+B,CAAC,2BAA2B,CAAC,MAAA,IAAI,CAAC,qBAAqB,0CAAE,wBAAwB,CAAC,CAAC;aAC1H;YAED,IAAI,MAAA,IAAI,CAAC,qBAAqB,0CAAE,cAAc,EAAE;gBAC5C,IAAI,CAAC,+BAA+B,CAAC,iBAAiB,CAAC,MAAA,IAAI,CAAC,qBAAqB,0CAAE,cAAc,CAAC,CAAC;aACtG;SACJ;QAED,OAAO,IAAI,CAAC,+BAA+B,CAAC;IAChD,CAAC;CACJ;AA1ED,8DA0EC"}
@@ -0,0 +1,8 @@
1
+ import { Cookie, CookieData } from '@serenity-js/web';
2
+ import * as playwright from 'playwright-core';
3
+ export declare class PlaywrightCookie extends Cookie {
4
+ private readonly context;
5
+ constructor(context: playwright.BrowserContext, cookieName: string);
6
+ delete(): Promise<void>;
7
+ protected read(): Promise<CookieData>;
8
+ }
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PlaywrightCookie = void 0;
4
+ const core_1 = require("@serenity-js/core");
5
+ const web_1 = require("@serenity-js/web");
6
+ const tiny_types_1 = require("tiny-types");
7
+ class PlaywrightCookie extends web_1.Cookie {
8
+ constructor(context, cookieName) {
9
+ super(cookieName);
10
+ this.context = context;
11
+ (0, tiny_types_1.ensure)('context', context, (0, tiny_types_1.isDefined)());
12
+ }
13
+ async delete() {
14
+ // see https://github.com/microsoft/playwright/issues/10143
15
+ const cookies = await this.context.cookies();
16
+ await this.context.clearCookies();
17
+ await this.context.addCookies(cookies.filter(cookie => cookie.name !== this.cookieName));
18
+ }
19
+ async read() {
20
+ const cookies = await this.context.cookies();
21
+ const found = cookies.find(cookie => cookie.name === this.cookieName);
22
+ if (!found) {
23
+ throw new web_1.CookieMissingError(`Cookie '${this.cookieName}' not set`);
24
+ }
25
+ return {
26
+ name: found.name,
27
+ value: found.value,
28
+ domain: found.domain,
29
+ path: found.path,
30
+ expiry: found.expires !== undefined
31
+ ? core_1.Timestamp.fromTimestampInSeconds(Math.round(found.expires))
32
+ : undefined,
33
+ httpOnly: found.httpOnly,
34
+ secure: found.secure,
35
+ };
36
+ }
37
+ }
38
+ exports.PlaywrightCookie = PlaywrightCookie;
39
+ //# sourceMappingURL=PlaywrightCookie.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlaywrightCookie.js","sourceRoot":"","sources":["../../../src/screenplay/models/PlaywrightCookie.ts"],"names":[],"mappings":";;;AAAA,4CAA8C;AAC9C,0CAA0E;AAE1E,2CAA+C;AAE/C,MAAa,gBAAiB,SAAQ,YAAM;IAExC,YACqB,OAAkC,EACnD,UAAkB;QAElB,KAAK,CAAC,UAAU,CAAC,CAAC;QAHD,YAAO,GAAP,OAAO,CAA2B;QAInD,IAAA,mBAAM,EAAC,SAAS,EAAE,OAAO,EAAE,IAAA,sBAAS,GAAE,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,MAAM;QACR,2DAA2D;QAC3D,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QAC7C,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;QAClC,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CACzB,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,CAC5D,CAAC;IACN,CAAC;IAES,KAAK,CAAC,IAAI;QAChB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QAE7C,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC;QAEtE,IAAI,CAAE,KAAK,EAAE;YACT,MAAM,IAAI,wBAAkB,CAAC,WAAY,IAAI,CAAC,UAAW,WAAW,CAAC,CAAC;SACzE;QAED,OAAO;YACH,IAAI,EAAQ,KAAK,CAAC,IAAI;YACtB,KAAK,EAAO,KAAK,CAAC,KAAK;YACvB,MAAM,EAAM,KAAK,CAAC,MAAM;YACxB,IAAI,EAAQ,KAAK,CAAC,IAAI;YACtB,MAAM,EAAM,KAAK,CAAC,OAAO,KAAK,SAAS;gBACnC,CAAC,CAAC,gBAAS,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC7D,CAAC,CAAC,SAAS;YACf,QAAQ,EAAI,KAAK,CAAC,QAAQ;YAC1B,MAAM,EAAM,KAAK,CAAC,MAAM;SAC3B,CAAA;IACL,CAAC;CACJ;AAxCD,4CAwCC"}
@@ -0,0 +1,13 @@
1
+ import { ModalDialogHandler } from '@serenity-js/web';
2
+ import * as playwright from 'playwright-core';
3
+ export declare class PlaywrightModalDialogHandler extends ModalDialogHandler {
4
+ private readonly page;
5
+ private readonly defaultHandler;
6
+ private currentHandler;
7
+ constructor(page: playwright.Page);
8
+ acceptNext(): Promise<void>;
9
+ acceptNextWithValue(text: string | number): Promise<void>;
10
+ dismissNext(): Promise<void>;
11
+ reset(): Promise<void>;
12
+ discard(): Promise<void>;
13
+ }
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PlaywrightModalDialogHandler = void 0;
4
+ const web_1 = require("@serenity-js/web");
5
+ class PlaywrightModalDialogHandler extends web_1.ModalDialogHandler {
6
+ constructor(page) {
7
+ super();
8
+ this.page = page;
9
+ this.defaultHandler = async (dialog) => {
10
+ await dialog.dismiss();
11
+ return new web_1.DismissedModalDialog(dialog.message());
12
+ };
13
+ this.currentHandler = this.defaultHandler;
14
+ this.page.on('dialog', async (dialog) => {
15
+ this.modalDialog = await this.currentHandler(dialog);
16
+ });
17
+ }
18
+ async acceptNext() {
19
+ this.currentHandler = async (dialog) => {
20
+ await dialog.accept(dialog.defaultValue());
21
+ return new web_1.AcceptedModalDialog(dialog.message());
22
+ };
23
+ }
24
+ async acceptNextWithValue(text) {
25
+ this.currentHandler = async (dialog) => {
26
+ await dialog.accept(String(text));
27
+ return new web_1.AcceptedModalDialog(dialog.message());
28
+ };
29
+ }
30
+ async dismissNext() {
31
+ this.currentHandler = async (dialog) => {
32
+ await dialog.dismiss();
33
+ return new web_1.DismissedModalDialog(dialog.message());
34
+ };
35
+ }
36
+ async reset() {
37
+ this.modalDialog = new web_1.AbsentModalDialog();
38
+ this.currentHandler = this.defaultHandler;
39
+ }
40
+ async discard() {
41
+ this.page.off('dialog', this.currentHandler);
42
+ }
43
+ }
44
+ exports.PlaywrightModalDialogHandler = PlaywrightModalDialogHandler;
45
+ //# sourceMappingURL=PlaywrightModalDialogHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlaywrightModalDialogHandler.js","sourceRoot":"","sources":["../../../src/screenplay/models/PlaywrightModalDialogHandler.ts"],"names":[],"mappings":";;;AAAA,0CAAiI;AAGjI,MAAa,4BAA6B,SAAQ,wBAAkB;IAUhE,YAA6B,IAAqB;QAC9C,KAAK,EAAE,CAAC;QADiB,SAAI,GAAJ,IAAI,CAAiB;QARjC,mBAAc,GAC3B,KAAK,EAAE,MAAyB,EAAE,EAAE;YAChC,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;YACvB,OAAO,IAAI,0BAAoB,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QACtD,CAAC,CAAA;QAOD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;QAE1C,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAyB,EAAE,EAAE;YACvD,IAAI,CAAC,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;IACP,CAAC;IAED,KAAK,CAAC,UAAU;QACZ,IAAI,CAAC,cAAc,GAAG,KAAK,EAAE,MAAyB,EAAE,EAAE;YACtD,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;YAC3C,OAAO,IAAI,yBAAmB,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QACrD,CAAC,CAAA;IACL,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,IAAqB;QAC3C,IAAI,CAAC,cAAc,GAAG,KAAK,EAAE,MAAyB,EAAE,EAAE;YACtD,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;YAClC,OAAO,IAAI,yBAAmB,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QACrD,CAAC,CAAA;IACL,CAAC;IAED,KAAK,CAAC,WAAW;QACb,IAAI,CAAC,cAAc,GAAG,KAAK,EAAE,MAAyB,EAAE,EAAE;YACtD,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;YACvB,OAAO,IAAI,0BAAoB,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QACtD,CAAC,CAAA;IACL,CAAC;IAED,KAAK,CAAC,KAAK;QACP,IAAI,CAAC,WAAW,GAAG,IAAI,uBAAiB,EAAE,CAAC;QAC3C,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,OAAO;QACT,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;IACjD,CAAC;CACJ;AAjDD,oEAiDC"}
@@ -0,0 +1,58 @@
1
+ /// <reference types="node" />
2
+ import { CorrelationId } from '@serenity-js/core/lib/model';
3
+ import { Cookie, CookieData, Key, Page, PageElement, PageElements, Selector } from '@serenity-js/web';
4
+ import * as playwright from 'playwright-core';
5
+ import { URL } from 'url';
6
+ import { PlaywrightOptions } from '../../PlaywrightOptions';
7
+ import { PlaywrightBrowsingSession } from './PlaywrightBrowsingSession';
8
+ /**
9
+ * @desc
10
+ * Playwright-specific implementation of the {@link @serenity-js/web/lib/screenplay/models~Page}.
11
+ *
12
+ * @see {@link @serenity-js/web/lib/screenplay/models~Page}
13
+ */
14
+ export declare class PlaywrightPage extends Page<playwright.ElementHandle> {
15
+ private readonly page;
16
+ private readonly options;
17
+ /**
18
+ * @private
19
+ */
20
+ private lastScriptExecutionSummary;
21
+ constructor(session: PlaywrightBrowsingSession, page: playwright.Page, options: PlaywrightOptions, pageId: CorrelationId);
22
+ locate(selector: Selector): PageElement<playwright.ElementHandle>;
23
+ locateAll(selector: Selector): PageElements<playwright.ElementHandle>;
24
+ navigateTo(destination: string): Promise<void>;
25
+ navigateBack(): Promise<void>;
26
+ navigateForward(): Promise<void>;
27
+ reload(): Promise<void>;
28
+ sendKeys(keys: (string | Key)[]): Promise<void>;
29
+ executeScript<Result, InnerArguments extends any[]>(script: string | ((...parameters: InnerArguments) => Result), ...args: InnerArguments): Promise<Result>;
30
+ executeAsyncScript<Result, Parameters extends any[]>(script: string | ((...args: [...parameters: Parameters, callback: (result: Result) => void]) => void), ...args: Parameters): Promise<Result>;
31
+ /**
32
+ * @desc
33
+ * Returns the last result of calling {@link BrowseTheWebWithPlaywright#executeAsyncScript}
34
+ * or {@link BrowseTheWebWithPlaywright#executeScript}
35
+ *
36
+ * @returns {any}
37
+ */
38
+ lastScriptExecutionResult<Result = any>(): Result;
39
+ takeScreenshot(): Promise<string>;
40
+ cookie(name: string): Promise<Cookie>;
41
+ setCookie(cookieData: CookieData): Promise<void>;
42
+ deleteAllCookies(): Promise<void>;
43
+ title(): Promise<string>;
44
+ name(): Promise<string>;
45
+ url(): Promise<URL>;
46
+ viewportSize(): Promise<{
47
+ width: number;
48
+ height: number;
49
+ }>;
50
+ setViewportSize(size: {
51
+ width: number;
52
+ height: number;
53
+ }): Promise<void>;
54
+ close(): Promise<void>;
55
+ closeOthers(): Promise<void>;
56
+ isPresent(): Promise<boolean>;
57
+ private resetState;
58
+ }
@@ -0,0 +1,177 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PlaywrightPage = void 0;
4
+ const core_1 = require("@serenity-js/core");
5
+ const web_1 = require("@serenity-js/web");
6
+ const url_1 = require("url");
7
+ const locators_1 = require("./locators");
8
+ const PlaywrightModalDialogHandler_1 = require("./PlaywrightModalDialogHandler");
9
+ const PlaywrightPageElement_1 = require("./PlaywrightPageElement");
10
+ /**
11
+ * @desc
12
+ * Playwright-specific implementation of the {@link @serenity-js/web/lib/screenplay/models~Page}.
13
+ *
14
+ * @see {@link @serenity-js/web/lib/screenplay/models~Page}
15
+ */
16
+ class PlaywrightPage extends web_1.Page {
17
+ constructor(session, page, options, pageId) {
18
+ super(session, new locators_1.PlaywrightRootLocator(page), new PlaywrightModalDialogHandler_1.PlaywrightModalDialogHandler(page), pageId);
19
+ this.page = page;
20
+ this.options = options;
21
+ }
22
+ locate(selector) {
23
+ return new PlaywrightPageElement_1.PlaywrightPageElement(new locators_1.PlaywrightLocator(this.rootLocator, selector));
24
+ }
25
+ locateAll(selector) {
26
+ return new web_1.PageElements(new locators_1.PlaywrightLocator(this.rootLocator, selector));
27
+ }
28
+ async navigateTo(destination) {
29
+ var _a;
30
+ await this.page.goto(destination, { waitUntil: (_a = this.options) === null || _a === void 0 ? void 0 : _a.defaultNavigationWaitUntil });
31
+ await this.resetState();
32
+ }
33
+ async navigateBack() {
34
+ var _a;
35
+ await this.page.goBack({ waitUntil: (_a = this.options) === null || _a === void 0 ? void 0 : _a.defaultNavigationWaitUntil });
36
+ await this.resetState();
37
+ }
38
+ async navigateForward() {
39
+ var _a;
40
+ await this.page.goForward({ waitUntil: (_a = this.options) === null || _a === void 0 ? void 0 : _a.defaultNavigationWaitUntil });
41
+ await this.resetState();
42
+ }
43
+ async reload() {
44
+ var _a;
45
+ await this.page.reload({ waitUntil: (_a = this.options) === null || _a === void 0 ? void 0 : _a.defaultNavigationWaitUntil });
46
+ await this.resetState();
47
+ }
48
+ async sendKeys(keys) {
49
+ const keySequence = keys.map(key => {
50
+ if (!web_1.Key.isKey(key)) {
51
+ return key;
52
+ }
53
+ return key.devtoolsName;
54
+ });
55
+ await this.page.keyboard.press(keySequence.join('+'));
56
+ }
57
+ async executeScript(script, ...args) {
58
+ const nativeArguments = await Promise.all(args.map(arg => arg instanceof PlaywrightPageElement_1.PlaywrightPageElement
59
+ ? arg.nativeElement()
60
+ : arg));
61
+ const serialisedScript = typeof script === 'function'
62
+ ? String(script)
63
+ : String(`function script() { ${script} }`);
64
+ const result = await this.page.evaluate(new Function(`
65
+ const parameters = arguments[0];
66
+ return (${serialisedScript}).apply(null, parameters);
67
+ `), nativeArguments);
68
+ this.lastScriptExecutionSummary = new LastScriptExecutionSummary(result);
69
+ return result;
70
+ }
71
+ async executeAsyncScript(script, ...args) {
72
+ const nativeArguments = await Promise.all(args.map(arg => arg instanceof PlaywrightPageElement_1.PlaywrightPageElement
73
+ ? arg.nativeElement()
74
+ : arg));
75
+ const serialisedScript = typeof script === 'function'
76
+ ? String(script)
77
+ : String(`function script() { ${script} }`);
78
+ const result = await this.page.evaluate(new Function(`
79
+ const parameters = arguments[0];
80
+
81
+ return new Promise((resolve, reject) => {
82
+ try {
83
+ return (${serialisedScript}).apply(null, parameters.concat(resolve));
84
+ } catch (error) {
85
+ return reject(error);
86
+ }
87
+ })
88
+ `), nativeArguments);
89
+ this.lastScriptExecutionSummary = new LastScriptExecutionSummary(result);
90
+ return result;
91
+ }
92
+ /**
93
+ * @desc
94
+ * Returns the last result of calling {@link BrowseTheWebWithPlaywright#executeAsyncScript}
95
+ * or {@link BrowseTheWebWithPlaywright#executeScript}
96
+ *
97
+ * @returns {any}
98
+ */
99
+ lastScriptExecutionResult() {
100
+ if (!this.lastScriptExecutionSummary) {
101
+ throw new core_1.LogicError(`Make sure to execute a script before checking on the result`);
102
+ }
103
+ return this.lastScriptExecutionSummary.result;
104
+ }
105
+ async takeScreenshot() {
106
+ const screenshot = await this.page.screenshot();
107
+ return screenshot.toString('base64');
108
+ }
109
+ async cookie(name) {
110
+ return this.session.cookie(name);
111
+ }
112
+ async setCookie(cookieData) {
113
+ const url = await this.page.url();
114
+ const cookie = {
115
+ name: cookieData.name,
116
+ value: cookieData.value,
117
+ domain: cookieData.domain,
118
+ path: cookieData.path,
119
+ url: !(cookieData.domain && cookieData.path)
120
+ ? url
121
+ : undefined,
122
+ secure: cookieData.secure,
123
+ httpOnly: cookieData.httpOnly,
124
+ expires: cookieData.expiry
125
+ ? cookieData.expiry.toSeconds()
126
+ : undefined,
127
+ sameSite: cookieData.sameSite,
128
+ };
129
+ return this.session.setCookie(cookie);
130
+ }
131
+ async deleteAllCookies() {
132
+ await this.session.deleteAllCookies();
133
+ }
134
+ title() {
135
+ return this.page.title();
136
+ }
137
+ name() {
138
+ return this.page.evaluate(
139
+ /* istanbul ignore next */
140
+ () => window.name);
141
+ }
142
+ async url() {
143
+ return new url_1.URL(this.page.url());
144
+ }
145
+ async viewportSize() {
146
+ return this.page.viewportSize();
147
+ }
148
+ setViewportSize(size) {
149
+ return this.page.setViewportSize(size);
150
+ }
151
+ async close() {
152
+ await this.resetState();
153
+ await this.modalDialogHandler.discard();
154
+ await this.page.close();
155
+ }
156
+ async closeOthers() {
157
+ await this.session.closePagesOtherThan(this);
158
+ }
159
+ async isPresent() {
160
+ return !this.page.isClosed();
161
+ }
162
+ async resetState() {
163
+ this.lastScriptExecutionSummary = undefined;
164
+ await this.rootLocator.switchToMainFrame();
165
+ await this.modalDialogHandler.reset();
166
+ }
167
+ }
168
+ exports.PlaywrightPage = PlaywrightPage;
169
+ /**
170
+ * @package
171
+ */
172
+ class LastScriptExecutionSummary {
173
+ constructor(result) {
174
+ this.result = result;
175
+ }
176
+ }
177
+ //# sourceMappingURL=PlaywrightPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlaywrightPage.js","sourceRoot":"","sources":["../../../src/screenplay/models/PlaywrightPage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { PageElement, SelectOption, SwitchableOrigin } from '@serenity-js/web';
2
+ import * as playwright from 'playwright-core';
3
+ export declare class PlaywrightPageElement extends PageElement<playwright.ElementHandle> {
4
+ of(parent: PageElement<playwright.ElementHandle>): PageElement<playwright.ElementHandle>;
5
+ enterValue(value: string | number | Array<string | number>): Promise<void>;
6
+ clearValue(): Promise<void>;
7
+ click(): Promise<void>;
8
+ doubleClick(): Promise<void>;
9
+ scrollIntoView(): Promise<void>;
10
+ hoverOver(): Promise<void>;
11
+ rightClick(): Promise<void>;
12
+ selectOptions(...options: Array<SelectOption>): Promise<void>;
13
+ selectedOptions(): Promise<Array<SelectOption>>;
14
+ attribute(name: string): Promise<string>;
15
+ text(): Promise<string>;
16
+ value(): Promise<string>;
17
+ switchTo(): Promise<SwitchableOrigin>;
18
+ isActive(): Promise<boolean>;
19
+ isClickable(): Promise<boolean>;
20
+ isEnabled(): Promise<boolean>;
21
+ isPresent(): Promise<boolean>;
22
+ isSelected(): Promise<boolean>;
23
+ isVisible(): Promise<boolean>;
24
+ }