@serenity-js/protractor 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 CHANGED
@@ -3,6 +3,25 @@
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:** refactored Selector and NativeElementLocator classes to simplify the implementation ([f0c8f11](https://github.com/serenity-js/serenity-js/commit/f0c8f113433958877d36f13d0bc7f355ea68d280))
14
+
15
+
16
+ ### Features
17
+
18
+ * **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))
19
+ * **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)
20
+
21
+
22
+
23
+
24
+
6
25
  # [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
26
 
8
27
 
@@ -1,7 +1,8 @@
1
1
  import { Duration, UsesAbilities } from '@serenity-js/core';
2
- import { BrowserCapabilities, BrowseTheWeb, Cookie, CookieData, Key, ModalDialog, Page, PageElement, PageElements } from '@serenity-js/web';
3
- import { ProtractorBrowser } from 'protractor';
2
+ import { BrowserCapabilities, BrowseTheWeb, Cookie, CookieData, Key, ModalDialog, NativeElementLocator, Page, PageElement, Selector } from '@serenity-js/web';
3
+ import { ElementFinder, ProtractorBrowser } from 'protractor';
4
4
  import { Capabilities } from 'selenium-webdriver';
5
+ import { ProtractorPageElement } from '../models';
5
6
  /**
6
7
  * @desc
7
8
  * An {@link @serenity-js/core/lib/screenplay~Ability} that enables the {@link Actor} to interact with web front-ends using {@link protractor}.
@@ -31,7 +32,7 @@ import { Capabilities } from 'selenium-webdriver';
31
32
  * @implements {@serenity-js/core/lib/screenplay~Ability}
32
33
  * @see {@link @serenity-js/core/lib/screenplay/actor~Actor}
33
34
  */
34
- export declare class BrowseTheWebWithProtractor extends BrowseTheWeb {
35
+ export declare class BrowseTheWebWithProtractor extends BrowseTheWeb<ElementFinder> {
35
36
  protected browser: ProtractorBrowser;
36
37
  /**
37
38
  * @desc
@@ -63,16 +64,9 @@ export declare class BrowseTheWebWithProtractor extends BrowseTheWeb {
63
64
  cookie(name: string): Promise<Cookie>;
64
65
  setCookie(cookieData: CookieData): Promise<void>;
65
66
  deleteAllCookies(): Promise<void>;
66
- findByCss(selector: string): PageElement<any, any>;
67
- findByCssContainingText(selector: string, text: string): PageElement<any, any>;
68
- findById(selector: string): PageElement<any, any>;
69
- findByTagName(selector: string): PageElement<any, any>;
70
- findByXPath(selector: string): PageElement<any, any>;
71
- findAllByCss(selector: string): PageElements<any, any, any>;
72
- findAllByTagName(selector: string): PageElements<any, any, any>;
73
- findAllByXPath(selector: string): PageElements<any, any, any>;
74
- private find;
75
- private findAll;
67
+ locate<T>(selector: Selector<T>, locator?: NativeElementLocator<ElementFinder>): ProtractorPageElement;
68
+ locateAll<T>(selector: Selector<T>, locator?: NativeElementLocator<ElementFinder>): Promise<ProtractorPageElement[]>;
69
+ nativeElementLocator(): NativeElementLocator<ElementFinder>;
76
70
  navigateTo(destination: string): Promise<void>;
77
71
  navigateBack(): Promise<void>;
78
72
  navigateForward(): Promise<void>;
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.BrowseTheWebWithProtractor = void 0;
4
4
  const core_1 = require("@serenity-js/core");
5
5
  const web_1 = require("@serenity-js/web");
6
- const protractor_1 = require("protractor");
7
6
  const models_1 = require("../models");
8
7
  const promised_1 = require("../promised");
9
8
  /**
@@ -92,41 +91,16 @@ class BrowseTheWebWithProtractor extends web_1.BrowseTheWeb {
92
91
  deleteAllCookies() {
93
92
  return (0, promised_1.promised)(this.browser.manage().deleteAllCookies());
94
93
  }
95
- findByCss(selector) {
96
- return this.find(root => root.element(protractor_1.by.css(selector)));
94
+ locate(selector, locator) {
95
+ return new models_1.ProtractorPageElement(selector, locator !== null && locator !== void 0 ? locator : this.nativeElementLocator());
97
96
  }
98
- findByCssContainingText(selector, text) {
99
- return this.find(root => root.element(protractor_1.by.cssContainingText(selector, text)));
97
+ async locateAll(selector, locator) {
98
+ const l = locator !== null && locator !== void 0 ? locator : this.nativeElementLocator();
99
+ const elements = await l.locateAll(selector);
100
+ return elements.map(element => new models_1.ProtractorPageElement(selector, new web_1.PassThroughNativeElementLocator(locator, element)));
100
101
  }
101
- findById(selector) {
102
- return this.find(root => root.element(protractor_1.by.id(selector)));
103
- }
104
- findByTagName(selector) {
105
- return this.find(root => root.element(protractor_1.by.tagName(selector)));
106
- }
107
- findByXPath(selector) {
108
- return this.find(root => root.element(protractor_1.by.xpath(selector)));
109
- }
110
- findAllByCss(selector) {
111
- return this.findAll(root => root.all(protractor_1.by.css(selector)));
112
- }
113
- findAllByTagName(selector) {
114
- return this.findAll(root => root.all(protractor_1.by.tagName(selector)));
115
- }
116
- findAllByXPath(selector) {
117
- return this.findAll(root => root.all(protractor_1.by.xpath(selector)));
118
- }
119
- find(locator) {
120
- return new models_1.ProtractorPageElement(() => ({
121
- element: this.browser.element.bind(this.browser),
122
- all: this.browser.element.all.bind(this.browser),
123
- }), locator);
124
- }
125
- findAll(locator) {
126
- return new models_1.ProtractorPageElements(() => ({
127
- element: this.browser.element.bind(this.browser),
128
- all: this.browser.element.all.bind(this.browser),
129
- }), locator);
102
+ nativeElementLocator() {
103
+ return new models_1.ProtractorNativeElementLocator(() => this.browser);
130
104
  }
131
105
  navigateTo(destination) {
132
106
  return (0, promised_1.promised)(this.browser.get(destination));
@@ -1 +1 @@
1
- {"version":3,"file":"BrowseTheWebWithProtractor.js","sourceRoot":"","sources":["../../../src/screenplay/abilities/BrowseTheWebWithProtractor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BrowseTheWebWithProtractor.js","sourceRoot":"","sources":["../../../src/screenplay/abilities/BrowseTheWebWithProtractor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { NativeElementLocator, Selector } from '@serenity-js/web';
2
+ import { ElementFinder } from 'protractor';
3
+ import { ProtractorNativeElementRoot } from './ProtractorNativeElementRoot';
4
+ export declare class ProtractorNativeElementLocator implements NativeElementLocator<ElementFinder> {
5
+ private readonly resolver;
6
+ constructor(resolver: () => Promise<ProtractorNativeElementRoot> | ProtractorNativeElementRoot);
7
+ locate<T>(selector: Selector<T>): Promise<ElementFinder>;
8
+ locateAll<T>(selector: Selector<T>): Promise<Array<ElementFinder>>;
9
+ }
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ProtractorNativeElementLocator = void 0;
4
+ const core_1 = require("@serenity-js/core");
5
+ const web_1 = require("@serenity-js/web");
6
+ const protractor_1 = require("protractor");
7
+ const tiny_types_1 = require("tiny-types");
8
+ const promisedWebElement_1 = require("../promisedWebElement");
9
+ const f = (0, core_1.format)({ markQuestions: false });
10
+ class ProtractorNativeElementLocator {
11
+ constructor(resolver) {
12
+ this.resolver = resolver;
13
+ }
14
+ async locate(selector) {
15
+ const resolver = await this.resolver();
16
+ const byLocator = (0, tiny_types_1.match)(selector)
17
+ .when(web_1.ByCss, (s) => protractor_1.by.css(s.value))
18
+ .when(web_1.ByCssContainingText, (s) => protractor_1.by.cssContainingText(s.value, s.text))
19
+ .when(web_1.ById, (s) => protractor_1.by.id(s.value))
20
+ .when(web_1.ByTagName, (s) => protractor_1.by.tagName(s.value))
21
+ .when(web_1.ByXPath, (s) => protractor_1.by.xpath(s.value))
22
+ .else(() => {
23
+ throw new core_1.LogicError(f `Selector ${selector} not supported`);
24
+ });
25
+ return (0, promisedWebElement_1.promisedWebElement)(resolver.element(byLocator));
26
+ }
27
+ async locateAll(selector) {
28
+ const resolver = await this.resolver();
29
+ const all = resolver.element.all || resolver.all;
30
+ const byLocator = (0, tiny_types_1.match)(selector)
31
+ .when(web_1.ByCss, (s) => protractor_1.by.css(s.value))
32
+ .when(web_1.ByTagName, (s) => protractor_1.by.tagName(s.value))
33
+ .when(web_1.ByXPath, (s) => protractor_1.by.xpath(s.value))
34
+ .else(() => {
35
+ throw new core_1.LogicError(f `Selector ${selector} not supported`);
36
+ });
37
+ const eaf = await all(byLocator);
38
+ return Promise.all(eaf.map(element => (0, promisedWebElement_1.promisedWebElement)(element)));
39
+ }
40
+ }
41
+ exports.ProtractorNativeElementLocator = ProtractorNativeElementLocator;
42
+ //# sourceMappingURL=ProtractorNativeElementLocator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProtractorNativeElementLocator.js","sourceRoot":"","sources":["../../../src/screenplay/models/ProtractorNativeElementLocator.ts"],"names":[],"mappings":";;;AAAA,4CAAuD;AACvD,0CAAwH;AACxH,2CAAwD;AACxD,2CAAmC;AAEnC,8DAA2D;AAG3D,MAAM,CAAC,GAAG,IAAA,aAAM,EAAC,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC;AAE3C,MAAa,8BAA8B;IACvC,YAA6B,QAAkF;QAAlF,aAAQ,GAAR,QAAQ,CAA0E;IAC/G,CAAC;IAED,KAAK,CAAC,MAAM,CAAI,QAAqB;QACjC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QAEvC,MAAM,SAAS,GAAG,IAAA,kBAAK,EAA6B,QAAQ,CAAC;aACxD,IAAI,CAAC,WAAK,EAAE,CAAC,CAAQ,EAAE,EAAE,CACtB,eAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAClB;aACA,IAAI,CAAC,yBAAmB,EAAE,CAAC,CAAsB,EAAE,EAAE,CAClD,eAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CACxC;aACA,IAAI,CAAC,UAAI,EAAE,CAAC,CAAO,EAAE,EAAE,CACpB,eAAE,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CACjB;aACA,IAAI,CAAC,eAAS,EAAE,CAAC,CAAY,EAAE,EAAE,CAC9B,eAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CACtB;aACA,IAAI,CAAC,aAAO,EAAE,CAAC,CAAU,EAAE,EAAE,CAC1B,eAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CACpB;aACA,IAAI,CAAC,GAAG,EAAE;YACP,MAAM,IAAI,iBAAU,CAAC,CAAC,CAAC,YAAa,QAAS,gBAAgB,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;QAEP,OAAO,IAAA,uCAAkB,EAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED,KAAK,CAAC,SAAS,CAAI,QAAqB;QACpC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACvC,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,IAAI,QAAQ,CAAC,GAAG,CAAC;QAEjD,MAAM,SAAS,GAAG,IAAA,kBAAK,EAA6B,QAAQ,CAAC;aACxD,IAAI,CAAC,WAAK,EAAE,CAAC,CAAQ,EAAE,EAAE,CACtB,eAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAClB;aACA,IAAI,CAAC,eAAS,EAAE,CAAC,CAAY,EAAE,EAAE,CAC9B,eAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CACtB;aACA,IAAI,CAAC,aAAO,EAAE,CAAC,CAAU,EAAE,EAAE,CAC1B,eAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CACpB;aACA,IAAI,CAAC,GAAG,EAAE;YACP,MAAM,IAAI,iBAAU,CAAC,CAAC,CAAC,YAAa,QAAS,gBAAgB,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;QAEP,MAAM,GAAG,GAAoB,MAAM,GAAG,CAAC,SAAS,CAAC,CAAC;QAElD,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CACjC,IAAA,uCAAkB,EAAC,OAAO,CAAC,CAC9B,CAAC,CAAC;IACP,CAAC;CACJ;AAtDD,wEAsDC"}
@@ -1,5 +1,8 @@
1
1
  import { ElementArrayFinder, ElementFinder, Locator } from 'protractor';
2
2
  export interface ProtractorNativeElementRoot {
3
- element: (selector: Locator) => ElementFinder;
4
- all: (selector: Locator) => ElementArrayFinder;
3
+ element: {
4
+ (selector: Locator): ElementFinder;
5
+ all?: (selector: Locator) => ElementArrayFinder;
6
+ };
7
+ all?: (selector: Locator) => ElementArrayFinder;
5
8
  }
@@ -1,9 +1,7 @@
1
1
  import { PageElement } from '@serenity-js/web';
2
2
  import { ElementFinder } from 'protractor';
3
- import { ProtractorNativeElementRoot } from './ProtractorNativeElementRoot';
4
- export declare class ProtractorPageElement extends PageElement<ProtractorNativeElementRoot, ElementFinder> {
5
- constructor(context: () => Promise<ProtractorNativeElementRoot> | ProtractorNativeElementRoot, locator: (root: ProtractorNativeElementRoot) => Promise<ElementFinder> | ElementFinder);
6
- of(parent: ProtractorPageElement): PageElement<ProtractorNativeElementRoot, ElementFinder>;
3
+ export declare class ProtractorPageElement extends PageElement<ElementFinder> {
4
+ of(parent: ProtractorPageElement): PageElement<ElementFinder>;
7
5
  clearValue(): Promise<void>;
8
6
  click(): Promise<void>;
9
7
  doubleClick(): Promise<void>;
@@ -16,8 +14,8 @@ export declare class ProtractorPageElement extends PageElement<ProtractorNativeE
16
14
  value(): Promise<string>;
17
15
  isActive(): Promise<boolean>;
18
16
  isClickable(): Promise<boolean>;
19
- isDisplayed(): Promise<boolean>;
20
17
  isEnabled(): Promise<boolean>;
21
18
  isPresent(): Promise<boolean>;
22
19
  isSelected(): Promise<boolean>;
20
+ isVisible(): Promise<boolean>;
23
21
  }
@@ -4,15 +4,10 @@ exports.ProtractorPageElement = void 0;
4
4
  const web_1 = require("@serenity-js/web");
5
5
  const protractor_1 = require("protractor");
6
6
  const promised_1 = require("../promised");
7
- const promisedWebElement_1 = require("../promisedWebElement");
7
+ const ProtractorNativeElementLocator_1 = require("./ProtractorNativeElementLocator");
8
8
  class ProtractorPageElement extends web_1.PageElement {
9
- constructor(context, locator) {
10
- super(context, context => {
11
- return (0, promisedWebElement_1.promisedWebElement)(locator(context));
12
- });
13
- }
14
9
  of(parent) {
15
- return new ProtractorPageElement(() => parent.nativeElement(), this.locator);
10
+ return new ProtractorPageElement(this.selector, new ProtractorNativeElementLocator_1.ProtractorNativeElementLocator(() => parent.nativeElement()));
16
11
  }
17
12
  async clearValue() {
18
13
  function removeCharactersFrom(elf, numberOfCharacters) {
@@ -91,10 +86,6 @@ class ProtractorPageElement extends web_1.PageElement {
91
86
  async isClickable() {
92
87
  return this.isEnabled();
93
88
  }
94
- async isDisplayed() {
95
- const element = await this.nativeElement();
96
- return element.isDisplayed();
97
- }
98
89
  async isEnabled() {
99
90
  const element = await this.nativeElement();
100
91
  return element.isEnabled();
@@ -107,6 +98,33 @@ class ProtractorPageElement extends web_1.PageElement {
107
98
  const element = await this.nativeElement();
108
99
  return element.isSelected();
109
100
  }
101
+ async isVisible() {
102
+ const element = await this.nativeElement();
103
+ if (!await element.isDisplayed()) {
104
+ return false;
105
+ }
106
+ const webElement = await element.getWebElement();
107
+ // get element at cx/cy and see if the element we found is our element, and therefore it's visible.
108
+ return (0, promised_1.promised)(webElement.getDriver().executeScript(`
109
+ var elem = arguments[0];
110
+
111
+ if (! elem.getBoundingClientRect) {
112
+ return false;
113
+ }
114
+
115
+ var
116
+ box = elem.getBoundingClientRect(),
117
+ cx = box.left + box.width / 2,
118
+ cy = box.top + box.height / 2,
119
+ e = document.elementFromPoint(cx, cy);
120
+
121
+ for (; e; e = e.parentElement) {
122
+ if (e === elem)
123
+ return true;
124
+ }
125
+ return false;
126
+ `, webElement));
127
+ }
110
128
  }
111
129
  exports.ProtractorPageElement = ProtractorPageElement;
112
130
  //# sourceMappingURL=ProtractorPageElement.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProtractorPageElement.js","sourceRoot":"","sources":["../../../src/screenplay/models/ProtractorPageElement.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ProtractorPageElement.js","sourceRoot":"","sources":["../../../src/screenplay/models/ProtractorPageElement.ts"],"names":[],"mappings":";;;AAAA,0CAA+C;AAC/C,2CAAuD;AAGvD,0CAAuC;AACvC,qFAAkF;AAElF,MAAa,qBACT,SAAQ,iBAA0B;IAElC,EAAE,CAAC,MAA6B;QAC5B,OAAO,IAAI,qBAAqB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,+DAA8B,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;IACtH,CAAC;IAED,KAAK,CAAC,UAAU;QACZ,SAAS,oBAAoB,CAAC,GAAkB,EAAE,kBAA0B;YACxE,OAAO,kBAAkB,KAAK,CAAC;gBAC3B,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACzB,CAAC,CAAC,GAAG,CAAC,QAAQ,CACV,uBAAU,CAAC,GAAG,CAAC,GAAG,EAClB,GAAG,KAAK,CAAC,kBAAkB,EAAE,uBAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAC1D,CAAC;QACV,CAAC;QAED,+DAA+D;QAC/D,SAAS,KAAK,CAAC,MAAc,EAAE,GAAW;YACtC,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;QACjD,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QAExC,IAAI,YAAY,KAAK,IAAI,IAAI,YAAY,KAAK,SAAS,EAAE;YACrD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;YAC3C,OAAO,oBAAoB,CAAC,OAAO,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;SAC7D;IACL,CAAC;IAED,KAAK,CAAC,KAAK;QACP,MAAM,OAAO,GAAkB,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAE1D,OAAO,OAAO,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,WAAW;QACb,MAAM,OAAO,GAAkB,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC1D,MAAM,UAAU,GAAe,MAAM,OAAO,CAAC,aAAa,EAAE,CAAC;QAE7D,OAAO,IAAA,mBAAQ,EACX,UAAU,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE;aAC3B,SAAS,CAAC,UAAU,CAAC;aACrB,WAAW,EAAE;aACb,OAAO,EAAE,CACjB,CAAC;IACN,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,KAA+C;QAC5D,MAAM,OAAO,GAAkB,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAE1D,OAAO,OAAO,CAAC,QAAQ,CACnB,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAC5B,CAAC;IACN,CAAC;IAED,KAAK,CAAC,cAAc;QAChB,MAAM,OAAO,GAAkB,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC1D,MAAM,UAAU,GAAe,MAAM,OAAO,CAAC,aAAa,EAAE,CAAC;QAE7D,OAAO,IAAA,mBAAQ,EACX,UAAU,CAAC,SAAS,EAAE,CAAC,aAAa,CAAC,oCAAoC,EAAE,UAAU,CAAC,CACzF,CAAC;IACN,CAAC;IAED,KAAK,CAAC,SAAS;QACX,MAAM,OAAO,GAAkB,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC1D,MAAM,UAAU,GAAe,MAAM,OAAO,CAAC,aAAa,EAAE,CAAC;QAE7D,OAAO,IAAA,mBAAQ,EACX,UAAU,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE;aAC3B,SAAS,CAAC,UAAU,CAAC;aACrB,OAAO,EAAE,CACjB,CAAC;IACN,CAAC;IAED,KAAK,CAAC,UAAU;QACZ,MAAM,OAAO,GAAkB,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC1D,MAAM,UAAU,GAAe,MAAM,OAAO,CAAC,aAAa,EAAE,CAAC;QAE7D,OAAO,IAAA,mBAAQ,EACX,UAAU,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE;aAC3B,SAAS,CAAC,UAAU,CAAC;aACrB,KAAK,CAAC,uBAAU,CAAC,MAAM,CAAC,KAAK,CAAC;aAC9B,OAAO,EAAE,CACjB,CAAC;IACN,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,IAAY;QACxB,MAAM,OAAO,GAAkB,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAE1D,OAAO,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,IAAI;QACN,MAAM,OAAO,GAAkB,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAE1D,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,KAAK;QACP,MAAM,OAAO,GAAkB,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC1D,MAAM,UAAU,GAAe,MAAM,OAAO,CAAC,aAAa,EAAE,CAAC;QAE7D,OAAO,IAAA,mBAAQ,EAAC,UAAU,CAAC,SAAS,EAAE,CAAC,aAAa;QAChD,0BAA0B;QAC1B,SAAS,QAAQ,CAAC,UAAU;YACxB,OAAO,UAAU,CAAC,KAAK,CAAC;QAC5B,CAAC,EACD,UAAU,CACb,CAAC,CAAC;IACP,CAAC;IAED,KAAK,CAAC,QAAQ;QACV,MAAM,OAAO,GAAkB,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC1D,MAAM,UAAU,GAAe,MAAM,OAAO,CAAC,aAAa,EAAE,CAAC;QAE7D,OAAO,UAAU,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,MAAkB,EAAE,EAAE,CACjF,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CACzB,CAAC;IACN,CAAC;IAED,KAAK,CAAC,WAAW;QACb,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,SAAS;QACX,MAAM,OAAO,GAAkB,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAE1D,OAAO,OAAO,CAAC,SAAS,EAAE,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,SAAS;QACX,MAAM,OAAO,GAAkB,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAE1D,OAAO,OAAO,CAAC,SAAS,EAAE,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,UAAU;QACZ,MAAM,OAAO,GAAkB,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAE1D,OAAO,OAAO,CAAC,UAAU,EAAE,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,SAAS;QACX,MAAM,OAAO,GAAkB,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAE1D,IAAI,CAAE,MAAM,OAAO,CAAC,WAAW,EAAE,EAAE;YAC/B,OAAO,KAAK,CAAC;SAChB;QAED,MAAM,UAAU,GAAe,MAAM,OAAO,CAAC,aAAa,EAAE,CAAC;QAE7D,mGAAmG;QACnG,OAAO,IAAA,mBAAQ,EAAC,UAAU,CAAC,SAAS,EAAE,CAAC,aAAa,CAChD;;;;;;;;;;;;;;;;;;aAkBC,EACD,UAAU,CACb,CAAC,CAAC;IACP,CAAC;CACJ;AAjLD,sDAiLC"}
@@ -1,6 +1,6 @@
1
1
  export * from './ProtractorCookie';
2
2
  export * from './ProtractorModalDialog';
3
+ export * from './ProtractorNativeElementLocator';
3
4
  export * from './ProtractorNativeElementRoot';
4
5
  export * from './ProtractorPage';
5
6
  export * from './ProtractorPageElement';
6
- export * from './ProtractorPageElements';
@@ -12,8 +12,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
13
  __exportStar(require("./ProtractorCookie"), exports);
14
14
  __exportStar(require("./ProtractorModalDialog"), exports);
15
+ __exportStar(require("./ProtractorNativeElementLocator"), exports);
15
16
  __exportStar(require("./ProtractorNativeElementRoot"), exports);
16
17
  __exportStar(require("./ProtractorPage"), exports);
17
18
  __exportStar(require("./ProtractorPageElement"), exports);
18
- __exportStar(require("./ProtractorPageElements"), exports);
19
19
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/screenplay/models/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qDAAmC;AACnC,0DAAwC;AACxC,gEAA8C;AAC9C,mDAAiC;AACjC,0DAAwC;AACxC,2DAAyC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/screenplay/models/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qDAAmC;AACnC,0DAAwC;AACxC,mEAAiD;AACjD,gEAA8C;AAC9C,mDAAiC;AACjC,0DAAwC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@serenity-js/protractor",
3
- "version": "3.0.0-rc.2",
3
+ "version": "3.0.0-rc.3",
4
4
  "description": "Test your web apps with Serenity/JS",
5
5
  "author": {
6
6
  "name": "Jan Molak",
@@ -50,11 +50,11 @@
50
50
  "npm": "^6 || ^7 || ^8"
51
51
  },
52
52
  "dependencies": {
53
- "@serenity-js/assertions": "3.0.0-rc.2",
54
- "@serenity-js/core": "3.0.0-rc.1",
53
+ "@serenity-js/assertions": "3.0.0-rc.3",
54
+ "@serenity-js/core": "3.0.0-rc.3",
55
55
  "deepmerge": "^4.2.2",
56
56
  "is-plain-object": "^5.0.0",
57
- "tiny-types": "^1.16.1"
57
+ "tiny-types": "^1.17.0"
58
58
  },
59
59
  "peerDependencies": {
60
60
  "@serenity-js/cucumber": "^3.0.0-rc",
@@ -77,12 +77,12 @@
77
77
  "devDependencies": {
78
78
  "@documentation/esdoc-template": "3.0.0",
79
79
  "@integration/testing-tools": "3.0.0",
80
- "@serenity-js/cucumber": "3.0.0-rc.2",
81
- "@serenity-js/jasmine": "3.0.0-rc.2",
82
- "@serenity-js/local-server": "3.0.0-rc.2",
83
- "@serenity-js/mocha": "3.0.0-rc.2",
84
- "@serenity-js/rest": "3.0.0-rc.2",
85
- "@serenity-js/web": "3.0.0-rc.2",
80
+ "@serenity-js/cucumber": "3.0.0-rc.3",
81
+ "@serenity-js/jasmine": "3.0.0-rc.3",
82
+ "@serenity-js/local-server": "3.0.0-rc.3",
83
+ "@serenity-js/mocha": "3.0.0-rc.3",
84
+ "@serenity-js/rest": "3.0.0-rc.3",
85
+ "@serenity-js/web": "3.0.0-rc.3",
86
86
  "@types/chai": "^4.3.0",
87
87
  "@types/express": "^4.17.13",
88
88
  "@types/html-minifier": "^4.0.1",
@@ -122,5 +122,5 @@
122
122
  "cache": true,
123
123
  "all": true
124
124
  },
125
- "gitHead": "944ff400a3766e75980aea5d3b401d8acca7c6d8"
125
+ "gitHead": "69da7444e581c457e29e87edcd910ec06a069338"
126
126
  }
@@ -1,9 +1,21 @@
1
1
  import { ConfigurationError, Duration, LogicError, UsesAbilities } from '@serenity-js/core';
2
- import { BrowserCapabilities, BrowseTheWeb, Cookie, CookieData, Key, ModalDialog, Page, PageElement, PageElements } from '@serenity-js/web';
3
- import { by, ElementArrayFinder, ElementFinder, ProtractorBrowser, WebElementPromise } from 'protractor';
2
+ import {
3
+ BrowserCapabilities,
4
+ BrowseTheWeb,
5
+ Cookie,
6
+ CookieData,
7
+ Key,
8
+ ModalDialog,
9
+ NativeElementLocator,
10
+ Page,
11
+ PageElement,
12
+ PassThroughNativeElementLocator,
13
+ Selector,
14
+ } from '@serenity-js/web';
15
+ import { ElementFinder, ProtractorBrowser, WebElementPromise } from 'protractor';
4
16
  import { Capabilities } from 'selenium-webdriver';
5
17
 
6
- import { ProtractorCookie, ProtractorModalDialog, ProtractorNativeElementRoot, ProtractorPage, ProtractorPageElement, ProtractorPageElements } from '../models';
18
+ import { ProtractorCookie, ProtractorModalDialog, ProtractorNativeElementLocator, ProtractorPage, ProtractorPageElement } from '../models';
7
19
  import { promised } from '../promised';
8
20
 
9
21
  /**
@@ -35,7 +47,7 @@ import { promised } from '../promised';
35
47
  * @implements {@serenity-js/core/lib/screenplay~Ability}
36
48
  * @see {@link @serenity-js/core/lib/screenplay/actor~Actor}
37
49
  */
38
- export class BrowseTheWebWithProtractor extends BrowseTheWeb {
50
+ export class BrowseTheWebWithProtractor extends BrowseTheWeb<ElementFinder> {
39
51
 
40
52
  /**
41
53
  * @desc
@@ -105,56 +117,21 @@ export class BrowseTheWebWithProtractor extends BrowseTheWeb {
105
117
  return promised(this.browser.manage().deleteAllCookies());
106
118
  }
107
119
 
108
- findByCss(selector: string): PageElement<any, any> {
109
- return this.find(root => root.element(by.css(selector)));
120
+ locate<T>(selector: Selector<T>, locator?: NativeElementLocator<ElementFinder>): ProtractorPageElement {
121
+ return new ProtractorPageElement(selector, locator ?? this.nativeElementLocator());
110
122
  }
111
123
 
112
- findByCssContainingText(selector: string, text: string): PageElement<any, any> {
113
- return this.find(root => root.element(by.cssContainingText(selector, text)));
114
- }
115
-
116
- findById(selector: string): PageElement<any, any> {
117
- return this.find(root => root.element(by.id(selector)));
118
- }
119
-
120
- findByTagName(selector: string): PageElement<any, any> {
121
- return this.find(root => root.element(by.tagName(selector)));
122
- }
123
-
124
- findByXPath(selector: string): PageElement<any, any> {
125
- return this.find(root => root.element(by.xpath(selector)));
126
- }
124
+ async locateAll<T>(selector: Selector<T>, locator?: NativeElementLocator<ElementFinder>): Promise<ProtractorPageElement[]> {
125
+ const l = locator ?? this.nativeElementLocator();
126
+ const elements = await l.locateAll(selector);
127
127
 
128
- findAllByCss(selector: string): PageElements<any, any, any> {
129
- return this.findAll(root => root.all(by.css(selector)));
130
- }
131
-
132
- findAllByTagName(selector: string): PageElements<any, any, any> {
133
- return this.findAll(root => root.all(by.tagName(selector)));
134
- }
135
-
136
- findAllByXPath(selector: string): PageElements<any, any, any> {
137
- return this.findAll(root => root.all(by.xpath(selector)));
138
- }
139
-
140
- private find(locator: (root: ProtractorNativeElementRoot) => Promise<ElementFinder> | ElementFinder): ProtractorPageElement {
141
- return new ProtractorPageElement(
142
- () => ({
143
- element: this.browser.element.bind(this.browser),
144
- all: this.browser.element.all.bind(this.browser),
145
- }),
146
- locator,
128
+ return elements.map(element =>
129
+ new ProtractorPageElement(selector, new PassThroughNativeElementLocator<ElementFinder>(locator, element)),
147
130
  );
148
131
  }
149
132
 
150
- private findAll(locator: (root: ProtractorNativeElementRoot) => Promise<ElementArrayFinder> | ElementArrayFinder): ProtractorPageElements {
151
- return new ProtractorPageElements(
152
- () => ({
153
- element: this.browser.element.bind(this.browser),
154
- all: this.browser.element.all.bind(this.browser),
155
- }),
156
- locator,
157
- );
133
+ nativeElementLocator(): NativeElementLocator<ElementFinder> {
134
+ return new ProtractorNativeElementLocator(() => this.browser);
158
135
  }
159
136
 
160
137
  navigateTo(destination: string): Promise<void> {
@@ -0,0 +1,65 @@
1
+ import { format, LogicError } from '@serenity-js/core';
2
+ import { ByCss, ByCssContainingText, ById, ByTagName, ByXPath, NativeElementLocator, Selector } from '@serenity-js/web';
3
+ import { by, ElementFinder, Locator } from 'protractor';
4
+ import { match } from 'tiny-types';
5
+
6
+ import { promisedWebElement } from '../promisedWebElement';
7
+ import { ProtractorNativeElementRoot } from './ProtractorNativeElementRoot';
8
+
9
+ const f = format({ markQuestions: false });
10
+
11
+ export class ProtractorNativeElementLocator implements NativeElementLocator<ElementFinder> {
12
+ constructor(private readonly resolver: () => Promise<ProtractorNativeElementRoot> | ProtractorNativeElementRoot) {
13
+ }
14
+
15
+ async locate<T>(selector: Selector<T>): Promise<ElementFinder> {
16
+ const resolver = await this.resolver();
17
+
18
+ const byLocator = match<Selector<unknown>, Locator>(selector)
19
+ .when(ByCss, (s: ByCss) =>
20
+ by.css(s.value)
21
+ )
22
+ .when(ByCssContainingText, (s: ByCssContainingText) =>
23
+ by.cssContainingText(s.value, s.text)
24
+ )
25
+ .when(ById, (s: ById) =>
26
+ by.id(s.value)
27
+ )
28
+ .when(ByTagName, (s: ByTagName) =>
29
+ by.tagName(s.value)
30
+ )
31
+ .when(ByXPath, (s: ByXPath) =>
32
+ by.xpath(s.value)
33
+ )
34
+ .else(() => {
35
+ throw new LogicError(f `Selector ${ selector } not supported`);
36
+ });
37
+
38
+ return promisedWebElement(resolver.element(byLocator));
39
+ }
40
+
41
+ async locateAll<T>(selector: Selector<T>): Promise<Array<ElementFinder>> {
42
+ const resolver = await this.resolver();
43
+ const all = resolver.element.all || resolver.all;
44
+
45
+ const byLocator = match<Selector<unknown>, Locator>(selector)
46
+ .when(ByCss, (s: ByCss) =>
47
+ by.css(s.value)
48
+ )
49
+ .when(ByTagName, (s: ByTagName) =>
50
+ by.tagName(s.value)
51
+ )
52
+ .when(ByXPath, (s: ByXPath) =>
53
+ by.xpath(s.value)
54
+ )
55
+ .else(() => {
56
+ throw new LogicError(f `Selector ${ selector } not supported`);
57
+ });
58
+
59
+ const eaf: ElementFinder[] = await all(byLocator);
60
+
61
+ return Promise.all(eaf.map(element =>
62
+ promisedWebElement(element)
63
+ ));
64
+ }
65
+ }
@@ -1,6 +1,9 @@
1
1
  import { ElementArrayFinder, ElementFinder, Locator } from 'protractor';
2
2
 
3
3
  export interface ProtractorNativeElementRoot {
4
- element: (selector: Locator) => ElementFinder;
5
- all: (selector: Locator) => ElementArrayFinder;
4
+ element: {
5
+ (selector: Locator): ElementFinder;
6
+ all?: (selector: Locator) => ElementArrayFinder; // ProtractorBrowser implementation
7
+ }
8
+ all?: (selector: Locator) => ElementArrayFinder; // ElementFinder implementation
6
9
  }
@@ -3,23 +3,13 @@ import { ElementFinder, protractor } from 'protractor';
3
3
  import { WebElement } from 'selenium-webdriver';
4
4
 
5
5
  import { promised } from '../promised';
6
- import { promisedWebElement } from '../promisedWebElement';
7
- import { ProtractorNativeElementRoot } from './ProtractorNativeElementRoot';
6
+ import { ProtractorNativeElementLocator } from './ProtractorNativeElementLocator';
8
7
 
9
8
  export class ProtractorPageElement
10
- extends PageElement<ProtractorNativeElementRoot, ElementFinder>
9
+ extends PageElement<ElementFinder>
11
10
  {
12
- constructor(
13
- context: () => Promise<ProtractorNativeElementRoot> | ProtractorNativeElementRoot,
14
- locator: (root: ProtractorNativeElementRoot) => Promise<ElementFinder> | ElementFinder
15
- ) {
16
- super(context, context => {
17
- return promisedWebElement<ElementFinder>(locator(context));
18
- });
19
- }
20
-
21
- of(parent: ProtractorPageElement): PageElement<ProtractorNativeElementRoot, ElementFinder> {
22
- return new ProtractorPageElement(() => parent.nativeElement(), this.locator);
11
+ of(parent: ProtractorPageElement): PageElement<ElementFinder> {
12
+ return new ProtractorPageElement(this.selector, new ProtractorNativeElementLocator(() => parent.nativeElement()));
23
13
  }
24
14
 
25
15
  async clearValue(): Promise<void> {
@@ -141,12 +131,6 @@ export class ProtractorPageElement
141
131
  return this.isEnabled();
142
132
  }
143
133
 
144
- async isDisplayed(): Promise<boolean> {
145
- const element: ElementFinder = await this.nativeElement();
146
-
147
- return element.isDisplayed();
148
- }
149
-
150
134
  async isEnabled(): Promise<boolean> {
151
135
  const element: ElementFinder = await this.nativeElement();
152
136
 
@@ -164,4 +148,38 @@ export class ProtractorPageElement
164
148
 
165
149
  return element.isSelected();
166
150
  }
151
+
152
+ async isVisible(): Promise<boolean> {
153
+ const element: ElementFinder = await this.nativeElement();
154
+
155
+ if (! await element.isDisplayed()) {
156
+ return false;
157
+ }
158
+
159
+ const webElement: WebElement = await element.getWebElement();
160
+
161
+ // get element at cx/cy and see if the element we found is our element, and therefore it's visible.
162
+ return promised(webElement.getDriver().executeScript(
163
+ `
164
+ var elem = arguments[0];
165
+
166
+ if (! elem.getBoundingClientRect) {
167
+ return false;
168
+ }
169
+
170
+ var
171
+ box = elem.getBoundingClientRect(),
172
+ cx = box.left + box.width / 2,
173
+ cy = box.top + box.height / 2,
174
+ e = document.elementFromPoint(cx, cy);
175
+
176
+ for (; e; e = e.parentElement) {
177
+ if (e === elem)
178
+ return true;
179
+ }
180
+ return false;
181
+ `,
182
+ webElement,
183
+ ));
184
+ }
167
185
  }
@@ -1,7 +1,7 @@
1
1
  export * from './ProtractorCookie';
2
2
  export * from './ProtractorModalDialog';
3
+ export * from './ProtractorNativeElementLocator';
3
4
  export * from './ProtractorNativeElementRoot';
4
5
  export * from './ProtractorPage';
5
6
  export * from './ProtractorPageElement';
6
- export * from './ProtractorPageElements';
7
7
 
@@ -1,16 +0,0 @@
1
- import { PageElement, PageElements } from '@serenity-js/web';
2
- import { ElementArrayFinder, ElementFinder } from 'protractor';
3
- import { ProtractorNativeElementRoot } from './ProtractorNativeElementRoot';
4
- import { ProtractorPageElement } from './ProtractorPageElement';
5
- export declare class ProtractorPageElements extends PageElements<ProtractorNativeElementRoot, ElementArrayFinder, ElementFinder> {
6
- constructor(context: () => Promise<ProtractorNativeElementRoot> | ProtractorNativeElementRoot, locator: (root: ProtractorNativeElementRoot) => Promise<ElementArrayFinder> | ElementArrayFinder);
7
- of(parent: PageElement<ProtractorNativeElementRoot, ElementFinder>): ProtractorPageElements;
8
- count(): Promise<number>;
9
- first(): Promise<ProtractorPageElement>;
10
- last(): Promise<ProtractorPageElement>;
11
- get(index: number): Promise<ProtractorPageElement>;
12
- map<O>(fn: (element: PageElement, index?: number, elements?: PageElements) => Promise<O> | O): Promise<O[]>;
13
- filter(fn: (element: PageElement, index?: number) => Promise<boolean> | boolean): PageElements;
14
- forEach(fn: (element: PageElement, index?: number, elements?: PageElements) => Promise<void> | void): Promise<void>;
15
- private asElement;
16
- }
@@ -1,62 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ProtractorPageElements = void 0;
4
- const core_1 = require("@serenity-js/core");
5
- const web_1 = require("@serenity-js/web");
6
- const promisedWebElement_1 = require("../promisedWebElement");
7
- const ProtractorPageElement_1 = require("./ProtractorPageElement");
8
- class ProtractorPageElements extends web_1.PageElements {
9
- constructor(context, locator) {
10
- super(context, async (context) => {
11
- return (0, promisedWebElement_1.promisedWebElement)(locator(context));
12
- });
13
- }
14
- of(parent) {
15
- return new ProtractorPageElements(() => parent.nativeElement(), this.locator);
16
- }
17
- async count() {
18
- const elements = await this.nativeElementList();
19
- return elements.count();
20
- }
21
- async first() {
22
- const elements = await this.nativeElementList();
23
- return this.asElement(elements.first());
24
- }
25
- async last() {
26
- const elements = await this.nativeElementList();
27
- return this.asElement(elements.last());
28
- }
29
- async get(index) {
30
- const elements = await this.nativeElementList();
31
- if (!elements.get(index)) {
32
- throw new core_1.LogicError(`There's no item at index ${index}`);
33
- }
34
- return this.asElement(elements.get(index));
35
- }
36
- async map(fn) {
37
- const elements = await this.nativeElementList();
38
- return elements.map((element, i) => fn(new ProtractorPageElement_1.ProtractorPageElement(this.context, _context => element), i, this));
39
- }
40
- filter(fn) {
41
- return new ProtractorPageElements(this.context, async (context) => {
42
- const elements = await this.locator(context);
43
- const result = elements.filter(async (nativeElement, index) => {
44
- const element = new ProtractorPageElement_1.ProtractorPageElement(this.context, _context => nativeElement);
45
- const result = await fn(element, index);
46
- return result;
47
- });
48
- return (0, promisedWebElement_1.promisedWebElement)(result);
49
- });
50
- }
51
- async forEach(fn) {
52
- const elements = await this.nativeElementList();
53
- return elements.each((element, index) => {
54
- return fn(new ProtractorPageElement_1.ProtractorPageElement(this.context, _context => element), index, this);
55
- });
56
- }
57
- asElement(elementFinder) {
58
- return new ProtractorPageElement_1.ProtractorPageElement(this.context, _context => elementFinder);
59
- }
60
- }
61
- exports.ProtractorPageElements = ProtractorPageElements;
62
- //# sourceMappingURL=ProtractorPageElements.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ProtractorPageElements.js","sourceRoot":"","sources":["../../../src/screenplay/models/ProtractorPageElements.ts"],"names":[],"mappings":"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"}
@@ -1,86 +0,0 @@
1
- import { LogicError } from '@serenity-js/core';
2
- import { PageElement, PageElements } from '@serenity-js/web';
3
- import { ElementArrayFinder, ElementFinder } from 'protractor';
4
-
5
- import { promisedWebElement } from '../promisedWebElement';
6
- import { ProtractorNativeElementRoot } from './ProtractorNativeElementRoot';
7
- import { ProtractorPageElement } from './ProtractorPageElement';
8
-
9
- export class ProtractorPageElements
10
- extends PageElements<ProtractorNativeElementRoot, ElementArrayFinder, ElementFinder>
11
- {
12
- constructor(
13
- context: () => Promise<ProtractorNativeElementRoot> | ProtractorNativeElementRoot,
14
- locator: (root: ProtractorNativeElementRoot) => Promise<ElementArrayFinder> | ElementArrayFinder
15
- ) {
16
- super(context, async (context: ProtractorNativeElementRoot): Promise<ElementArrayFinder> => {
17
- return promisedWebElement<ElementArrayFinder>(locator(context));
18
- });
19
- }
20
-
21
- of(parent: PageElement<ProtractorNativeElementRoot, ElementFinder>): ProtractorPageElements {
22
- return new ProtractorPageElements(() => parent.nativeElement(), this.locator);
23
- }
24
-
25
- async count(): Promise<number> {
26
- const elements = await this.nativeElementList() as unknown as ElementArrayFinder;
27
- return elements.count();
28
- }
29
-
30
- async first(): Promise<ProtractorPageElement> {
31
- const elements = await this.nativeElementList() as unknown as ElementArrayFinder;
32
- return this.asElement(elements.first());
33
- }
34
-
35
- async last(): Promise<ProtractorPageElement> {
36
- const elements = await this.nativeElementList() as unknown as ElementArrayFinder;
37
- return this.asElement(elements.last());
38
- }
39
-
40
- async get(index: number): Promise<ProtractorPageElement> {
41
- const elements = await this.nativeElementList() as unknown as ElementArrayFinder;
42
-
43
- if (! elements.get(index)) {
44
- throw new LogicError(`There's no item at index ${ index }`);
45
- }
46
-
47
- return this.asElement(elements.get(index));
48
- }
49
-
50
- async map<O>(fn: (element: PageElement, index?: number, elements?: PageElements) => Promise<O> | O): Promise<O[]> {
51
- const elements = await this.nativeElementList() as unknown as ElementArrayFinder;
52
-
53
- return elements.map((element?: ElementFinder, i?: number) =>
54
- fn(new ProtractorPageElement(this.context, _context => element), i, this)
55
- );
56
- }
57
-
58
- filter(fn: (element: PageElement, index?: number) => Promise<boolean> | boolean): PageElements {
59
- return new ProtractorPageElements(
60
- this.context,
61
- async (context: ProtractorNativeElementRoot): Promise<ElementArrayFinder> => {
62
- const elements = await this.locator(context) as unknown as ElementArrayFinder;
63
-
64
- const result = elements.filter(async (nativeElement: ElementFinder, index: number) => {
65
- const element = new ProtractorPageElement(this.context, _context => nativeElement);
66
- const result = await fn(element, index);
67
- return result;
68
- });
69
-
70
- return promisedWebElement<ElementArrayFinder>(result);
71
- }
72
- );
73
- }
74
-
75
- async forEach(fn: (element: PageElement, index?: number, elements?: PageElements) => Promise<void> | void): Promise<void> {
76
- const elements = await this.nativeElementList() as unknown as ElementArrayFinder
77
-
78
- return elements.each((element: ElementFinder, index: number) => {
79
- return fn(new ProtractorPageElement(this.context, _context => element), index, this);
80
- });
81
- }
82
-
83
- private asElement(elementFinder: ElementFinder): PageElement {
84
- return new ProtractorPageElement(this.context, _context => elementFinder);
85
- }
86
- }