@serenity-js/protractor 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 +20 -0
- package/lib/screenplay/models/ProtractorPage.d.ts +9 -11
- package/lib/screenplay/models/ProtractorPage.d.ts.map +1 -1
- package/lib/screenplay/models/ProtractorPage.js +52 -21
- package/lib/screenplay/models/ProtractorPage.js.map +1 -1
- package/package.json +11 -11
- package/src/screenplay/models/ProtractorPage.ts +46 -29
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,26 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [3.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
|
+
* **protractor:** standardised ExecuteScript argument transmission across all web integration tools ([1a08f47](https://github.com/serenity-js/serenity-js/commit/1a08f47c32a01af76cafae55af23582167e2bd88))
|
|
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
|
+
**Note:** Version bump only for package @serenity-js/protractor
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
6
26
|
## [3.22.3](https://github.com/serenity-js/serenity-js/compare/v3.22.2...v3.22.3) (2024-05-01)
|
|
7
27
|
|
|
8
28
|
**Note:** Version bump only for package @serenity-js/protractor
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import type { CorrelationId } from '@serenity-js/core/lib/model';
|
|
3
|
-
import type { Cookie, CookieData, ModalDialogHandler,
|
|
4
|
-
import { Key, Page } from '@serenity-js/web';
|
|
5
|
-
import type
|
|
3
|
+
import type { Cookie, CookieData, ModalDialogHandler, PageElements, Selector } from '@serenity-js/web';
|
|
4
|
+
import { Key, Page, PageElement } from '@serenity-js/web';
|
|
5
|
+
import type * as protractor from 'protractor';
|
|
6
6
|
import { URL } from 'url';
|
|
7
7
|
import type { ProtractorBrowsingSession } from './ProtractorBrowsingSession';
|
|
8
8
|
import type { ProtractorErrorHandler } from './ProtractorErrorHandler';
|
|
@@ -11,17 +11,15 @@ import type { ProtractorErrorHandler } from './ProtractorErrorHandler';
|
|
|
11
11
|
*
|
|
12
12
|
* @group Models
|
|
13
13
|
*/
|
|
14
|
-
export declare class ProtractorPage extends Page<ElementFinder> {
|
|
14
|
+
export declare class ProtractorPage extends Page<protractor.ElementFinder> {
|
|
15
15
|
private readonly browser;
|
|
16
16
|
private readonly errorHandler;
|
|
17
|
-
/**
|
|
18
|
-
* @private
|
|
19
|
-
*/
|
|
20
17
|
private lastScriptExecutionSummary;
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
18
|
+
private dehydrator;
|
|
19
|
+
constructor(session: ProtractorBrowsingSession, browser: protractor.ProtractorBrowser, modalDialogHandler: ModalDialogHandler, errorHandler: ProtractorErrorHandler, pageId: CorrelationId);
|
|
20
|
+
createPageElement(nativeElement: protractor.ElementFinder): PageElement<protractor.ElementFinder>;
|
|
21
|
+
locate(selector: Selector): PageElement<protractor.ElementFinder>;
|
|
22
|
+
locateAll(selector: Selector): PageElements<protractor.ElementFinder>;
|
|
25
23
|
/**
|
|
26
24
|
* If set to `false`, Protractor will not wait for Angular 1.x `$http` and `$timeout`
|
|
27
25
|
* tasks to complete before interacting with the browser.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProtractorPage.d.ts","sourceRoot":"","sources":["../../../src/screenplay/models/ProtractorPage.ts"],"names":[],"mappings":";AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,kBAAkB,EAAE,
|
|
1
|
+
{"version":3,"file":"ProtractorPage.d.ts","sourceRoot":"","sources":["../../../src/screenplay/models/ProtractorPage.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +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.ProtractorPage = void 0;
|
|
4
27
|
const core_1 = require("@serenity-js/core");
|
|
5
28
|
const web_1 = require("@serenity-js/web");
|
|
29
|
+
const scripts = __importStar(require("@serenity-js/web/lib/scripts"));
|
|
6
30
|
const url_1 = require("url");
|
|
7
31
|
const promised_1 = require("../promised");
|
|
8
32
|
const locators_1 = require("./locators");
|
|
@@ -17,10 +41,13 @@ const ProtractorPageElement_1 = require("./ProtractorPageElement");
|
|
|
17
41
|
class ProtractorPage extends web_1.Page {
|
|
18
42
|
browser;
|
|
19
43
|
errorHandler;
|
|
20
|
-
/**
|
|
21
|
-
* @private
|
|
22
|
-
*/
|
|
23
44
|
lastScriptExecutionSummary;
|
|
45
|
+
/* eslint-disable unicorn/consistent-function-scoping */
|
|
46
|
+
dehydrator = new web_1.ArgumentDehydrator((item) => item instanceof web_1.PageElement, async (item) => {
|
|
47
|
+
const nativeElement = await item.nativeElement();
|
|
48
|
+
return nativeElement.getWebElement();
|
|
49
|
+
});
|
|
50
|
+
/* eslint-enable */
|
|
24
51
|
constructor(session, browser, modalDialogHandler, errorHandler, pageId) {
|
|
25
52
|
super(session, new locators_1.ProtractorRootLocator(browser), modalDialogHandler, pageId);
|
|
26
53
|
this.browser = browser;
|
|
@@ -111,29 +138,33 @@ class ProtractorPage extends web_1.Page {
|
|
|
111
138
|
});
|
|
112
139
|
}
|
|
113
140
|
async executeScript(script, ...args) {
|
|
114
|
-
const
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
const result = await this.inContextOfThisPage(() => {
|
|
122
|
-
|
|
141
|
+
const serialisedScript = typeof script === 'function'
|
|
142
|
+
? String(script)
|
|
143
|
+
: String(`function script() { ${script} }`);
|
|
144
|
+
const executableScript = new Function(`
|
|
145
|
+
var parameters = (${scripts.rehydrate}).apply(null, arguments);
|
|
146
|
+
return (${serialisedScript}).apply(null, parameters);
|
|
147
|
+
`);
|
|
148
|
+
const result = await this.inContextOfThisPage(async () => {
|
|
149
|
+
const dehydratedArguments = await this.dehydrator.dehydrate(args);
|
|
150
|
+
return (0, promised_1.promised)(this.browser.executeScript(executableScript, ...dehydratedArguments));
|
|
123
151
|
});
|
|
124
152
|
this.lastScriptExecutionSummary = new LastScriptExecutionSummary(result);
|
|
125
153
|
return result;
|
|
126
154
|
}
|
|
127
155
|
async executeAsyncScript(script, ...args) {
|
|
128
|
-
const
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
156
|
+
const serialisedScript = typeof script === 'function'
|
|
157
|
+
? String(script)
|
|
158
|
+
: String(`function script() { ${script} }`);
|
|
159
|
+
const executableScript = new Function(`
|
|
160
|
+
var args = Array.prototype.slice.call(arguments, 0, -1);
|
|
161
|
+
var callback = arguments[arguments.length - 1];
|
|
162
|
+
var parameters = (${scripts.rehydrate}).apply(null, args);
|
|
163
|
+
(${serialisedScript}).apply(null, parameters.concat(callback));
|
|
164
|
+
`);
|
|
165
|
+
const result = await this.inContextOfThisPage(async () => {
|
|
166
|
+
const dehydratedArguments = await this.dehydrator.dehydrate(args);
|
|
167
|
+
return (0, promised_1.promised)(this.browser.executeAsyncScript(executableScript, ...dehydratedArguments));
|
|
137
168
|
});
|
|
138
169
|
this.lastScriptExecutionSummary = new LastScriptExecutionSummary(result);
|
|
139
170
|
return result;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProtractorPage.js","sourceRoot":"","sources":["../../../src/screenplay/models/ProtractorPage.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ProtractorPage.js","sourceRoot":"","sources":["../../../src/screenplay/models/ProtractorPage.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@serenity-js/protractor",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.23.0",
|
|
4
4
|
"description": "Test your web apps with Serenity/JS",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Jan Molak",
|
|
@@ -49,9 +49,9 @@
|
|
|
49
49
|
"node": "^16.13 || ^18.12 || ^20"
|
|
50
50
|
},
|
|
51
51
|
"dependencies": {
|
|
52
|
-
"@serenity-js/core": "3.
|
|
53
|
-
"@serenity-js/rest": "3.
|
|
54
|
-
"@serenity-js/web": "3.
|
|
52
|
+
"@serenity-js/core": "3.23.0",
|
|
53
|
+
"@serenity-js/rest": "3.23.0",
|
|
54
|
+
"@serenity-js/web": "3.23.0",
|
|
55
55
|
"deepmerge": "4.3.1",
|
|
56
56
|
"query-selector-shadow-dom": "1.0.1",
|
|
57
57
|
"tiny-types": "1.22.0"
|
|
@@ -76,13 +76,13 @@
|
|
|
76
76
|
},
|
|
77
77
|
"devDependencies": {
|
|
78
78
|
"@integration/testing-tools": "3.0.0",
|
|
79
|
-
"@serenity-js/assertions": "3.
|
|
80
|
-
"@serenity-js/cucumber": "3.
|
|
81
|
-
"@serenity-js/jasmine": "3.
|
|
82
|
-
"@serenity-js/local-server": "3.
|
|
83
|
-
"@serenity-js/mocha": "3.
|
|
79
|
+
"@serenity-js/assertions": "3.23.0",
|
|
80
|
+
"@serenity-js/cucumber": "3.23.0",
|
|
81
|
+
"@serenity-js/jasmine": "3.23.0",
|
|
82
|
+
"@serenity-js/local-server": "3.23.0",
|
|
83
|
+
"@serenity-js/mocha": "3.23.0",
|
|
84
84
|
"@serenity-js/web": "3.1.1",
|
|
85
|
-
"@types/chai": "4.3.
|
|
85
|
+
"@types/chai": "4.3.16",
|
|
86
86
|
"@types/express": "4.17.21",
|
|
87
87
|
"@types/html-minifier": "4.0.5",
|
|
88
88
|
"@types/mocha": "10.0.6",
|
|
@@ -99,5 +99,5 @@
|
|
|
99
99
|
"ts-node": "10.9.2",
|
|
100
100
|
"typescript": "5.2.2"
|
|
101
101
|
},
|
|
102
|
-
"gitHead": "
|
|
102
|
+
"gitHead": "be1bb276388c295df01146eb8589a003b3d8214c"
|
|
103
103
|
}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { List, LogicError } from '@serenity-js/core';
|
|
2
2
|
import type { CorrelationId } from '@serenity-js/core/lib/model';
|
|
3
|
-
import type { Cookie, CookieData, ModalDialogHandler,
|
|
4
|
-
import { BrowserWindowClosedError, Key, Page, PageElementsLocator } from '@serenity-js/web';
|
|
5
|
-
import
|
|
3
|
+
import type { Cookie, CookieData, ModalDialogHandler, PageElements, Selector } from '@serenity-js/web';
|
|
4
|
+
import { ArgumentDehydrator, BrowserWindowClosedError, Key, Page, PageElement, PageElementsLocator } from '@serenity-js/web';
|
|
5
|
+
import * as scripts from '@serenity-js/web/lib/scripts';
|
|
6
|
+
import type * as protractor from 'protractor';
|
|
6
7
|
import { URL } from 'url';
|
|
7
8
|
|
|
8
9
|
import { promised } from '../promised';
|
|
@@ -18,16 +19,23 @@ import { ProtractorPageElement } from './ProtractorPageElement';
|
|
|
18
19
|
*
|
|
19
20
|
* @group Models
|
|
20
21
|
*/
|
|
21
|
-
export class ProtractorPage extends Page<ElementFinder> {
|
|
22
|
+
export class ProtractorPage extends Page<protractor.ElementFinder> {
|
|
22
23
|
|
|
23
|
-
/**
|
|
24
|
-
* @private
|
|
25
|
-
*/
|
|
26
24
|
private lastScriptExecutionSummary: LastScriptExecutionSummary;
|
|
27
25
|
|
|
26
|
+
/* eslint-disable unicorn/consistent-function-scoping */
|
|
27
|
+
private dehydrator: ArgumentDehydrator<PageElement<protractor.ElementFinder>, protractor.WebElement> = new ArgumentDehydrator(
|
|
28
|
+
(item: any): item is PageElement<protractor.ElementFinder> => item instanceof PageElement,
|
|
29
|
+
async (item: PageElement<protractor.ElementFinder>) => {
|
|
30
|
+
const nativeElement = await item.nativeElement();
|
|
31
|
+
return nativeElement.getWebElement();
|
|
32
|
+
},
|
|
33
|
+
);
|
|
34
|
+
/* eslint-enable */
|
|
35
|
+
|
|
28
36
|
constructor(
|
|
29
37
|
session: ProtractorBrowsingSession,
|
|
30
|
-
private readonly browser: ProtractorBrowser,
|
|
38
|
+
private readonly browser: protractor.ProtractorBrowser,
|
|
31
39
|
modalDialogHandler: ModalDialogHandler,
|
|
32
40
|
private readonly errorHandler: ProtractorErrorHandler,
|
|
33
41
|
pageId: CorrelationId
|
|
@@ -40,7 +48,7 @@ export class ProtractorPage extends Page<ElementFinder> {
|
|
|
40
48
|
);
|
|
41
49
|
}
|
|
42
50
|
|
|
43
|
-
createPageElement(nativeElement: ElementFinder): PageElement<ElementFinder> {
|
|
51
|
+
createPageElement(nativeElement: protractor.ElementFinder): PageElement<protractor.ElementFinder> {
|
|
44
52
|
return new ProtractorPageElement(
|
|
45
53
|
new ProtractorExistingElementLocator(
|
|
46
54
|
this.rootLocator as ProtractorRootLocator,
|
|
@@ -51,13 +59,13 @@ export class ProtractorPage extends Page<ElementFinder> {
|
|
|
51
59
|
)
|
|
52
60
|
}
|
|
53
61
|
|
|
54
|
-
locate(selector: Selector): PageElement<ElementFinder> {
|
|
62
|
+
locate(selector: Selector): PageElement<protractor.ElementFinder> {
|
|
55
63
|
return new ProtractorPageElement(
|
|
56
64
|
new ProtractorLocator(this.rootLocator, selector, this.errorHandler)
|
|
57
65
|
)
|
|
58
66
|
}
|
|
59
67
|
|
|
60
|
-
locateAll(selector: Selector): PageElements<ElementFinder> {
|
|
68
|
+
locateAll(selector: Selector): PageElements<protractor.ElementFinder> {
|
|
61
69
|
return List.of(
|
|
62
70
|
new PageElementsLocator(
|
|
63
71
|
new ProtractorLocator(this.rootLocator, selector, this.errorHandler)
|
|
@@ -155,17 +163,21 @@ export class ProtractorPage extends Page<ElementFinder> {
|
|
|
155
163
|
script: string | ((...parameters: InnerArguments) => Result),
|
|
156
164
|
...args: InnerArguments
|
|
157
165
|
): Promise<Result> {
|
|
158
|
-
const innerArguments = [] as InnerArguments;
|
|
159
|
-
for (const arg of args) {
|
|
160
|
-
const innerArgument = arg instanceof ProtractorPageElement
|
|
161
|
-
? await arg.nativeElement()
|
|
162
|
-
: arg;
|
|
163
166
|
|
|
164
|
-
|
|
165
|
-
|
|
167
|
+
const serialisedScript = typeof script === 'function'
|
|
168
|
+
? String(script)
|
|
169
|
+
: String(`function script() { ${ script } }`);
|
|
170
|
+
|
|
171
|
+
const executableScript = new Function(`
|
|
172
|
+
var parameters = (${ scripts.rehydrate }).apply(null, arguments);
|
|
173
|
+
return (${ serialisedScript }).apply(null, parameters);
|
|
174
|
+
`);
|
|
166
175
|
|
|
167
|
-
const result = await this.inContextOfThisPage<Result>(() => {
|
|
168
|
-
|
|
176
|
+
const result = await this.inContextOfThisPage<Result>(async () => {
|
|
177
|
+
|
|
178
|
+
const dehydratedArguments = await this.dehydrator.dehydrate(args);
|
|
179
|
+
|
|
180
|
+
return promised(this.browser.executeScript(executableScript, ...dehydratedArguments));
|
|
169
181
|
});
|
|
170
182
|
|
|
171
183
|
this.lastScriptExecutionSummary = new LastScriptExecutionSummary(result);
|
|
@@ -177,17 +189,22 @@ export class ProtractorPage extends Page<ElementFinder> {
|
|
|
177
189
|
script: string | ((...args: [...parameters: Parameters, callback: (result: Result) => void]) => void),
|
|
178
190
|
...args: Parameters
|
|
179
191
|
): Promise<Result> {
|
|
180
|
-
const
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
? await arg.nativeElement()
|
|
184
|
-
: arg;
|
|
192
|
+
const serialisedScript = typeof script === 'function'
|
|
193
|
+
? String(script)
|
|
194
|
+
: String(`function script() { ${ script } }`);
|
|
185
195
|
|
|
186
|
-
|
|
187
|
-
|
|
196
|
+
const executableScript = new Function(`
|
|
197
|
+
var args = Array.prototype.slice.call(arguments, 0, -1);
|
|
198
|
+
var callback = arguments[arguments.length - 1];
|
|
199
|
+
var parameters = (${ scripts.rehydrate }).apply(null, args);
|
|
200
|
+
(${ serialisedScript }).apply(null, parameters.concat(callback));
|
|
201
|
+
`);
|
|
202
|
+
|
|
203
|
+
const result = await this.inContextOfThisPage<Result>(async () => {
|
|
204
|
+
|
|
205
|
+
const dehydratedArguments = await this.dehydrator.dehydrate(args);
|
|
188
206
|
|
|
189
|
-
|
|
190
|
-
return promised(this.browser.executeAsyncScript(script, ...parameters));
|
|
207
|
+
return promised(this.browser.executeAsyncScript(executableScript, ...dehydratedArguments));
|
|
191
208
|
});
|
|
192
209
|
|
|
193
210
|
this.lastScriptExecutionSummary = new LastScriptExecutionSummary(result);
|