@serenity-js/web 3.0.0-rc.2 → 3.0.0-rc.3
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 +24 -0
- package/lib/expectations/isVisible.js +1 -7
- package/lib/expectations/isVisible.js.map +1 -1
- package/lib/screenplay/abilities/BrowseTheWeb.d.ts +5 -10
- package/lib/screenplay/abilities/BrowseTheWeb.js.map +1 -1
- package/lib/screenplay/interactions/Enter.d.ts +5 -5
- package/lib/screenplay/interactions/Enter.js +9 -9
- package/lib/screenplay/interactions/Enter.js.map +1 -1
- package/lib/screenplay/interactions/ExecuteScript.d.ts +1 -1
- package/lib/screenplay/interactions/ExecuteScript.js +5 -6
- package/lib/screenplay/interactions/ExecuteScript.js.map +1 -1
- package/lib/screenplay/interactions/Press.js +5 -4
- package/lib/screenplay/interactions/Press.js.map +1 -1
- package/lib/screenplay/interactions/Select.js +20 -16
- package/lib/screenplay/interactions/Select.js.map +1 -1
- package/lib/screenplay/interactions/TakeScreenshot.d.ts +1 -1
- package/lib/screenplay/interactions/TakeScreenshot.js +4 -5
- package/lib/screenplay/interactions/TakeScreenshot.js.map +1 -1
- package/lib/screenplay/models/NativeElementLocator.d.ts +5 -0
- package/lib/screenplay/models/NativeElementLocator.js +3 -0
- package/lib/screenplay/models/NativeElementLocator.js.map +1 -0
- package/lib/screenplay/models/PageElement.d.ts +13 -13
- package/lib/screenplay/models/PageElement.js +15 -36
- package/lib/screenplay/models/PageElement.js.map +1 -1
- package/lib/screenplay/models/PageElements.d.ts +13 -18
- package/lib/screenplay/models/PageElements.js +36 -35
- package/lib/screenplay/models/PageElements.js.map +1 -1
- package/lib/screenplay/models/PassThroughNativeElementLocator.d.ts +9 -0
- package/lib/screenplay/models/PassThroughNativeElementLocator.js +17 -0
- package/lib/screenplay/models/PassThroughNativeElementLocator.js.map +1 -0
- package/lib/screenplay/models/index.d.ts +3 -0
- package/lib/screenplay/models/index.js +3 -0
- package/lib/screenplay/models/index.js.map +1 -1
- package/lib/screenplay/models/selectors/By.d.ts +13 -0
- package/lib/screenplay/models/selectors/By.js +45 -0
- package/lib/screenplay/models/selectors/By.js.map +1 -0
- package/lib/screenplay/models/selectors/ByCss.d.ts +3 -0
- package/lib/screenplay/models/selectors/ByCss.js +8 -0
- package/lib/screenplay/models/selectors/ByCss.js.map +1 -0
- package/lib/screenplay/models/selectors/ByCssContainingText.d.ts +5 -0
- package/lib/screenplay/models/selectors/ByCssContainingText.js +12 -0
- package/lib/screenplay/models/selectors/ByCssContainingText.js.map +1 -0
- package/lib/screenplay/models/selectors/ById.d.ts +3 -0
- package/lib/screenplay/models/selectors/ById.js +8 -0
- package/lib/screenplay/models/selectors/ById.js.map +1 -0
- package/lib/screenplay/models/selectors/ByTagName.d.ts +3 -0
- package/lib/screenplay/models/selectors/ByTagName.js +8 -0
- package/lib/screenplay/models/selectors/ByTagName.js.map +1 -0
- package/lib/screenplay/models/selectors/ByXPath.d.ts +3 -0
- package/lib/screenplay/models/selectors/ByXPath.js +8 -0
- package/lib/screenplay/models/selectors/ByXPath.js.map +1 -0
- package/lib/screenplay/models/selectors/Selector.d.ts +5 -0
- package/lib/screenplay/models/selectors/Selector.js +17 -0
- package/lib/screenplay/models/selectors/Selector.js.map +1 -0
- package/lib/screenplay/models/selectors/index.d.ts +7 -0
- package/lib/screenplay/models/selectors/index.js +20 -0
- package/lib/screenplay/models/selectors/index.js.map +1 -0
- package/lib/screenplay/questions/ElementQuestion.d.ts +1 -2
- package/lib/screenplay/questions/ElementQuestion.js.map +1 -1
- package/lib/screenplay/questions/Selected.js +8 -6
- package/lib/screenplay/questions/Selected.js.map +1 -1
- package/lib/screenplay/questions/Text.d.ts +1 -1
- package/lib/screenplay/questions/Text.js +4 -2
- package/lib/screenplay/questions/Text.js.map +1 -1
- package/lib/stage/crew/photographer/strategies/PhotoTakingStrategy.js +4 -6
- package/lib/stage/crew/photographer/strategies/PhotoTakingStrategy.js.map +1 -1
- package/package.json +5 -5
- package/src/expectations/isVisible.ts +1 -10
- package/src/screenplay/abilities/BrowseTheWeb.ts +5 -11
- package/src/screenplay/interactions/Enter.ts +10 -9
- package/src/screenplay/interactions/ExecuteScript.ts +13 -12
- package/src/screenplay/interactions/Press.ts +7 -7
- package/src/screenplay/interactions/Select.ts +22 -18
- package/src/screenplay/interactions/TakeScreenshot.ts +6 -6
- package/src/screenplay/models/NativeElementLocator.ts +6 -0
- package/src/screenplay/models/PageElement.ts +26 -51
- package/src/screenplay/models/PageElements.ts +42 -48
- package/src/screenplay/models/PassThroughNativeElementLocator.ts +18 -0
- package/src/screenplay/models/index.ts +3 -0
- package/src/screenplay/models/selectors/By.ts +47 -0
- package/src/screenplay/models/selectors/ByCss.ts +4 -0
- package/src/screenplay/models/selectors/ByCssContainingText.ts +7 -0
- package/src/screenplay/models/selectors/ById.ts +4 -0
- package/src/screenplay/models/selectors/ByTagName.ts +4 -0
- package/src/screenplay/models/selectors/ByXPath.ts +4 -0
- package/src/screenplay/models/selectors/Selector.ts +16 -0
- package/src/screenplay/models/selectors/index.ts +7 -0
- package/src/screenplay/questions/ElementQuestion.ts +1 -3
- package/src/screenplay/questions/Selected.ts +9 -7
- package/src/screenplay/questions/Text.ts +8 -5
- package/src/stage/crew/photographer/strategies/PhotoTakingStrategy.ts +6 -6
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,30 @@
|
|
|
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.0.0-rc.3](https://github.com/serenity-js/serenity-js/compare/v3.0.0-rc.2...v3.0.0-rc.3) (2021-12-29)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* **core:** refactored Mappable so that it's easier to implement filters ([176e0cd](https://github.com/serenity-js/serenity-js/commit/176e0cd0303d63271477b2b7a8e7b0572dda99a0)), closes [#1074](https://github.com/serenity-js/serenity-js/issues/1074)
|
|
12
|
+
* **deps:** updated tiny-types to 1.17.0 ([3187051](https://github.com/serenity-js/serenity-js/commit/3187051594158b4b450c82e851e417fd2ed21652))
|
|
13
|
+
* **web:** corrected synchronisation in Web questions and interactions ([c3a0ad1](https://github.com/serenity-js/serenity-js/commit/c3a0ad16de311e71d7e82e4f463baa0ca6b18863))
|
|
14
|
+
* **web:** Photographer skips taking a screenshot if the Window is closed (DevTools protocol) ([b682577](https://github.com/serenity-js/serenity-js/commit/b682577ad649046fc1a4cd61a7315e11d60dcf32))
|
|
15
|
+
* **web:** refactored Selector and NativeElementLocator classes to simplify the implementation ([f0c8f11](https://github.com/serenity-js/serenity-js/commit/f0c8f113433958877d36f13d0bc7f355ea68d280))
|
|
16
|
+
* **web:** simplified the selectors ([b167e42](https://github.com/serenity-js/serenity-js/commit/b167e422eb66556845c31d5847b9fd33b707c764)), closes [#1074](https://github.com/serenity-js/serenity-js/issues/1074)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
### Features
|
|
20
|
+
|
|
21
|
+
* **core:** new implementation of List.where filters ([45b3c80](https://github.com/serenity-js/serenity-js/commit/45b3c8080ca467ac6362e5217e7899ca36a04cdc)), closes [#1074](https://github.com/serenity-js/serenity-js/issues/1074)
|
|
22
|
+
* **web:** isVisible checks if the element is in viewport and not hidden behind other elements ([429040f](https://github.com/serenity-js/serenity-js/commit/429040fb32b04cd4bc7524100635203fd8128eb6))
|
|
23
|
+
* **web:** new PageElement retrieval model based on Selectors ([48bd94f](https://github.com/serenity-js/serenity-js/commit/48bd94f3c29707b66dcf81a7522f7529b6f9fcfb))
|
|
24
|
+
* **web:** re-introduced PageElements.where DSL and universal By selectors ([39fe0a1](https://github.com/serenity-js/serenity-js/commit/39fe0a10edf7f652e93911159e4a4689c36d6876)), closes [#1081](https://github.com/serenity-js/serenity-js/issues/1081)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
6
30
|
# [3.0.0-rc.2](https://github.com/serenity-js/serenity-js/compare/v3.0.0-rc.1...v3.0.0-rc.2) (2021-12-09)
|
|
7
31
|
|
|
8
32
|
**Note:** Version bump only for package @serenity-js/web
|
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.isVisible = void 0;
|
|
4
|
-
const assertions_1 = require("@serenity-js/assertions");
|
|
5
|
-
const core_1 = require("@serenity-js/core");
|
|
6
4
|
const ElementExpectation_1 = require("./ElementExpectation");
|
|
7
|
-
const isPresent_1 = require("./isPresent");
|
|
8
5
|
/**
|
|
9
6
|
* @desc
|
|
10
7
|
* Expectation that the element is present in the DOM of the page and visible.
|
|
@@ -17,10 +14,7 @@ const isPresent_1 = require("./isPresent");
|
|
|
17
14
|
* @see {@link Wait}
|
|
18
15
|
*/
|
|
19
16
|
function isVisible() {
|
|
20
|
-
return
|
|
17
|
+
return ElementExpectation_1.ElementExpectation.forElementTo('become visible', actual => actual.isVisible());
|
|
21
18
|
}
|
|
22
19
|
exports.isVisible = isVisible;
|
|
23
|
-
function isDisplayed() {
|
|
24
|
-
return ElementExpectation_1.ElementExpectation.forElementTo('become displayed', actual => actual.isDisplayed());
|
|
25
|
-
}
|
|
26
20
|
//# sourceMappingURL=isVisible.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"isVisible.js","sourceRoot":"","sources":["../../src/expectations/isVisible.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"isVisible.js","sourceRoot":"","sources":["../../src/expectations/isVisible.ts"],"names":[],"mappings":";;;AAGA,6DAA0D;AAE1D;;;;;;;;;;GAUG;AACH,SAAgB,SAAS;IACrB,OAAO,uCAAkB,CAAC,YAAY,CAAC,gBAAgB,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;AAC3F,CAAC;AAFD,8BAEC"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Ability, Duration, UsesAbilities } from '@serenity-js/core';
|
|
2
2
|
import { Key } from '../../input';
|
|
3
|
-
import { Cookie, CookieData, ModalDialog, Page, PageElement,
|
|
3
|
+
import { Cookie, CookieData, ModalDialog, NativeElementLocator, Page, PageElement, Selector } from '../models';
|
|
4
4
|
import { BrowserCapabilities } from './BrowserCapabilities';
|
|
5
|
-
export declare abstract class BrowseTheWeb implements Ability {
|
|
5
|
+
export declare abstract class BrowseTheWeb<Native_Element_Type = any> implements Ability {
|
|
6
6
|
/**
|
|
7
7
|
* @desc
|
|
8
8
|
* Used to access the Actor's ability to {@link BrowseTheWeb}
|
|
@@ -19,14 +19,9 @@ export declare abstract class BrowseTheWeb implements Ability {
|
|
|
19
19
|
abstract reloadPage(): Promise<void>;
|
|
20
20
|
abstract waitFor(duration: Duration): Promise<void>;
|
|
21
21
|
abstract waitUntil(condition: () => boolean | Promise<boolean>, timeout: Duration): Promise<void>;
|
|
22
|
-
abstract
|
|
23
|
-
abstract
|
|
24
|
-
abstract
|
|
25
|
-
abstract findByTagName(selector: string): PageElement;
|
|
26
|
-
abstract findByXPath(selector: string): PageElement;
|
|
27
|
-
abstract findAllByCss(selector: string): PageElements;
|
|
28
|
-
abstract findAllByTagName(selector: string): PageElements;
|
|
29
|
-
abstract findAllByXPath(selector: string): PageElements;
|
|
22
|
+
abstract locate<T>(selector: Selector<T>, locator?: NativeElementLocator<Native_Element_Type>): PageElement<Native_Element_Type>;
|
|
23
|
+
abstract locateAll<T>(selector: Selector<T>, locator?: NativeElementLocator<Native_Element_Type>): Promise<Array<PageElement<Native_Element_Type>>>;
|
|
24
|
+
abstract nativeElementLocator(): NativeElementLocator<Native_Element_Type>;
|
|
30
25
|
abstract browserCapabilities(): Promise<BrowserCapabilities>;
|
|
31
26
|
abstract sendKeys(keys: Array<Key | string>): Promise<void>;
|
|
32
27
|
abstract executeScript<Result, InnerArguments extends any[]>(script: string | ((...parameters: InnerArguments) => Result), ...args: InnerArguments): Promise<Result>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BrowseTheWeb.js","sourceRoot":"","sources":["../../../src/screenplay/abilities/BrowseTheWeb.ts"],"names":[],"mappings":";;;AAMA,MAAsB,YAAY;IAC9B;;;;;;;;OAQG;IACH,MAAM,CAAC,EAAE,CAAC,KAAoB;QAC1B,OAAO,KAAK,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;IACzC,CAAC;
|
|
1
|
+
{"version":3,"file":"BrowseTheWeb.js","sourceRoot":"","sources":["../../../src/screenplay/abilities/BrowseTheWeb.ts"],"names":[],"mappings":";;;AAMA,MAAsB,YAAY;IAC9B;;;;;;;;OAQG;IACH,MAAM,CAAC,EAAE,CAAC,KAAoB;QAC1B,OAAO,KAAK,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;IACzC,CAAC;CA+DJ;AA3ED,oCA2EC"}
|
|
@@ -35,26 +35,26 @@ import { PageElementInteraction } from './PageElementInteraction';
|
|
|
35
35
|
* @extends {ElementInteraction}
|
|
36
36
|
*/
|
|
37
37
|
export declare class Enter extends PageElementInteraction {
|
|
38
|
-
private readonly
|
|
38
|
+
private readonly values;
|
|
39
39
|
private readonly field;
|
|
40
40
|
/**
|
|
41
41
|
* @desc
|
|
42
42
|
* Instantiates this {@link @serenity-js/core/lib/screenplay~Interaction}.
|
|
43
43
|
*
|
|
44
|
-
* @param {Array<Answerable<string | number | string[] | number[]>>}
|
|
44
|
+
* @param {Array<Answerable<string | number | string[] | number[]>>} values
|
|
45
45
|
* The value to be entered
|
|
46
46
|
*
|
|
47
47
|
* @returns {EnterBuilder}
|
|
48
48
|
*/
|
|
49
|
-
static theValue(...
|
|
49
|
+
static theValue(...values: Array<Answerable<string | number | string[] | number[]>>): EnterBuilder;
|
|
50
50
|
/**
|
|
51
|
-
* @param {Array<Answerable<string | number | string[] | number[]>>}
|
|
51
|
+
* @param {Array<Answerable<string | number | string[] | number[]>>} values
|
|
52
52
|
* The value to be entered
|
|
53
53
|
*
|
|
54
54
|
* @param {Answerable<PageElement>} field
|
|
55
55
|
* The field to enter the value into
|
|
56
56
|
*/
|
|
57
|
-
constructor(
|
|
57
|
+
constructor(values: Array<Answerable<string | number | string[] | number[]>>, field: Answerable<PageElement>);
|
|
58
58
|
/**
|
|
59
59
|
* @desc
|
|
60
60
|
* Makes the provided {@link @serenity-js/core/lib/screenplay/actor~Actor}
|
|
@@ -37,29 +37,29 @@ const PageElementInteraction_1 = require("./PageElementInteraction");
|
|
|
37
37
|
*/
|
|
38
38
|
class Enter extends PageElementInteraction_1.PageElementInteraction {
|
|
39
39
|
/**
|
|
40
|
-
* @param {Array<Answerable<string | number | string[] | number[]>>}
|
|
40
|
+
* @param {Array<Answerable<string | number | string[] | number[]>>} values
|
|
41
41
|
* The value to be entered
|
|
42
42
|
*
|
|
43
43
|
* @param {Answerable<PageElement>} field
|
|
44
44
|
* The field to enter the value into
|
|
45
45
|
*/
|
|
46
|
-
constructor(
|
|
47
|
-
super((0, io_1.formatted) `#actor enters ${
|
|
48
|
-
this.
|
|
46
|
+
constructor(values, field /* todo | Question<AlertPromise> | AlertPromise */) {
|
|
47
|
+
super((0, io_1.formatted) `#actor enters ${values.join(', ')} into ${field}`);
|
|
48
|
+
this.values = values;
|
|
49
49
|
this.field = field;
|
|
50
50
|
}
|
|
51
51
|
/**
|
|
52
52
|
* @desc
|
|
53
53
|
* Instantiates this {@link @serenity-js/core/lib/screenplay~Interaction}.
|
|
54
54
|
*
|
|
55
|
-
* @param {Array<Answerable<string | number | string[] | number[]>>}
|
|
55
|
+
* @param {Array<Answerable<string | number | string[] | number[]>>} values
|
|
56
56
|
* The value to be entered
|
|
57
57
|
*
|
|
58
58
|
* @returns {EnterBuilder}
|
|
59
59
|
*/
|
|
60
|
-
static theValue(...
|
|
60
|
+
static theValue(...values) {
|
|
61
61
|
return {
|
|
62
|
-
into: (field /* todo Question<AlertPromise> | AlertPromise */) => new Enter(
|
|
62
|
+
into: (field /* todo Question<AlertPromise> | AlertPromise */) => new Enter(values, field),
|
|
63
63
|
};
|
|
64
64
|
}
|
|
65
65
|
/**
|
|
@@ -77,9 +77,9 @@ class Enter extends PageElementInteraction_1.PageElementInteraction {
|
|
|
77
77
|
* @see {@link @serenity-js/core/lib/screenplay/actor~AnswersQuestions}
|
|
78
78
|
*/
|
|
79
79
|
async performAs(actor) {
|
|
80
|
-
const values = await Promise.all(this.value.map(part => actor.answer(part)));
|
|
81
80
|
const field = await this.resolve(actor, this.field);
|
|
82
|
-
|
|
81
|
+
const valuesToEnter = await (0, io_1.asyncMap)(this.values, value => actor.answer(value));
|
|
82
|
+
return field.enterValue(valuesToEnter.flat());
|
|
83
83
|
}
|
|
84
84
|
}
|
|
85
85
|
exports.Enter = Enter;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Enter.js","sourceRoot":"","sources":["../../../src/screenplay/interactions/Enter.ts"],"names":[],"mappings":";;;AACA,
|
|
1
|
+
{"version":3,"file":"Enter.js","sourceRoot":"","sources":["../../../src/screenplay/interactions/Enter.ts"],"names":[],"mappings":";;;AACA,iDAA+D;AAI/D,qEAAkE;AAElE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAa,KAAM,SAAQ,+CAAsB;IAkB7C;;;;;;OAMG;IACH,YACqB,MAAgE,EAChE,KAA8B,CAAC,kDAAkD;QAElG,KAAK,CAAC,IAAA,cAAS,EAAC,iBAAkB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAE,SAAU,KAAM,EAAE,CAAC,CAAC;QAHvD,WAAM,GAAN,MAAM,CAA0D;QAChE,UAAK,GAAL,KAAK,CAAyB;IAGnD,CAAC;IA5BD;;;;;;;;OAQG;IACH,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAgE;QAC/E,OAAO;YACH,IAAI,EAAE,CAAC,KAA8B,CAAE,gDAAgD,EAAE,EAAE,CACvF,IAAI,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC;SAC/B,CAAC;IACN,CAAC;IAgBD;;;;;;;;;;;;;OAaG;IACH,KAAK,CAAC,SAAS,CAAC,KAAuC;QACnD,MAAM,KAAK,GAAI,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAErD,MAAM,aAAa,GAAG,MAAM,IAAA,aAAQ,EAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;QAE/E,OAAO,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC;CACJ;AArDD,sBAqDC"}
|
|
@@ -201,6 +201,6 @@ export declare abstract class ExecuteScriptWithArguments extends Interaction {
|
|
|
201
201
|
* @see {@link @serenity-js/core/lib/screenplay/actor~UsesAbilities}
|
|
202
202
|
* @see {@link @serenity-js/core/lib/screenplay/actor~AnswersQuestions}
|
|
203
203
|
*/
|
|
204
|
-
performAs(actor: UsesAbilities & CollectsArtifacts & AnswersQuestions):
|
|
204
|
+
performAs(actor: UsesAbilities & CollectsArtifacts & AnswersQuestions): Promise<void>;
|
|
205
205
|
protected abstract executeAs(actor: UsesAbilities & AnswersQuestions, args: any[]): Promise<any>;
|
|
206
206
|
}
|
|
@@ -205,14 +205,13 @@ class ExecuteScriptWithArguments extends core_1.Interaction {
|
|
|
205
205
|
* @see {@link @serenity-js/core/lib/screenplay/actor~UsesAbilities}
|
|
206
206
|
* @see {@link @serenity-js/core/lib/screenplay/actor~AnswersQuestions}
|
|
207
207
|
*/
|
|
208
|
-
performAs(actor) {
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
.then(() => actor.collect(model_1.TextData.fromJSON({
|
|
208
|
+
async performAs(actor) {
|
|
209
|
+
const args = await (0, io_1.asyncMap)(this.args, arg => actor.answer(arg));
|
|
210
|
+
await this.executeAs(actor, args);
|
|
211
|
+
actor.collect(model_1.TextData.fromJSON({
|
|
213
212
|
contentType: 'text/javascript;charset=UTF-8',
|
|
214
213
|
data: this.script.toString(),
|
|
215
|
-
}), new model_1.Name('Script source'))
|
|
214
|
+
}), new model_1.Name('Script source'));
|
|
216
215
|
}
|
|
217
216
|
}
|
|
218
217
|
exports.ExecuteScriptWithArguments = ExecuteScriptWithArguments;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExecuteScript.js","sourceRoot":"","sources":["../../../src/screenplay/interactions/ExecuteScript.ts"],"names":[],"mappings":";;;AAAA,4CAA4H;AAC5H,
|
|
1
|
+
{"version":3,"file":"ExecuteScript.js","sourceRoot":"","sources":["../../../src/screenplay/interactions/ExecuteScript.ts"],"names":[],"mappings":";;;AAAA,4CAA4H;AAC5H,iDAA+D;AAC/D,uDAA6D;AAE7D,4CAA4C;AAE5C;;;;;;;;GAQG;AACH,MAAa,aAAa;IAEtB;;;;;;;;;OASG;IACH,MAAM,CAAC,IAAI,CAAC,SAAiB;QACzB,OAAO,IAAI,oBAAoB,CAAC,SAAS,CAAC,CAAC;IAC/C,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgFG;IACH,MAAM,CAAC,KAAK,CAAC,MAAyB;QAClC,OAAO,IAAI,yBAAyB,CAAC,MAAM,CAAC,CAAC;IACjD,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8CG;IACH,MAAM,CAAC,IAAI,CAAC,MAAyB;QACjC,OAAO,IAAI,wBAAwB,CAAC,MAAM,CAAC,CAAC;IAChD,CAAC;CACJ;AAvJD,sCAuJC;AAED;;;;;;;;;;;;GAYG;AACH,MAAsB,0BAA2B,SAAQ,kBAAW;IAEhE;;;;;;OAMG;IACH,YACuB,MAAyB,EAAY,mDAAmD;IACxF,OAA+B,EAAE;QAEpD,KAAK,EAAE,CAAC;QAHW,WAAM,GAAN,MAAM,CAAmB;QACzB,SAAI,GAAJ,IAAI,CAA6B;IAGxD,CAAC;IAcD;;;;;;;;;;;;;OAaG;IACH,KAAK,CAAC,SAAS,CAAC,KAA2D;QACvE,MAAM,IAAI,GAAG,MAAM,IAAA,aAAQ,EAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAEjE,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAElC,KAAK,CAAC,OAAO,CACT,gBAAQ,CAAC,QAAQ,CAAC;YACd,WAAW,EAAK,+BAA+B;YAC/C,IAAI,EAAY,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;SACzC,CAAC,EACF,IAAI,YAAI,CAAC,eAAe,CAAC,CAC5B,CAAC;IACN,CAAC;CAGJ;AAzDD,gEAyDC;AAED;;GAEG;AACH,MAAM,yBAA0B,SAAQ,0BAA0B;IAC9D,aAAa,CAAC,GAAG,IAA4B;QACzC,OAAO,IAAI,yBAAyB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC5D,CAAC;IAES,SAAS,CAAC,KAAuC,EAAE,IAAW;QACpE,OAAO,wBAAY,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAwB,EAAE,GAAG,IAAI,CAAC,CAAC,CAAG,kBAAkB;IAClH,CAAC;IAED,QAAQ;QACJ,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;YACvB,CAAC,CAAC,IAAA,cAAS,EAAC,0DAA2D,IAAI,CAAC,IAAK,EAAE;YACnF,CAAC,CAAC,wCAAwC,CAAC;IACnD,CAAC;CACJ;AAED;;;;;GAKG;AACH,MAAM,oBAAqB,SAAQ,kBAAW;IAC1C,YAA6B,SAAiB;QAC1C,KAAK,EAAE,CAAC;QADiB,cAAS,GAAT,SAAS,CAAQ;IAE9C,CAAC;IAED;;;;;;;;;;;OAWG;IACH,SAAS,CAAC,KAAuC;QAC7C,OAAO,wBAAY,CAAC,EAAE,CAAC,KAAK,CAAC;aACxB,kBAAkB;QACf,0BAA0B;QAC1B,SAAS,oBAAoB,CAAC,SAAiB,EAAE,QAAoC;YACjF,MAAM,oBAAoB,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK;iBACzC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;iBACzC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAEnC,IAAI,CAAE,oBAAoB,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;gBAC3C,OAAO,QAAQ,CAAC,cAAc,GAAG,SAAS,GAAG,0BAA0B,CAAC,CAAC;aAC5E;YAED,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YAChD,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE;gBAC5B,QAAQ,EAAE,CAAC;YACf,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE;gBAC7B,OAAO,QAAQ,CAAC,6BAA6B,GAAG,SAAS,CAAC,CAAC;YAC/D,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,GAAG,GAAG,SAAS,CAAC;YACvB,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;YACpB,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC,EACD,IAAI,CAAC,SAAS,CACjB;aACA,IAAI,CAAC,YAAY,CAAC,EAAE;YACjB,IAAI,YAAY,EAAE;gBACd,MAAM,IAAI,iBAAU,CAAC,YAAY,CAAC,CAAC;aACtC;QACL,CAAC,CAAC,CAAC;IACX,CAAC;IAED;;;;;OAKG;IACH,QAAQ;QACJ,OAAO,iCAAkC,IAAI,CAAC,SAAU,EAAE,CAAC;IAC/D,CAAC;CACJ;AAED;;GAEG;AACH,MAAM,wBAAyB,SAAQ,0BAA0B;IAE7D,aAAa,CAAC,GAAG,IAA4B;QACzC,OAAO,IAAI,wBAAwB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC3D,CAAC;IAES,SAAS,CAAC,KAAuC,EAAE,IAAW;QACpE,OAAO,wBAAY,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,MAAwB,EAAE,GAAG,IAAI,CAAC,CAAC,CAAI,gBAAgB;IAC5G,CAAC;IAED,QAAQ;QACJ,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;YACvB,CAAC,CAAC,IAAA,cAAS,EAAC,wDAAyD,IAAI,CAAC,IAAK,EAAE;YACjF,CAAC,CAAC,sCAAsC,CAAC;IACjD,CAAC;CACJ"}
|
|
@@ -133,10 +133,11 @@ class KeySequence extends core_1.Question {
|
|
|
133
133
|
static of(keys) {
|
|
134
134
|
return new KeySequence(keys);
|
|
135
135
|
}
|
|
136
|
-
answeredBy(actor) {
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
136
|
+
async answeredBy(actor) {
|
|
137
|
+
const keys = await (0, io_1.asyncMap)(this.keys, key => actor.answer(key));
|
|
138
|
+
return keys
|
|
139
|
+
.flat()
|
|
140
|
+
.filter(key => !!key);
|
|
140
141
|
}
|
|
141
142
|
/**
|
|
142
143
|
* @desc
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Press.js","sourceRoot":"","sources":["../../../src/screenplay/interactions/Press.ts"],"names":[],"mappings":";;;AAAA,4CAAiH;AACjH,
|
|
1
|
+
{"version":3,"file":"Press.js","sourceRoot":"","sources":["../../../src/screenplay/interactions/Press.ts"],"names":[],"mappings":"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"}
|
|
@@ -66,7 +66,7 @@ class Select {
|
|
|
66
66
|
static value(value) {
|
|
67
67
|
return {
|
|
68
68
|
from: (pageElement) => screenplay_1.Interaction.where((0, io_1.formatted) `#actor selects value ${value} from ${pageElement}`, async (actor) => {
|
|
69
|
-
return models_1.PageElement.
|
|
69
|
+
return models_1.PageElement.located(models_1.By.css((0, core_1.q) `option[value=${value}]`))
|
|
70
70
|
.of(pageElement)
|
|
71
71
|
.click()
|
|
72
72
|
.performAs(actor);
|
|
@@ -124,14 +124,17 @@ class Select {
|
|
|
124
124
|
static values(...values) {
|
|
125
125
|
return {
|
|
126
126
|
from: (pageElement) => screenplay_1.Interaction.where(`#actor selects values ${(0, io_1.commaSeparated)(values.flat(), item => (0, inspected_1.inspected)(item, { inline: true }))} from ${(0, inspected_1.inspected)(pageElement, { inline: true })}`, async (actor) => {
|
|
127
|
-
const
|
|
128
|
-
const
|
|
129
|
-
const
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
127
|
+
const answers = await (0, io_1.asyncMap)(values, value => actor.answer(value));
|
|
128
|
+
const desiredValues = answers.flat();
|
|
129
|
+
const options = await models_1.PageElements.located(models_1.By.css(`option`))
|
|
130
|
+
.of(pageElement)
|
|
131
|
+
.answeredBy(actor);
|
|
132
|
+
for (const option of options) {
|
|
133
|
+
const shouldSelect = await optionsToSelect(hasValueEqualOneOf(desiredValues))(option);
|
|
134
|
+
if (shouldSelect) {
|
|
135
|
+
await option.click();
|
|
133
136
|
}
|
|
134
|
-
}
|
|
137
|
+
}
|
|
135
138
|
}),
|
|
136
139
|
};
|
|
137
140
|
}
|
|
@@ -188,7 +191,7 @@ class Select {
|
|
|
188
191
|
static option(value) {
|
|
189
192
|
return {
|
|
190
193
|
from: (pageElement) => screenplay_1.Interaction.where((0, io_1.formatted) `#actor selects ${value} from ${pageElement}`, async (actor) => {
|
|
191
|
-
return models_1.PageElement.
|
|
194
|
+
return models_1.PageElement.located(models_1.By.cssContainingText('option', value))
|
|
192
195
|
.of(pageElement)
|
|
193
196
|
.click()
|
|
194
197
|
.performAs(actor);
|
|
@@ -248,14 +251,15 @@ class Select {
|
|
|
248
251
|
static options(...values) {
|
|
249
252
|
return {
|
|
250
253
|
from: (pageElement) => screenplay_1.Interaction.where(`#actor selects ${(0, io_1.commaSeparated)(values.flat(), item => (0, inspected_1.inspected)(item, { inline: true }))} from ${(0, inspected_1.inspected)(pageElement, { inline: true })}`, async (actor) => {
|
|
251
|
-
const
|
|
252
|
-
const
|
|
253
|
-
const
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
254
|
+
const answers = await (0, io_1.asyncMap)(values, value => actor.answer(value));
|
|
255
|
+
const desiredOptions = answers.flat();
|
|
256
|
+
const options = await models_1.PageElements.located(models_1.By.css(`option`)).of(pageElement).answeredBy(actor);
|
|
257
|
+
for (const option of options) {
|
|
258
|
+
const shouldSelect = await optionsToSelect(hasTextEqualOneOf(desiredOptions))(option);
|
|
259
|
+
if (shouldSelect) {
|
|
260
|
+
await option.click();
|
|
257
261
|
}
|
|
258
|
-
}
|
|
262
|
+
}
|
|
259
263
|
}),
|
|
260
264
|
};
|
|
261
265
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Select.js","sourceRoot":"","sources":["../../../src/screenplay/interactions/Select.ts"],"names":[],"mappings":";;;AAAA,4CAAkD;AAClD,
|
|
1
|
+
{"version":3,"file":"Select.js","sourceRoot":"","sources":["../../../src/screenplay/interactions/Select.ts"],"names":[],"mappings":"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"}
|
|
@@ -56,7 +56,7 @@ export declare class TakeScreenshot extends Interaction {
|
|
|
56
56
|
* @see {@link @serenity-js/core/lib/screenplay/actor~UsesAbilities}
|
|
57
57
|
* @see {@link @serenity-js/core/lib/screenplay/actor~AnswersQuestions}
|
|
58
58
|
*/
|
|
59
|
-
performAs(actor: UsesAbilities & AnswersQuestions & CollectsArtifacts):
|
|
59
|
+
performAs(actor: UsesAbilities & AnswersQuestions & CollectsArtifacts): Promise<void>;
|
|
60
60
|
/**
|
|
61
61
|
* @desc
|
|
62
62
|
* Generates a description to be used when reporting this {@link @serenity-js/core/lib/screenplay~Activity}.
|
|
@@ -66,11 +66,10 @@ class TakeScreenshot extends core_1.Interaction {
|
|
|
66
66
|
* @see {@link @serenity-js/core/lib/screenplay/actor~UsesAbilities}
|
|
67
67
|
* @see {@link @serenity-js/core/lib/screenplay/actor~AnswersQuestions}
|
|
68
68
|
*/
|
|
69
|
-
performAs(actor) {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
]).then(([screenshot, name]) => actor.collect(model_1.Photo.fromBase64(screenshot), new model_1.Name(name)));
|
|
69
|
+
async performAs(actor) {
|
|
70
|
+
const screenshot = await abilities_1.BrowseTheWeb.as(actor).takeScreenshot();
|
|
71
|
+
const name = await actor.answer(this.name);
|
|
72
|
+
actor.collect(model_1.Photo.fromBase64(screenshot), new model_1.Name(name));
|
|
74
73
|
}
|
|
75
74
|
/**
|
|
76
75
|
* @desc
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TakeScreenshot.js","sourceRoot":"","sources":["../../../src/screenplay/interactions/TakeScreenshot.ts"],"names":[],"mappings":";;;AAAA,4CAAgH;AAChH,iDAAqD;AACrD,uDAA0D;AAE1D,4CAA4C;AAE5C;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAa,cAAe,SAAQ,kBAAW;IAe3C;;;OAGG;IACH,YAA6B,IAAwB;QACjD,KAAK,EAAE,CAAC;QADiB,SAAI,GAAJ,IAAI,CAAoB;IAErD,CAAC;IAnBD;;;;;;;;OAQG;IACH,MAAM,CAAC,EAAE,CAAC,IAAwB;QAC9B,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAUD;;;;;;;;;;;;;OAaG;IACH,SAAS,CAAC,KAA2D;
|
|
1
|
+
{"version":3,"file":"TakeScreenshot.js","sourceRoot":"","sources":["../../../src/screenplay/interactions/TakeScreenshot.ts"],"names":[],"mappings":";;;AAAA,4CAAgH;AAChH,iDAAqD;AACrD,uDAA0D;AAE1D,4CAA4C;AAE5C;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAa,cAAe,SAAQ,kBAAW;IAe3C;;;OAGG;IACH,YAA6B,IAAwB;QACjD,KAAK,EAAE,CAAC;QADiB,SAAI,GAAJ,IAAI,CAAoB;IAErD,CAAC;IAnBD;;;;;;;;OAQG;IACH,MAAM,CAAC,EAAE,CAAC,IAAwB;QAC9B,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAUD;;;;;;;;;;;;;OAaG;IACH,KAAK,CAAC,SAAS,CAAC,KAA2D;QACvE,MAAM,UAAU,GAAM,MAAM,wBAAY,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,cAAc,EAAE,CAAC;QACpE,MAAM,IAAI,GAAY,MAAM,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEpD,KAAK,CAAC,OAAO,CACT,aAAK,CAAC,UAAU,CAAC,UAAU,CAAC,EAC5B,IAAI,YAAI,CAAC,IAAI,CAAC,CACjB,CAAC;IACN,CAAC;IAED;;;;;OAKG;IACH,QAAQ;QACJ,OAAO,IAAA,cAAS,EAAC,gCAAgC,IAAI,CAAC,IAAI,EAAE,CAAC;IACjE,CAAC;CACJ;AAxDD,wCAwDC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NativeElementLocator.js","sourceRoot":"","sources":["../../../src/screenplay/models/NativeElementLocator.ts"],"names":[],"mappings":""}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { Adapter, Answerable, Question } from '@serenity-js/core';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
static
|
|
8
|
-
static
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
2
|
+
import { NativeElementLocator } from './NativeElementLocator';
|
|
3
|
+
import { Selector } from './selectors';
|
|
4
|
+
export declare abstract class PageElement<Native_Element_Type = any> {
|
|
5
|
+
protected readonly selector: Selector<unknown>;
|
|
6
|
+
private readonly locator;
|
|
7
|
+
static located<NET, ST>(selector: Answerable<Selector<ST>>): Question<Promise<PageElement<NET>>> & Adapter<PageElement<NET>>;
|
|
8
|
+
static of<NET>(childElement: Answerable<PageElement<NET>>, parentElement: Answerable<PageElement<NET>>): Question<Promise<PageElement<NET>>> & Adapter<PageElement<NET>>;
|
|
9
|
+
constructor(selector: Selector<unknown>, locator: NativeElementLocator<Native_Element_Type>);
|
|
10
|
+
abstract of(parent: PageElement<Native_Element_Type>): PageElement<Native_Element_Type>;
|
|
11
|
+
nativeElement(): Promise<Native_Element_Type>;
|
|
12
|
+
nativeElementLocator(): NativeElementLocator<Native_Element_Type>;
|
|
13
|
+
toString(): string;
|
|
14
14
|
abstract enterValue(value: string | number | Array<string | number>): Promise<void>;
|
|
15
15
|
abstract clearValue(): Promise<void>;
|
|
16
16
|
abstract click(): Promise<void>;
|
|
@@ -23,8 +23,8 @@ export declare abstract class PageElement<NativeElementContext = any, NativeElem
|
|
|
23
23
|
abstract value(): Promise<string>;
|
|
24
24
|
abstract isActive(): Promise<boolean>;
|
|
25
25
|
abstract isClickable(): Promise<boolean>;
|
|
26
|
-
abstract isDisplayed(): Promise<boolean>;
|
|
27
26
|
abstract isEnabled(): Promise<boolean>;
|
|
28
27
|
abstract isPresent(): Promise<boolean>;
|
|
29
28
|
abstract isSelected(): Promise<boolean>;
|
|
29
|
+
abstract isVisible(): Promise<boolean>;
|
|
30
30
|
}
|
|
@@ -4,12 +4,17 @@ exports.PageElement = void 0;
|
|
|
4
4
|
const core_1 = require("@serenity-js/core");
|
|
5
5
|
const abilities_1 = require("../abilities");
|
|
6
6
|
const d = (0, core_1.format)({ markQuestions: false });
|
|
7
|
-
const f = (0, core_1.format)({ markQuestions: true });
|
|
8
7
|
class PageElement {
|
|
9
|
-
constructor(
|
|
10
|
-
this.
|
|
8
|
+
constructor(selector, locator) {
|
|
9
|
+
this.selector = selector;
|
|
11
10
|
this.locator = locator;
|
|
12
11
|
}
|
|
12
|
+
static located(selector) {
|
|
13
|
+
return core_1.Question.about(d `page element located ${selector}`, async (actor) => {
|
|
14
|
+
const bySelector = await actor.answer(selector);
|
|
15
|
+
return abilities_1.BrowseTheWeb.as(actor).locate(bySelector);
|
|
16
|
+
});
|
|
17
|
+
}
|
|
13
18
|
static of(childElement, parentElement) {
|
|
14
19
|
return core_1.Question.about(d `${childElement} of ${parentElement})`, async (actor) => {
|
|
15
20
|
const child = await actor.answer(childElement);
|
|
@@ -17,46 +22,20 @@ class PageElement {
|
|
|
17
22
|
return child.of(parent);
|
|
18
23
|
});
|
|
19
24
|
}
|
|
20
|
-
static locatedByCss(selector) {
|
|
21
|
-
return core_1.Question.about(f `page element located by css (${selector})`, async (actor) => {
|
|
22
|
-
const cssSelector = await actor.answer(selector);
|
|
23
|
-
return abilities_1.BrowseTheWeb.as(actor).findByCss(cssSelector);
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
static locatedByCssContainingText(selector, text) {
|
|
27
|
-
return core_1.Question.about(f `page element located by css (${selector}) containing text ${text}`, async (actor) => {
|
|
28
|
-
const cssSelector = await actor.answer(selector);
|
|
29
|
-
const desiredText = await actor.answer(text);
|
|
30
|
-
return abilities_1.BrowseTheWeb.as(actor).findByCssContainingText(cssSelector, desiredText);
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
static locatedById(selector) {
|
|
34
|
-
return core_1.Question.about(f `page element located by id (${selector})`, async (actor) => {
|
|
35
|
-
const idSelector = await actor.answer(selector);
|
|
36
|
-
return abilities_1.BrowseTheWeb.as(actor).findById(idSelector);
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
static locatedByTagName(tagName) {
|
|
40
|
-
return core_1.Question.about(f `page element located by tag name (${tagName})`, async (actor) => {
|
|
41
|
-
const tagNameSelector = await actor.answer(tagName);
|
|
42
|
-
return abilities_1.BrowseTheWeb.as(actor).findByTagName(tagNameSelector);
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
static locatedByXPath(selector) {
|
|
46
|
-
return core_1.Question.about(f `page element located by xpath (${selector})`, async (actor) => {
|
|
47
|
-
const xpathSelector = await actor.answer(selector);
|
|
48
|
-
return abilities_1.BrowseTheWeb.as(actor).findByXPath(xpathSelector);
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
25
|
async nativeElement() {
|
|
52
26
|
try {
|
|
53
|
-
|
|
54
|
-
return this.locator(context);
|
|
27
|
+
return this.locator.locate(this.selector);
|
|
55
28
|
}
|
|
56
29
|
catch (error) {
|
|
57
30
|
throw new core_1.LogicError(`Couldn't find element`, error);
|
|
58
31
|
}
|
|
59
32
|
}
|
|
33
|
+
nativeElementLocator() {
|
|
34
|
+
return this.locator;
|
|
35
|
+
}
|
|
36
|
+
toString() {
|
|
37
|
+
return `PageElement located ${this.selector}`;
|
|
38
|
+
}
|
|
60
39
|
}
|
|
61
40
|
exports.PageElement = PageElement;
|
|
62
41
|
//# sourceMappingURL=PageElement.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PageElement.js","sourceRoot":"","sources":["../../../src/screenplay/models/PageElement.ts"],"names":[],"mappings":";;;AAAA,4CAAsF;AAEtF,4CAA4C;
|
|
1
|
+
{"version":3,"file":"PageElement.js","sourceRoot":"","sources":["../../../src/screenplay/models/PageElement.ts"],"names":[],"mappings":";;;AAAA,4CAAsF;AAEtF,4CAA4C;AAI5C,MAAM,CAAC,GAAG,IAAA,aAAM,EAAC,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC;AAE3C,MAAsB,WAAW;IAkB7B,YACuB,QAA2B,EAC7B,OAAkD;QADhD,aAAQ,GAAR,QAAQ,CAAmB;QAC7B,YAAO,GAAP,OAAO,CAA2C;IAEvE,CAAC;IApBD,MAAM,CAAC,OAAO,CAAU,QAAkC;QACtD,OAAO,eAAQ,CAAC,KAAK,CAAC,CAAC,CAAA,wBAAyB,QAAS,EAAE,EAAE,KAAK,EAAC,KAAK,EAAC,EAAE;YACvE,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAChD,OAAO,wBAAY,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,CAAK,UAAU,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;IACP,CAAC;IAED,MAAM,CAAC,EAAE,CAAM,YAA0C,EAAE,aAA2C;QAClG,OAAO,eAAQ,CAAC,KAAK,CAAC,CAAC,CAAA,GAAI,YAAa,OAAQ,aAAc,GAAG,EAAE,KAAK,EAAC,KAAK,EAAC,EAAE;YAC7E,MAAM,KAAK,GAAO,MAAM,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YACnD,MAAM,MAAM,GAAM,MAAM,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YAEpD,OAAO,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;IACP,CAAC;IAUD,KAAK,CAAC,aAAa;QACf,IAAI;YACA,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SAC7C;QACD,OAAO,KAAK,EAAE;YACV,MAAM,IAAI,iBAAU,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;SACxD;IACL,CAAC;IAED,oBAAoB;QAChB,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAED,QAAQ;QACJ,OAAO,uBAAwB,IAAI,CAAC,QAAS,EAAE,CAAA;IACnD,CAAC;CAoBJ;AA7DD,kCA6DC"}
|
|
@@ -1,20 +1,15 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Answerable, List } from '@serenity-js/core';
|
|
2
2
|
import { PageElement } from './PageElement';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
protected readonly
|
|
6
|
-
|
|
7
|
-
static
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
abstract last(): Promise<PageElement<NativeElementContext, NativeElement>>;
|
|
16
|
-
abstract get(index: number): Promise<PageElement<NativeElementContext, NativeElement>>;
|
|
17
|
-
abstract map<O>(fn: (element: PageElement, index?: number, elements?: PageElements) => Promise<O> | O): Promise<O[]>;
|
|
18
|
-
abstract filter(fn: (element: PageElement, index?: number) => Promise<boolean> | boolean): PageElements;
|
|
19
|
-
abstract forEach(fn: (element: PageElement, index?: number) => Promise<void> | void): Promise<void>;
|
|
3
|
+
import { Selector } from './selectors';
|
|
4
|
+
export declare class PageElements<Native_Element_Type = any> extends List<PageElement<Native_Element_Type>> {
|
|
5
|
+
protected readonly selector: Answerable<Selector<unknown>>;
|
|
6
|
+
private readonly parent?;
|
|
7
|
+
static located<NET, ST>(selector: Answerable<Selector<ST>>): PageElements<NET>;
|
|
8
|
+
/**
|
|
9
|
+
* @param {Answerable<Selector<unknown>>} selector
|
|
10
|
+
* @param {Answerable<PageElement>} [parent]
|
|
11
|
+
* if not specified, browser root selector is used
|
|
12
|
+
*/
|
|
13
|
+
constructor(selector: Answerable<Selector<unknown>>, parent?: Answerable<PageElement>);
|
|
14
|
+
of(parent: Answerable<PageElement<Native_Element_Type>>): PageElements<Native_Element_Type>;
|
|
20
15
|
}
|