@serenity-js/playwright 3.22.3 → 3.23.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 +23 -0
- package/lib/screenplay/models/PlaywrightPage.d.ts +3 -2
- package/lib/screenplay/models/PlaywrightPage.d.ts.map +1 -1
- package/lib/screenplay/models/PlaywrightPage.js +49 -22
- package/lib/screenplay/models/PlaywrightPage.js.map +1 -1
- package/package.json +6 -6
- package/src/screenplay/models/PlaywrightPage.ts +44 -35
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,29 @@
|
|
|
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.23.0](https://github.com/serenity-js/serenity-js/compare/v3.22.4...v3.23.0) (2024-05-12)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* **playwright:** standardised ExecuteScript argument transmission across WebdriverIO and Playwright ([adfc171](https://github.com/serenity-js/serenity-js/commit/adfc171aa5073ec57d6896bbd824013e5844eda4))
|
|
12
|
+
* **web:** scripts injected into the browser accept data structures containing PageElement objects ([2fbddf5](https://github.com/serenity-js/serenity-js/commit/2fbddf5d78d2965aecd6786b020c93ea079bdaf1))
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
## [3.22.4](https://github.com/serenity-js/serenity-js/compare/v3.22.3...v3.22.4) (2024-05-07)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
### Bug Fixes
|
|
22
|
+
|
|
23
|
+
* **deps:** update playwright dependencies to v1.44.0 ([ae659d6](https://github.com/serenity-js/serenity-js/commit/ae659d6bbd389805061a163ac8e38386363636ec))
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
|
|
6
29
|
## [3.22.3](https://github.com/serenity-js/serenity-js/compare/v3.22.2...v3.22.3) (2024-05-01)
|
|
7
30
|
|
|
8
31
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import { type QuestionAdapter } from '@serenity-js/core';
|
|
3
3
|
import type { CorrelationId } from '@serenity-js/core/lib/model';
|
|
4
|
-
import type { Cookie, CookieData,
|
|
5
|
-
import { Key, Page } from '@serenity-js/web';
|
|
4
|
+
import type { Cookie, CookieData, PageElements, Selector } from '@serenity-js/web';
|
|
5
|
+
import { Key, Page, PageElement } from '@serenity-js/web';
|
|
6
6
|
import type * as playwright from 'playwright-core';
|
|
7
7
|
import { URL } from 'url';
|
|
8
8
|
import type { PlaywrightOptions } from '../../PlaywrightOptions';
|
|
@@ -16,6 +16,7 @@ export declare class PlaywrightPage extends Page<playwright.Locator> {
|
|
|
16
16
|
private readonly page;
|
|
17
17
|
private readonly options;
|
|
18
18
|
private lastScriptExecutionSummary;
|
|
19
|
+
private dehydrator;
|
|
19
20
|
static current(): QuestionAdapter<PlaywrightPage>;
|
|
20
21
|
constructor(session: PlaywrightBrowsingSession, page: playwright.Page, options: PlaywrightOptions, pageId: CorrelationId);
|
|
21
22
|
createPageElement(nativeElement: playwright.Locator): PageElement<playwright.Locator>;
|
|
@@ -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;
|
|
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;AAC3E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACnF,OAAO,EAA2D,GAAG,EAAE,IAAI,EAAE,WAAW,EAAuB,MAAM,kBAAkB,CAAC;AAExI,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;IAoBpD,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAnB5B,OAAO,CAAC,0BAA0B,CAA6B;IAG/D,OAAO,CAAC,UAAU,CAMhB;WAGc,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,iBAAiB,CAAC,aAAa,EAAE,UAAU,CAAC,OAAO,GAAG,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC;IAUrF,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;IAWzD,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,EACpD,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,UAAU,EAAE,cAAc,KAAK,MAAM,CAAC,EAC5D,GAAG,IAAI,EAAE,cAAc,GACxB,OAAO,CAAC,MAAM,CAAC;IAyBZ,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;IAgCnN,yBAAyB,CAAC,MAAM,GAAG,GAAG,KAAK,MAAM;IAQ3C,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;IAmBjC,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,9 +1,32 @@
|
|
|
1
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
2
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
26
|
exports.PlaywrightPage = void 0;
|
|
4
27
|
const core_1 = require("@serenity-js/core");
|
|
5
|
-
const io_1 = require("@serenity-js/core/lib/io");
|
|
6
28
|
const web_1 = require("@serenity-js/web");
|
|
29
|
+
const scripts = __importStar(require("@serenity-js/web/lib/scripts"));
|
|
7
30
|
const url_1 = require("url");
|
|
8
31
|
const promised_1 = require("../promised");
|
|
9
32
|
const locators_1 = require("./locators");
|
|
@@ -18,6 +41,12 @@ class PlaywrightPage extends web_1.Page {
|
|
|
18
41
|
page;
|
|
19
42
|
options;
|
|
20
43
|
lastScriptExecutionSummary;
|
|
44
|
+
/* eslint-disable unicorn/consistent-function-scoping */
|
|
45
|
+
dehydrator = new web_1.ArgumentDehydrator((item) => item instanceof web_1.PageElement, async (item) => {
|
|
46
|
+
const nativeElement = await item.nativeElement();
|
|
47
|
+
return nativeElement.elementHandle();
|
|
48
|
+
});
|
|
49
|
+
/* eslint-enable */
|
|
21
50
|
static current() {
|
|
22
51
|
return super.current();
|
|
23
52
|
}
|
|
@@ -61,37 +90,35 @@ class PlaywrightPage extends web_1.Page {
|
|
|
61
90
|
await this.page.keyboard.press(keySequence.join('+'));
|
|
62
91
|
}
|
|
63
92
|
async executeScript(script, ...args) {
|
|
64
|
-
const nativeArguments = await (0, io_1.asyncMap)(args, item => item instanceof PlaywrightPageElement_1.PlaywrightPageElement
|
|
65
|
-
? item.nativeElement().then(element => element.elementHandle())
|
|
66
|
-
: item);
|
|
67
93
|
const serialisedScript = typeof script === 'function'
|
|
68
94
|
? String(script)
|
|
69
95
|
: String(`function script() { ${script} }`);
|
|
70
|
-
const
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
96
|
+
const executableScript = new Function(`
|
|
97
|
+
const parameters = (${scripts.rehydrate}).apply(null, arguments[0]);
|
|
98
|
+
return (${serialisedScript}).apply(null, parameters);
|
|
99
|
+
`);
|
|
100
|
+
const dehydratedArguments = await this.dehydrator.dehydrate(args);
|
|
101
|
+
const result = await this.rootLocator.evaluate(executableScript, dehydratedArguments);
|
|
74
102
|
this.lastScriptExecutionSummary = new LastScriptExecutionSummary(result);
|
|
75
103
|
return result;
|
|
76
104
|
}
|
|
77
105
|
async executeAsyncScript(script, ...args) {
|
|
78
|
-
const nativeArguments = await (0, io_1.asyncMap)(args, item => item instanceof PlaywrightPageElement_1.PlaywrightPageElement
|
|
79
|
-
? item.nativeElement().then(element => element.elementHandle())
|
|
80
|
-
: item);
|
|
81
106
|
const serialisedScript = typeof script === 'function'
|
|
82
107
|
? String(script)
|
|
83
108
|
: String(`function script() { ${script} }`);
|
|
84
|
-
const
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
109
|
+
const executableScript = new Function(`
|
|
110
|
+
const parameters = (${scripts.rehydrate}).apply(null, arguments[0]);
|
|
111
|
+
|
|
112
|
+
return new Promise((resolve, reject) => {
|
|
113
|
+
try {
|
|
114
|
+
return (${serialisedScript}).apply(null, parameters.concat(resolve));
|
|
115
|
+
} catch (error) {
|
|
116
|
+
return reject(error);
|
|
117
|
+
}
|
|
118
|
+
})
|
|
119
|
+
`);
|
|
120
|
+
const dehydratedArguments = await this.dehydrator.dehydrate(args);
|
|
121
|
+
const result = await this.rootLocator.evaluate(executableScript, dehydratedArguments);
|
|
95
122
|
this.lastScriptExecutionSummary = new LastScriptExecutionSummary(result);
|
|
96
123
|
return result;
|
|
97
124
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlaywrightPage.js","sourceRoot":"","sources":["../../../src/screenplay/models/PlaywrightPage.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PlaywrightPage.js","sourceRoot":"","sources":["../../../src/screenplay/models/PlaywrightPage.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4CAA2E;AAG3E,0CAAwI;AACxI,sEAAwD;AAExD,6BAA0B;AAG1B,0CAAuC;AACvC,yCAAwG;AAExG,iFAA8E;AAC9E,mEAAgE;AAEhE;;;;GAIG;AACH,MAAa,cAAe,SAAQ,UAAwB;IAoBnC;IACA;IAnBb,0BAA0B,CAA6B;IAE/D,wDAAwD;IAChD,UAAU,GAAkF,IAAI,wBAAkB,CACtH,CAAC,IAAS,EAA2C,EAAE,CAAC,IAAI,YAAY,iBAAW,EACnF,KAAK,EAAE,IAAqC,EAAE,EAAE;QAC5C,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QACjD,OAAO,aAAa,CAAC,aAAa,EAAE,CAAC;IACzC,CAAC,CACJ,CAAC;IACF,mBAAmB;IAEnB,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,CACf,MAA4D,EAC5D,GAAG,IAAoB;QAGvB,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,gBAAgB,GAAgD,IAAI,QAAQ,CAAC;kCACxD,OAAO,CAAC,SAAU;sBAC9B,gBAAiB;SAC/B,CAAC,CAAC;QAEH,MAAM,mBAAmB,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAElE,MAAM,MAAM,GAAG,MAAO,IAAI,CAAC,WAAqC,CAAC,QAAQ,CACrE,gBAAgB,EAChB,mBAAmB,CACtB,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,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,gBAAgB,GAAgD,IAAI,QAAQ,CAAC;kCACxD,OAAO,CAAC,SAAU;;;;8BAItB,gBAAiB;;;;;SAKvC,CAAC,CAAC;QAEH,MAAM,mBAAmB,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAElE,MAAM,MAAM,GAAG,MAAO,IAAI,CAAC,WAAqC,CAAC,QAAQ,CACrE,gBAAgB,EAChB,mBAAmB,CACtB,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;AAzQD,wCAyQC;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.23.0",
|
|
4
4
|
"description": "Serenity/JS Screenplay Pattern library for Playwright",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Jan Molak",
|
|
@@ -44,14 +44,14 @@
|
|
|
44
44
|
"node": "^16.13 || ^18.12 || ^20"
|
|
45
45
|
},
|
|
46
46
|
"dependencies": {
|
|
47
|
-
"@serenity-js/core": "3.
|
|
48
|
-
"@serenity-js/web": "3.
|
|
49
|
-
"playwright-core": "1.
|
|
47
|
+
"@serenity-js/core": "3.23.0",
|
|
48
|
+
"@serenity-js/web": "3.23.0",
|
|
49
|
+
"playwright-core": "1.44.0",
|
|
50
50
|
"tiny-types": "1.22.0"
|
|
51
51
|
},
|
|
52
52
|
"devDependencies": {
|
|
53
53
|
"@integration/testing-tools": "3.0.0",
|
|
54
|
-
"@types/chai": "4.3.
|
|
54
|
+
"@types/chai": "4.3.16",
|
|
55
55
|
"@types/mocha": "10.0.6",
|
|
56
56
|
"c8": "9.1.0",
|
|
57
57
|
"mocha": "10.4.0",
|
|
@@ -59,5 +59,5 @@
|
|
|
59
59
|
"ts-node": "10.9.2",
|
|
60
60
|
"typescript": "5.2.2"
|
|
61
61
|
},
|
|
62
|
-
"gitHead": "
|
|
62
|
+
"gitHead": "be1bb276388c295df01146eb8589a003b3d8214c"
|
|
63
63
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { List, LogicError, type QuestionAdapter } from '@serenity-js/core';
|
|
2
|
-
import { asyncMap } from '@serenity-js/core/lib/io';
|
|
3
2
|
import type { CorrelationId } from '@serenity-js/core/lib/model';
|
|
4
|
-
import type { Cookie, CookieData,
|
|
5
|
-
import { BrowserWindowClosedError, ByDeepCss, Key, Page, PageElementsLocator } from '@serenity-js/web';
|
|
3
|
+
import type { Cookie, CookieData, PageElements, Selector } from '@serenity-js/web';
|
|
4
|
+
import { ArgumentDehydrator, BrowserWindowClosedError, ByDeepCss, Key, Page, PageElement, PageElementsLocator } from '@serenity-js/web';
|
|
5
|
+
import * as scripts from '@serenity-js/web/lib/scripts';
|
|
6
6
|
import type * as playwright from 'playwright-core';
|
|
7
7
|
import { URL } from 'url';
|
|
8
8
|
|
|
@@ -22,6 +22,16 @@ export class PlaywrightPage extends Page<playwright.Locator> {
|
|
|
22
22
|
|
|
23
23
|
private lastScriptExecutionSummary: LastScriptExecutionSummary;
|
|
24
24
|
|
|
25
|
+
/* eslint-disable unicorn/consistent-function-scoping */
|
|
26
|
+
private dehydrator: ArgumentDehydrator<PageElement<playwright.Locator>, playwright.ElementHandle> = new ArgumentDehydrator(
|
|
27
|
+
(item: any): item is PageElement<playwright.Locator> => item instanceof PageElement,
|
|
28
|
+
async (item: PageElement<playwright.Locator>) => {
|
|
29
|
+
const nativeElement = await item.nativeElement();
|
|
30
|
+
return nativeElement.elementHandle();
|
|
31
|
+
},
|
|
32
|
+
);
|
|
33
|
+
/* eslint-enable */
|
|
34
|
+
|
|
25
35
|
static override current(): QuestionAdapter<PlaywrightPage> {
|
|
26
36
|
return super.current() as QuestionAdapter<PlaywrightPage>;
|
|
27
37
|
}
|
|
@@ -104,24 +114,25 @@ export class PlaywrightPage extends Page<playwright.Locator> {
|
|
|
104
114
|
);
|
|
105
115
|
}
|
|
106
116
|
|
|
107
|
-
async executeScript<Result, InnerArguments extends any[]>(
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
? item.nativeElement().then(element => element.elementHandle())
|
|
112
|
-
: item
|
|
113
|
-
) as InnerArguments;
|
|
117
|
+
async executeScript<Result, InnerArguments extends any[]>(
|
|
118
|
+
script: string | ((...parameters: InnerArguments) => Result),
|
|
119
|
+
...args: InnerArguments
|
|
120
|
+
): Promise<Result> {
|
|
114
121
|
|
|
115
122
|
const serialisedScript = typeof script === 'function'
|
|
116
123
|
? String(script)
|
|
117
124
|
: String(`function script() { ${ script } }`);
|
|
118
125
|
|
|
119
|
-
const
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
126
|
+
const executableScript: Parameters<playwright.Frame['evaluate']>[1] = new Function(`
|
|
127
|
+
const parameters = (${ scripts.rehydrate }).apply(null, arguments[0]);
|
|
128
|
+
return (${ serialisedScript }).apply(null, parameters);
|
|
129
|
+
`);
|
|
130
|
+
|
|
131
|
+
const dehydratedArguments = await this.dehydrator.dehydrate(args);
|
|
132
|
+
|
|
133
|
+
const result = await (this.rootLocator as PlaywrightRootLocator).evaluate<Result, typeof dehydratedArguments>(
|
|
134
|
+
executableScript,
|
|
135
|
+
dehydratedArguments,
|
|
125
136
|
);
|
|
126
137
|
|
|
127
138
|
this.lastScriptExecutionSummary = new LastScriptExecutionSummary(
|
|
@@ -133,29 +144,27 @@ export class PlaywrightPage extends Page<playwright.Locator> {
|
|
|
133
144
|
|
|
134
145
|
async executeAsyncScript<Result, InnerArguments extends any[]>(script: string | ((...args: [...parameters: InnerArguments, callback: (result: Result) => void]) => void), ...args: InnerArguments): Promise<Result> {
|
|
135
146
|
|
|
136
|
-
const nativeArguments = await asyncMap(args, item =>
|
|
137
|
-
item instanceof PlaywrightPageElement
|
|
138
|
-
? item.nativeElement().then(element => element.elementHandle())
|
|
139
|
-
: item
|
|
140
|
-
) as InnerArguments;
|
|
141
|
-
|
|
142
147
|
const serialisedScript = typeof script === 'function'
|
|
143
148
|
? String(script)
|
|
144
149
|
: String(`function script() { ${ script } }`);
|
|
145
150
|
|
|
146
|
-
const
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
151
|
+
const executableScript: Parameters<playwright.Frame['evaluate']>[1] = new Function(`
|
|
152
|
+
const parameters = (${ scripts.rehydrate }).apply(null, arguments[0]);
|
|
153
|
+
|
|
154
|
+
return new Promise((resolve, reject) => {
|
|
155
|
+
try {
|
|
156
|
+
return (${ serialisedScript }).apply(null, parameters.concat(resolve));
|
|
157
|
+
} catch (error) {
|
|
158
|
+
return reject(error);
|
|
159
|
+
}
|
|
160
|
+
})
|
|
161
|
+
`);
|
|
162
|
+
|
|
163
|
+
const dehydratedArguments = await this.dehydrator.dehydrate(args);
|
|
164
|
+
|
|
165
|
+
const result = await (this.rootLocator as PlaywrightRootLocator).evaluate<Result, typeof dehydratedArguments>(
|
|
166
|
+
executableScript,
|
|
167
|
+
dehydratedArguments
|
|
159
168
|
);
|
|
160
169
|
|
|
161
170
|
this.lastScriptExecutionSummary = new LastScriptExecutionSummary(
|