@serenity-js/protractor 3.0.0-rc.1 → 3.0.0-rc.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/CHANGELOG.md +49 -0
  2. package/lib/screenplay/abilities/BrowseTheWebWithProtractor.d.ts +5 -23
  3. package/lib/screenplay/abilities/BrowseTheWebWithProtractor.js +7 -48
  4. package/lib/screenplay/abilities/BrowseTheWebWithProtractor.js.map +1 -1
  5. package/lib/screenplay/interactions/UseAngular.js +2 -2
  6. package/lib/screenplay/interactions/UseAngular.js.map +1 -1
  7. package/lib/screenplay/models/ProtractorPageElement.d.ts +3 -5
  8. package/lib/screenplay/models/ProtractorPageElement.js +28 -11
  9. package/lib/screenplay/models/ProtractorPageElement.js.map +1 -1
  10. package/lib/screenplay/models/index.d.ts +0 -2
  11. package/lib/screenplay/models/index.js +0 -2
  12. package/lib/screenplay/models/index.js.map +1 -1
  13. package/lib/screenplay/models/locators/ProtractorLocator.d.ts +9 -0
  14. package/lib/screenplay/models/locators/ProtractorLocator.js +28 -0
  15. package/lib/screenplay/models/locators/ProtractorLocator.js.map +1 -0
  16. package/lib/screenplay/models/{ProtractorNativeElementRoot.d.ts → locators/ProtractorNativeElementRoot.d.ts} +2 -2
  17. package/lib/screenplay/models/{ProtractorNativeElementRoot.js → locators/ProtractorNativeElementRoot.js} +0 -0
  18. package/lib/screenplay/models/locators/ProtractorNativeElementRoot.js.map +1 -0
  19. package/lib/screenplay/models/locators/index.d.ts +2 -0
  20. package/lib/screenplay/models/locators/index.js +15 -0
  21. package/lib/screenplay/models/locators/index.js.map +1 -0
  22. package/lib/screenplay/questions/ProtractorParam.js +1 -1
  23. package/lib/screenplay/questions/ProtractorParam.js.map +1 -1
  24. package/lib/screenplay/{promisedWebElement.d.ts → unpromisedWebElement.d.ts} +1 -1
  25. package/lib/screenplay/{promisedWebElement.js → unpromisedWebElement.js} +6 -9
  26. package/lib/screenplay/unpromisedWebElement.js.map +1 -0
  27. package/package.json +14 -14
  28. package/src/screenplay/abilities/BrowseTheWebWithProtractor.ts +13 -70
  29. package/src/screenplay/interactions/UseAngular.ts +2 -2
  30. package/src/screenplay/models/ProtractorPageElement.ts +37 -20
  31. package/src/screenplay/models/index.ts +0 -2
  32. package/src/screenplay/models/locators/ProtractorLocator.ts +50 -0
  33. package/src/screenplay/models/{ProtractorNativeElementRoot.ts → locators/ProtractorNativeElementRoot.ts} +2 -2
  34. package/src/screenplay/models/locators/index.ts +2 -0
  35. package/src/screenplay/questions/ProtractorParam.ts +1 -1
  36. package/src/screenplay/{promisedWebElement.ts → unpromisedWebElement.ts} +3 -6
  37. package/lib/screenplay/models/ProtractorNativeElementRoot.js.map +0 -1
  38. package/lib/screenplay/models/ProtractorPageElements.d.ts +0 -16
  39. package/lib/screenplay/models/ProtractorPageElements.js +0 -62
  40. package/lib/screenplay/models/ProtractorPageElements.js.map +0 -1
  41. package/lib/screenplay/promisedWebElement.js.map +0 -1
  42. package/src/screenplay/models/ProtractorPageElements.ts +0 -86
package/CHANGELOG.md CHANGED
@@ -3,6 +3,55 @@
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.5](https://github.com/serenity-js/serenity-js/compare/v3.0.0-rc.4...v3.0.0-rc.5) (2022-01-07)
7
+
8
+
9
+ ### Features
10
+
11
+ * **web:** support for advanced PageElement locator patterns ([c1ff8b7](https://github.com/serenity-js/serenity-js/commit/c1ff8b7539ebc1da8f79ea2b6d17bb01c42f443d)), closes [#1084](https://github.com/serenity-js/serenity-js/issues/1084)
12
+
13
+
14
+
15
+
16
+
17
+ # [3.0.0-rc.4](https://github.com/serenity-js/serenity-js/compare/v3.0.0-rc.3...v3.0.0-rc.4) (2021-12-30)
18
+
19
+ **Note:** Version bump only for package @serenity-js/protractor
20
+
21
+
22
+
23
+
24
+
25
+ # [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)
26
+
27
+
28
+ ### Bug Fixes
29
+
30
+ * **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)
31
+ * **deps:** updated tiny-types to 1.17.0 ([3187051](https://github.com/serenity-js/serenity-js/commit/3187051594158b4b450c82e851e417fd2ed21652))
32
+ * **web:** refactored Selector and NativeElementLocator classes to simplify the implementation ([f0c8f11](https://github.com/serenity-js/serenity-js/commit/f0c8f113433958877d36f13d0bc7f355ea68d280))
33
+
34
+
35
+ ### Features
36
+
37
+ * **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))
38
+ * **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)
39
+
40
+
41
+
42
+
43
+
44
+ # [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)
45
+
46
+
47
+ ### Bug Fixes
48
+
49
+ * **lerna:** corrected versions of internal deps ([582b922](https://github.com/serenity-js/serenity-js/commit/582b922dbade08e970cb796f15aca909f606c079))
50
+
51
+
52
+
53
+
54
+
6
55
  # [3.0.0-rc.1](https://github.com/serenity-js/serenity-js/compare/v3.0.0-rc.0...v3.0.0-rc.1) (2021-12-09)
7
56
 
8
57
  **Note:** Version bump only for package @serenity-js/protractor
@@ -1,7 +1,8 @@
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';
1
+ import { Duration } from '@serenity-js/core';
2
+ import { BrowserCapabilities, BrowseTheWeb, Cookie, CookieData, Key, ModalDialog, Page, PageElement } from '@serenity-js/web';
3
+ import { ElementFinder, ProtractorBrowser } from 'protractor';
4
4
  import { Capabilities } from 'selenium-webdriver';
5
+ import { ProtractorNativeElementRoot } from '../models/locators';
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, ProtractorNativeElementRoot> {
35
36
  protected browser: ProtractorBrowser;
36
37
  /**
37
38
  * @desc
@@ -41,15 +42,6 @@ export declare class BrowseTheWebWithProtractor extends BrowseTheWeb {
41
42
  * @returns {BrowseTheWebWithProtractor}
42
43
  */
43
44
  static using(browser: ProtractorBrowser): BrowseTheWebWithProtractor;
44
- /**
45
- * @desc
46
- * Used to access the Actor's ability to {@link BrowseTheWebWithProtractor} from within the {@link Interaction} classes,
47
- * such as {@link Navigate}.
48
- *
49
- * @param {UsesAbilities} actor
50
- * @return {BrowseTheWebWithProtractor}
51
- */
52
- static as(actor: UsesAbilities): BrowseTheWebWithProtractor;
53
45
  /**
54
46
  * @private
55
47
  */
@@ -63,16 +55,6 @@ export declare class BrowseTheWebWithProtractor extends BrowseTheWeb {
63
55
  cookie(name: string): Promise<Cookie>;
64
56
  setCookie(cookieData: CookieData): Promise<void>;
65
57
  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;
76
58
  navigateTo(destination: string): Promise<void>;
77
59
  navigateBack(): Promise<void>;
78
60
  navigateForward(): Promise<void>;
@@ -5,6 +5,7 @@ const core_1 = require("@serenity-js/core");
5
5
  const web_1 = require("@serenity-js/web");
6
6
  const protractor_1 = require("protractor");
7
7
  const models_1 = require("../models");
8
+ const locators_1 = require("../models/locators");
8
9
  const promised_1 = require("../promised");
9
10
  /**
10
11
  * @desc
@@ -41,7 +42,12 @@ class BrowseTheWebWithProtractor extends web_1.BrowseTheWeb {
41
42
  * An instance of a protractor browser
42
43
  */
43
44
  constructor(browser) {
44
- super();
45
+ super(new Map()
46
+ .set(web_1.ByCss, (selector) => locators_1.ProtractorLocator.createRootLocator(this.browser, selector, protractor_1.by.css(selector.value)))
47
+ .set(web_1.ByCssContainingText, (selector) => locators_1.ProtractorLocator.createRootLocator(this.browser, selector, protractor_1.by.cssContainingText(selector.value, selector.text)))
48
+ .set(web_1.ById, (selector) => locators_1.ProtractorLocator.createRootLocator(this.browser, selector, protractor_1.by.id(selector.value)))
49
+ .set(web_1.ByTagName, (selector) => locators_1.ProtractorLocator.createRootLocator(this.browser, selector, protractor_1.by.tagName(selector.value)))
50
+ .set(web_1.ByXPath, (selector) => locators_1.ProtractorLocator.createRootLocator(this.browser, selector, protractor_1.by.xpath(selector.value))));
45
51
  this.browser = browser;
46
52
  }
47
53
  /**
@@ -54,17 +60,6 @@ class BrowseTheWebWithProtractor extends web_1.BrowseTheWeb {
54
60
  static using(browser) {
55
61
  return new BrowseTheWebWithProtractor(browser);
56
62
  }
57
- /**
58
- * @desc
59
- * Used to access the Actor's ability to {@link BrowseTheWebWithProtractor} from within the {@link Interaction} classes,
60
- * such as {@link Navigate}.
61
- *
62
- * @param {UsesAbilities} actor
63
- * @return {BrowseTheWebWithProtractor}
64
- */
65
- static as(actor) {
66
- return actor.abilityTo(BrowseTheWebWithProtractor);
67
- }
68
63
  async browserCapabilities() {
69
64
  const capabilities = await (0, promised_1.promised)(this.browser.getCapabilities());
70
65
  return {
@@ -92,42 +87,6 @@ class BrowseTheWebWithProtractor extends web_1.BrowseTheWeb {
92
87
  deleteAllCookies() {
93
88
  return (0, promised_1.promised)(this.browser.manage().deleteAllCookies());
94
89
  }
95
- findByCss(selector) {
96
- return this.find(root => root.element(protractor_1.by.css(selector)));
97
- }
98
- findByCssContainingText(selector, text) {
99
- return this.find(root => root.element(protractor_1.by.cssContainingText(selector, text)));
100
- }
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);
130
- }
131
90
  navigateTo(destination) {
132
91
  return (0, promised_1.promised)(this.browser.get(destination));
133
92
  }
@@ -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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"}
@@ -52,7 +52,7 @@ class UseAngular {
52
52
  * @returns {@serenity-js/core/lib/screenplay~Interaction}
53
53
  */
54
54
  static disableSynchronisation() {
55
- return core_1.Interaction.where(`#actor disables synchronisation with Angular`, actor => abilities_1.BrowseTheWebWithProtractor.as(actor).enableAngularSynchronisation(false).then(() => void 0));
55
+ return core_1.Interaction.where(`#actor disables synchronisation with Angular`, actor => actor.abilityTo(abilities_1.BrowseTheWebWithProtractor).enableAngularSynchronisation(false).then(() => void 0));
56
56
  }
57
57
  /**
58
58
  * @desc
@@ -62,7 +62,7 @@ class UseAngular {
62
62
  * @returns {@serenity-js/core/lib/screenplay~Interaction}
63
63
  */
64
64
  static enableSynchronisation() {
65
- return core_1.Interaction.where(`#actor enables synchronisation with Angular`, actor => abilities_1.BrowseTheWebWithProtractor.as(actor).enableAngularSynchronisation(true).then(() => void 0));
65
+ return core_1.Interaction.where(`#actor enables synchronisation with Angular`, actor => actor.abilityTo(abilities_1.BrowseTheWebWithProtractor).enableAngularSynchronisation(true).then(() => void 0));
66
66
  }
67
67
  }
68
68
  exports.UseAngular = UseAngular;
@@ -1 +1 @@
1
- {"version":3,"file":"UseAngular.js","sourceRoot":"","sources":["../../../src/screenplay/interactions/UseAngular.ts"],"names":[],"mappings":";;;AAAA,4CAAgD;AAEhD,4CAA0D;AAE1D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,MAAa,UAAU;IAEnB;;;;;;OAMG;IACH,MAAM,CAAC,sBAAsB;QACzB,OAAO,kBAAW,CAAC,KAAK,CAAC,8CAA8C,EAAE,KAAK,CAAC,EAAE,CAC7E,sCAA0B,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACrG,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,qBAAqB;QACxB,OAAO,kBAAW,CAAC,KAAK,CAAC,6CAA6C,EAAE,KAAK,CAAC,EAAE,CAC5E,sCAA0B,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,4BAA4B,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACpG,CAAC;CACJ;AAzBD,gCAyBC"}
1
+ {"version":3,"file":"UseAngular.js","sourceRoot":"","sources":["../../../src/screenplay/interactions/UseAngular.ts"],"names":[],"mappings":";;;AAAA,4CAAgD;AAEhD,4CAA0D;AAE1D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,MAAa,UAAU;IAEnB;;;;;;OAMG;IACH,MAAM,CAAC,sBAAsB;QACzB,OAAO,kBAAW,CAAC,KAAK,CAAC,8CAA8C,EAAE,KAAK,CAAC,EAAE,CAC5E,KAAK,CAAC,SAAS,CAAC,sCAA0B,CAAgC,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5I,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,qBAAqB;QACxB,OAAO,kBAAW,CAAC,KAAK,CAAC,6CAA6C,EAAE,KAAK,CAAC,EAAE,CAC3E,KAAK,CAAC,SAAS,CAAC,sCAA0B,CAAgC,CAAC,4BAA4B,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3I,CAAC;CACJ;AAzBD,gCAyBC"}
@@ -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,9 @@ 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");
8
7
  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
8
  of(parent) {
15
- return new ProtractorPageElement(() => parent.nativeElement(), this.locator);
9
+ return new ProtractorPageElement(this.locator.of(parent.locator));
16
10
  }
17
11
  async clearValue() {
18
12
  function removeCharactersFrom(elf, numberOfCharacters) {
@@ -91,10 +85,6 @@ class ProtractorPageElement extends web_1.PageElement {
91
85
  async isClickable() {
92
86
  return this.isEnabled();
93
87
  }
94
- async isDisplayed() {
95
- const element = await this.nativeElement();
96
- return element.isDisplayed();
97
- }
98
88
  async isEnabled() {
99
89
  const element = await this.nativeElement();
100
90
  return element.isEnabled();
@@ -107,6 +97,33 @@ class ProtractorPageElement extends web_1.PageElement {
107
97
  const element = await this.nativeElement();
108
98
  return element.isSelected();
109
99
  }
100
+ async isVisible() {
101
+ const element = await this.nativeElement();
102
+ if (!await element.isDisplayed()) {
103
+ return false;
104
+ }
105
+ const webElement = await element.getWebElement();
106
+ // get element at cx/cy and see if the element we found is our element, and therefore it's visible.
107
+ return (0, promised_1.promised)(webElement.getDriver().executeScript(`
108
+ var elem = arguments[0];
109
+
110
+ if (! elem.getBoundingClientRect) {
111
+ return false;
112
+ }
113
+
114
+ var
115
+ box = elem.getBoundingClientRect(),
116
+ cx = box.left + box.width / 2,
117
+ cy = box.top + box.height / 2,
118
+ e = document.elementFromPoint(cx, cy);
119
+
120
+ for (; e; e = e.parentElement) {
121
+ if (e === elem)
122
+ return true;
123
+ }
124
+ return false;
125
+ `, webElement));
126
+ }
110
127
  }
111
128
  exports.ProtractorPageElement = ProtractorPageElement;
112
129
  //# 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":"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"}
@@ -1,6 +1,4 @@
1
1
  export * from './ProtractorCookie';
2
2
  export * from './ProtractorModalDialog';
3
- export * from './ProtractorNativeElementRoot';
4
3
  export * from './ProtractorPage';
5
4
  export * from './ProtractorPageElement';
6
- export * from './ProtractorPageElements';
@@ -12,8 +12,6 @@ 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("./ProtractorNativeElementRoot"), exports);
16
15
  __exportStar(require("./ProtractorPage"), exports);
17
16
  __exportStar(require("./ProtractorPageElement"), exports);
18
- __exportStar(require("./ProtractorPageElements"), exports);
19
17
  //# 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,mDAAiC;AACjC,0DAAwC"}
@@ -0,0 +1,9 @@
1
+ import { Locator, PageElement, Selector } from '@serenity-js/web';
2
+ import { ElementFinder, Locator as ProtractorNativeLocator, ProtractorBrowser } from 'protractor';
3
+ import { ProtractorNativeElementRoot } from './ProtractorNativeElementRoot';
4
+ export declare class ProtractorLocator<Selector_Type extends Selector> extends Locator<ElementFinder, ProtractorNativeElementRoot, Selector_Type> {
5
+ static createRootLocator<ST extends Selector>(browser: ProtractorBrowser, selector: ST, protractorBy: ProtractorNativeLocator): ProtractorLocator<ST>;
6
+ of(parent: ProtractorLocator<unknown>): Locator<ElementFinder, ProtractorNativeElementRoot, Selector_Type>;
7
+ element(): PageElement<ElementFinder>;
8
+ allElements(): Promise<Array<PageElement<ElementFinder>>>;
9
+ }
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ProtractorLocator = void 0;
4
+ const web_1 = require("@serenity-js/web");
5
+ const unpromisedWebElement_1 = require("../../unpromisedWebElement");
6
+ const ProtractorPageElement_1 = require("../ProtractorPageElement");
7
+ class ProtractorLocator extends web_1.Locator {
8
+ static createRootLocator(browser, selector, protractorBy) {
9
+ const parentRoot = {
10
+ element: browser.element.bind(browser),
11
+ all: browser.element.all.bind(browser),
12
+ };
13
+ return new ProtractorLocator(() => parentRoot, selector, (root) => (0, unpromisedWebElement_1.unpromisedWebElement)(root.element(protractorBy)), async (root) => root.all(protractorBy));
14
+ }
15
+ of(parent) {
16
+ return new ProtractorLocator(() => parent.nativeElement(), this.selector, (parentRoot) => this.locateElement(parentRoot), (parentRoot) => this.locateAllElements(parentRoot));
17
+ }
18
+ element() {
19
+ return new ProtractorPageElement_1.ProtractorPageElement(this);
20
+ }
21
+ async allElements() {
22
+ const parentRoot = await this.parentRoot();
23
+ const elements = await this.locateAllElements(parentRoot);
24
+ return Promise.all(elements.map(childElement => new ProtractorPageElement_1.ProtractorPageElement(new ProtractorLocator(this.parentRoot, this.selector, () => (0, unpromisedWebElement_1.unpromisedWebElement)(childElement), () => [(0, unpromisedWebElement_1.unpromisedWebElement)(childElement)]))));
25
+ }
26
+ }
27
+ exports.ProtractorLocator = ProtractorLocator;
28
+ //# sourceMappingURL=ProtractorLocator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProtractorLocator.js","sourceRoot":"","sources":["../../../../src/screenplay/models/locators/ProtractorLocator.ts"],"names":[],"mappings":";;;AAAA,0CAAkE;AAGlE,qEAAkE;AAClE,oEAAiE;AAGjE,MAAa,iBAAkD,SAAQ,aAAkE;IAErI,MAAM,CAAC,iBAAiB,CAAsB,OAA0B,EAAE,QAAY,EAAE,YAAqC;QACzH,MAAM,UAAU,GAAgC;YAC5C,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;YACtC,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;SACzC,CAAA;QAED,OAAO,IAAI,iBAAiB,CACxB,GAAG,EAAE,CAAC,UAAU,EAChB,QAAQ,EACR,CAAC,IAAiC,EAAE,EAAE,CAAC,IAAA,2CAAoB,EAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,EACvF,KAAK,EAAE,IAAiC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CACtE,CAAC;IACN,CAAC;IAED,EAAE,CAAC,MAAkC;QACjC,OAAO,IAAI,iBAAiB,CACxB,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,EAAE,EAC5B,IAAI,CAAC,QAAQ,EACb,CAAC,UAAuC,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,EAC3E,CAAC,UAAuC,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAClF,CAAC;IACN,CAAC;IAED,OAAO;QACH,OAAO,IAAI,6CAAqB,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,WAAW;QACb,MAAM,UAAU,GAAM,MAAM,IAAI,CAAC,UAAU,EAAE,CAAA;QAC7C,MAAM,QAAQ,GAAQ,MAAM,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;QAE/D,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAC3C,IAAI,6CAAqB,CAAC,IAAI,iBAAiB,CAC3C,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,QAAQ,EACb,GAAG,EAAE,CAAC,IAAA,2CAAoB,EAAC,YAAY,CAAC,EACxC,GAAG,EAAE,CAAC,CAAE,IAAA,2CAAoB,EAAC,YAAY,CAAC,CAAE,CAC/C,CAAC,CACL,CAAC,CAAC;IACP,CAAC;CACJ;AA1CD,8CA0CC"}
@@ -1,5 +1,5 @@
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(selector: Locator): ElementFinder;
4
+ all(selector: Locator): ElementArrayFinder;
5
5
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProtractorNativeElementRoot.js","sourceRoot":"","sources":["../../../../src/screenplay/models/locators/ProtractorNativeElementRoot.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export * from './ProtractorLocator';
2
+ export * from './ProtractorNativeElementRoot';
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ __exportStar(require("./ProtractorLocator"), exports);
14
+ __exportStar(require("./ProtractorNativeElementRoot"), exports);
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/screenplay/models/locators/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,sDAAoC;AACpC,gEAA8C"}
@@ -64,7 +64,7 @@ class ProtractorParam {
64
64
  static called(name) {
65
65
  return core_1.Question.about((0, io_1.formatted) `the ${name} param specified in Protractor config`, actor => {
66
66
  return actor.answer(name)
67
- .then(name => abilities_1.BrowseTheWebWithProtractor.as(actor).param(name));
67
+ .then(name => actor.abilityTo(abilities_1.BrowseTheWebWithProtractor).param(name));
68
68
  });
69
69
  }
70
70
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ProtractorParam.js","sourceRoot":"","sources":["../../../src/screenplay/questions/ProtractorParam.ts"],"names":[],"mappings":";;;AAAA,kDAAkD;AAClD,4CAAkE;AAClE,iDAAqD;AAErD,4CAA0D;AAE1D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,MAAa,eAAe;IAExB;;;;;;;OAOG;IACH,MAAM,CAAC,MAAM,CAAI,IAAwB;QACrC,OAAO,eAAQ,CAAC,KAAK,CAAa,IAAA,cAAS,EAAC,OAAQ,IAAK,uCAAuC,EAAE,KAAK,CAAC,EAAE;YACtG,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;iBACpB,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,sCAA0B,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC;IACP,CAAC;CACJ;AAhBD,0CAgBC"}
1
+ {"version":3,"file":"ProtractorParam.js","sourceRoot":"","sources":["../../../src/screenplay/questions/ProtractorParam.ts"],"names":[],"mappings":";;;AAAA,kDAAkD;AAClD,4CAAkE;AAClE,iDAAqD;AAErD,4CAA0D;AAE1D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,MAAa,eAAe;IAExB;;;;;;;OAOG;IACH,MAAM,CAAC,MAAM,CAAI,IAAwB;QACrC,OAAO,eAAQ,CAAC,KAAK,CAAa,IAAA,cAAS,EAAC,OAAQ,IAAK,uCAAuC,EAAE,KAAK,CAAC,EAAE;YACtG,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;iBACpB,IAAI,CAAC,IAAI,CAAC,EAAE,CAAE,KAAK,CAAC,SAAS,CAAC,sCAA0B,CAAgC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/G,CAAC,CAAC,CAAC;IACP,CAAC;CACJ;AAhBD,0CAgBC"}
@@ -8,4 +8,4 @@ import { WebElement } from 'protractor';
8
8
  * @param promiseLike
9
9
  * @returns {Promise<T>}
10
10
  */
11
- export declare function promisedWebElement<T extends WebElement>(promiseLike: PromiseLike<T> | T): Promise<T>;
11
+ export declare function unpromisedWebElement<T extends WebElement>(promiseLike: T): T;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.promisedWebElement = void 0;
3
+ exports.unpromisedWebElement = void 0;
4
4
  /**
5
5
  * @desc
6
6
  * Wraps Webdriver then-ables into a Node-native promise to allow for correct promise chaining.
@@ -10,18 +10,15 @@ exports.promisedWebElement = void 0;
10
10
  * @param promiseLike
11
11
  * @returns {Promise<T>}
12
12
  */
13
- function promisedWebElement(promiseLike) {
14
- if (promiseLike instanceof Promise) {
15
- return promiseLike;
16
- }
17
- return Promise.resolve(new Proxy(promiseLike, {
13
+ function unpromisedWebElement(promiseLike) {
14
+ return new Proxy(promiseLike, {
18
15
  has: (target, property) => property !== 'then',
19
16
  ownKeys: (target) => Reflect.ownKeys(target)
20
17
  .filter(property => property !== 'then'),
21
18
  get: (target, property, receiver) => (property in receiver)
22
19
  ? target[property]
23
20
  : undefined,
24
- }));
21
+ });
25
22
  }
26
- exports.promisedWebElement = promisedWebElement;
27
- //# sourceMappingURL=promisedWebElement.js.map
23
+ exports.unpromisedWebElement = unpromisedWebElement;
24
+ //# sourceMappingURL=unpromisedWebElement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unpromisedWebElement.js","sourceRoot":"","sources":["../../src/screenplay/unpromisedWebElement.ts"],"names":[],"mappings":";;;AAEA;;;;;;;;GAQG;AACH,SAAgB,oBAAoB,CAAuB,WAAc;IAErE,OAAO,IAAI,KAAK,CAAC,WAAW,EAAE;QAC1B,GAAG,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CACtB,QAAQ,KAAK,MAAM;QACvB,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE,CAChB,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;aAClB,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,KAAK,MAAM,CAAC;QAChD,GAAG,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,CAChC,CAAC,QAAQ,IAAI,QAAQ,CAAC;YAClB,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;YAClB,CAAC,CAAC,SAAS;KACtB,CAAC,CAAC;AACP,CAAC;AAbD,oDAaC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@serenity-js/protractor",
3
- "version": "3.0.0-rc.1",
3
+ "version": "3.0.0-rc.5",
4
4
  "description": "Test your web apps with Serenity/JS",
5
5
  "author": {
6
6
  "name": "Jan Molak",
@@ -50,16 +50,16 @@
50
50
  "npm": "^6 || ^7 || ^8"
51
51
  },
52
52
  "dependencies": {
53
- "@serenity-js/assertions": "3.0.0-rc.1",
54
- "@serenity-js/core": "3.0.0-rc.1",
53
+ "@serenity-js/assertions": "3.0.0-rc.5",
54
+ "@serenity-js/core": "3.0.0-rc.5",
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
- "@serenity-js/cucumber": "^3.0.0-rc.0",
61
- "@serenity-js/jasmine": "^3.0.0-rc.0",
62
- "@serenity-js/mocha": "^3.0.0-rc.0",
60
+ "@serenity-js/cucumber": "^3.0.0-rc",
61
+ "@serenity-js/jasmine": "^3.0.0-rc",
62
+ "@serenity-js/mocha": "^3.0.0-rc",
63
63
  "protractor": "^5.0.0 || ^7.0.0",
64
64
  "selenium-webdriver": "^3.6.0"
65
65
  },
@@ -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.1",
81
- "@serenity-js/jasmine": "3.0.0-rc.1",
82
- "@serenity-js/local-server": "3.0.0-rc.1",
83
- "@serenity-js/mocha": "3.0.0-rc.1",
84
- "@serenity-js/rest": "3.0.0-rc.1",
85
- "@serenity-js/web": "3.0.0-rc.1",
80
+ "@serenity-js/cucumber": "3.0.0-rc.5",
81
+ "@serenity-js/jasmine": "3.0.0-rc.5",
82
+ "@serenity-js/local-server": "3.0.0-rc.5",
83
+ "@serenity-js/mocha": "3.0.0-rc.5",
84
+ "@serenity-js/rest": "3.0.0-rc.5",
85
+ "@serenity-js/web": "3.0.0-rc.5",
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": "ceed4ad3a2375c14b0546a6fc2fe3e816250f746"
125
+ "gitHead": "b63bb1465731d922fde0ade3b77ddebb96dbf990"
126
126
  }
@@ -1,9 +1,10 @@
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';
1
+ import { ConfigurationError, Duration, LogicError } from '@serenity-js/core';
2
+ import { BrowserCapabilities, BrowseTheWeb, ByCss, ByCssContainingText, ById, ByTagName, ByXPath, Cookie, CookieData, Key, ModalDialog, Page, PageElement } from '@serenity-js/web';
3
+ import { by, ElementFinder, ProtractorBrowser, WebElementPromise } from 'protractor';
4
4
  import { Capabilities } from 'selenium-webdriver';
5
5
 
6
- import { ProtractorCookie, ProtractorModalDialog, ProtractorNativeElementRoot, ProtractorPage, ProtractorPageElement, ProtractorPageElements } from '../models';
6
+ import { ProtractorCookie, ProtractorModalDialog, ProtractorPage, ProtractorPageElement } from '../models';
7
+ import { ProtractorLocator, ProtractorNativeElementRoot } from '../models/locators';
7
8
  import { promised } from '../promised';
8
9
 
9
10
  /**
@@ -35,7 +36,7 @@ import { promised } from '../promised';
35
36
  * @implements {@serenity-js/core/lib/screenplay~Ability}
36
37
  * @see {@link @serenity-js/core/lib/screenplay/actor~Actor}
37
38
  */
38
- export class BrowseTheWebWithProtractor extends BrowseTheWeb {
39
+ export class BrowseTheWebWithProtractor extends BrowseTheWeb<ElementFinder, ProtractorNativeElementRoot> {
39
40
 
40
41
  /**
41
42
  * @desc
@@ -48,18 +49,6 @@ export class BrowseTheWebWithProtractor extends BrowseTheWeb {
48
49
  return new BrowseTheWebWithProtractor(browser);
49
50
  }
50
51
 
51
- /**
52
- * @desc
53
- * Used to access the Actor's ability to {@link BrowseTheWebWithProtractor} from within the {@link Interaction} classes,
54
- * such as {@link Navigate}.
55
- *
56
- * @param {UsesAbilities} actor
57
- * @return {BrowseTheWebWithProtractor}
58
- */
59
- static as(actor: UsesAbilities): BrowseTheWebWithProtractor {
60
- return actor.abilityTo(BrowseTheWebWithProtractor);
61
- }
62
-
63
52
  /**
64
53
  * @private
65
54
  */
@@ -70,7 +59,13 @@ export class BrowseTheWebWithProtractor extends BrowseTheWeb {
70
59
  * An instance of a protractor browser
71
60
  */
72
61
  constructor(protected browser: ProtractorBrowser) {
73
- super();
62
+ super(new Map()
63
+ .set(ByCss, (selector: ByCss) => ProtractorLocator.createRootLocator(this.browser, selector, by.css(selector.value)))
64
+ .set(ByCssContainingText, (selector: ByCssContainingText) => ProtractorLocator.createRootLocator(this.browser, selector, by.cssContainingText(selector.value, selector.text)))
65
+ .set(ById, (selector: ById) => ProtractorLocator.createRootLocator(this.browser, selector, by.id(selector.value)))
66
+ .set(ByTagName, (selector: ByTagName) => ProtractorLocator.createRootLocator(this.browser, selector, by.tagName(selector.value)))
67
+ .set(ByXPath, (selector: ByXPath) => ProtractorLocator.createRootLocator(this.browser, selector, by.xpath(selector.value)))
68
+ );
74
69
  }
75
70
 
76
71
  async browserCapabilities(): Promise<BrowserCapabilities> {
@@ -105,58 +100,6 @@ export class BrowseTheWebWithProtractor extends BrowseTheWeb {
105
100
  return promised(this.browser.manage().deleteAllCookies());
106
101
  }
107
102
 
108
- findByCss(selector: string): PageElement<any, any> {
109
- return this.find(root => root.element(by.css(selector)));
110
- }
111
-
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
- }
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,
147
- );
148
- }
149
-
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
- );
158
- }
159
-
160
103
  navigateTo(destination: string): Promise<void> {
161
104
  return promised(this.browser.get(destination));
162
105
  }
@@ -53,7 +53,7 @@ export class UseAngular {
53
53
  */
54
54
  static disableSynchronisation(): Interaction {
55
55
  return Interaction.where(`#actor disables synchronisation with Angular`, actor =>
56
- BrowseTheWebWithProtractor.as(actor).enableAngularSynchronisation(false).then(() => void 0));
56
+ (actor.abilityTo(BrowseTheWebWithProtractor) as BrowseTheWebWithProtractor).enableAngularSynchronisation(false).then(() => void 0));
57
57
  }
58
58
 
59
59
  /**
@@ -65,6 +65,6 @@ export class UseAngular {
65
65
  */
66
66
  static enableSynchronisation(): Interaction {
67
67
  return Interaction.where(`#actor enables synchronisation with Angular`, actor =>
68
- BrowseTheWebWithProtractor.as(actor).enableAngularSynchronisation(true).then(() => void 0));
68
+ (actor.abilityTo(BrowseTheWebWithProtractor) as BrowseTheWebWithProtractor).enableAngularSynchronisation(true).then(() => void 0));
69
69
  }
70
70
  }
@@ -3,23 +3,12 @@ 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';
8
6
 
9
7
  export class ProtractorPageElement
10
- extends PageElement<ProtractorNativeElementRoot, ElementFinder>
8
+ extends PageElement<ElementFinder>
11
9
  {
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);
10
+ of(parent: ProtractorPageElement): PageElement<ElementFinder> {
11
+ return new ProtractorPageElement(this.locator.of(parent.locator));
23
12
  }
24
13
 
25
14
  async clearValue(): Promise<void> {
@@ -141,12 +130,6 @@ export class ProtractorPageElement
141
130
  return this.isEnabled();
142
131
  }
143
132
 
144
- async isDisplayed(): Promise<boolean> {
145
- const element: ElementFinder = await this.nativeElement();
146
-
147
- return element.isDisplayed();
148
- }
149
-
150
133
  async isEnabled(): Promise<boolean> {
151
134
  const element: ElementFinder = await this.nativeElement();
152
135
 
@@ -164,4 +147,38 @@ export class ProtractorPageElement
164
147
 
165
148
  return element.isSelected();
166
149
  }
150
+
151
+ async isVisible(): Promise<boolean> {
152
+ const element: ElementFinder = await this.nativeElement();
153
+
154
+ if (! await element.isDisplayed()) {
155
+ return false;
156
+ }
157
+
158
+ const webElement: WebElement = await element.getWebElement();
159
+
160
+ // get element at cx/cy and see if the element we found is our element, and therefore it's visible.
161
+ return promised(webElement.getDriver().executeScript(
162
+ `
163
+ var elem = arguments[0];
164
+
165
+ if (! elem.getBoundingClientRect) {
166
+ return false;
167
+ }
168
+
169
+ var
170
+ box = elem.getBoundingClientRect(),
171
+ cx = box.left + box.width / 2,
172
+ cy = box.top + box.height / 2,
173
+ e = document.elementFromPoint(cx, cy);
174
+
175
+ for (; e; e = e.parentElement) {
176
+ if (e === elem)
177
+ return true;
178
+ }
179
+ return false;
180
+ `,
181
+ webElement,
182
+ ));
183
+ }
167
184
  }
@@ -1,7 +1,5 @@
1
1
  export * from './ProtractorCookie';
2
2
  export * from './ProtractorModalDialog';
3
- export * from './ProtractorNativeElementRoot';
4
3
  export * from './ProtractorPage';
5
4
  export * from './ProtractorPageElement';
6
- export * from './ProtractorPageElements';
7
5
 
@@ -0,0 +1,50 @@
1
+ import { Locator, PageElement, Selector } from '@serenity-js/web';
2
+ import { ElementFinder, Locator as ProtractorNativeLocator, ProtractorBrowser } from 'protractor';
3
+
4
+ import { unpromisedWebElement } from '../../unpromisedWebElement';
5
+ import { ProtractorPageElement } from '../ProtractorPageElement';
6
+ import { ProtractorNativeElementRoot } from './ProtractorNativeElementRoot';
7
+
8
+ export class ProtractorLocator<Selector_Type extends Selector> extends Locator<ElementFinder, ProtractorNativeElementRoot, Selector_Type> {
9
+
10
+ static createRootLocator<ST extends Selector>(browser: ProtractorBrowser, selector: ST, protractorBy: ProtractorNativeLocator): ProtractorLocator<ST> {
11
+ const parentRoot: ProtractorNativeElementRoot = {
12
+ element: browser.element.bind(browser),
13
+ all: browser.element.all.bind(browser),
14
+ }
15
+
16
+ return new ProtractorLocator(
17
+ () => parentRoot,
18
+ selector,
19
+ (root: ProtractorNativeElementRoot) => unpromisedWebElement(root.element(protractorBy)),
20
+ async (root: ProtractorNativeElementRoot) => root.all(protractorBy)
21
+ );
22
+ }
23
+
24
+ of(parent: ProtractorLocator<unknown>): Locator<ElementFinder, ProtractorNativeElementRoot, Selector_Type> {
25
+ return new ProtractorLocator(
26
+ () => parent.nativeElement(),
27
+ this.selector,
28
+ (parentRoot: ProtractorNativeElementRoot) => this.locateElement(parentRoot),
29
+ (parentRoot: ProtractorNativeElementRoot) => this.locateAllElements(parentRoot),
30
+ );
31
+ }
32
+
33
+ element(): PageElement<ElementFinder> {
34
+ return new ProtractorPageElement(this);
35
+ }
36
+
37
+ async allElements(): Promise<Array<PageElement<ElementFinder>>> {
38
+ const parentRoot = await this.parentRoot()
39
+ const elements = await this.locateAllElements(parentRoot);
40
+
41
+ return Promise.all(elements.map(childElement =>
42
+ new ProtractorPageElement(new ProtractorLocator(
43
+ this.parentRoot,
44
+ this.selector,
45
+ () => unpromisedWebElement(childElement),
46
+ () => [ unpromisedWebElement(childElement) ],
47
+ ))
48
+ ));
49
+ }
50
+ }
@@ -1,6 +1,6 @@
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(selector: Locator): ElementFinder;
5
+ all(selector: Locator): ElementArrayFinder;
6
6
  }
@@ -0,0 +1,2 @@
1
+ export * from './ProtractorLocator';
2
+ export * from './ProtractorNativeElementRoot';
@@ -64,7 +64,7 @@ export class ProtractorParam
64
64
  static called<R>(name: Answerable<string>): Question<Promise<R>> & Adapter<R> {
65
65
  return Question.about<Promise<R>>(formatted `the ${ name } param specified in Protractor config`, actor => {
66
66
  return actor.answer(name)
67
- .then(name => BrowseTheWebWithProtractor.as(actor).param(name));
67
+ .then(name => (actor.abilityTo(BrowseTheWebWithProtractor) as BrowseTheWebWithProtractor).param(name));
68
68
  });
69
69
  }
70
70
  }
@@ -9,12 +9,9 @@ import { WebElement } from 'protractor';
9
9
  * @param promiseLike
10
10
  * @returns {Promise<T>}
11
11
  */
12
- export function promisedWebElement<T extends WebElement>(promiseLike: PromiseLike<T> | T): Promise<T> {
13
- if (promiseLike instanceof Promise) {
14
- return promiseLike;
15
- }
12
+ export function unpromisedWebElement<T extends WebElement>(promiseLike: T): T {
16
13
 
17
- return Promise.resolve(new Proxy(promiseLike, {
14
+ return new Proxy(promiseLike, {
18
15
  has: (target, property) =>
19
16
  property !== 'then',
20
17
  ownKeys: (target) =>
@@ -24,5 +21,5 @@ export function promisedWebElement<T extends WebElement>(promiseLike: PromiseLik
24
21
  (property in receiver)
25
22
  ? target[property]
26
23
  : undefined,
27
- }));
24
+ });
28
25
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"ProtractorNativeElementRoot.js","sourceRoot":"","sources":["../../../src/screenplay/models/ProtractorNativeElementRoot.ts"],"names":[],"mappings":""}
@@ -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 +0,0 @@
1
- {"version":3,"file":"promisedWebElement.js","sourceRoot":"","sources":["../../src/screenplay/promisedWebElement.ts"],"names":[],"mappings":";;;AAEA;;;;;;;;GAQG;AACH,SAAgB,kBAAkB,CAAuB,WAA+B;IACpF,IAAI,WAAW,YAAY,OAAO,EAAE;QAChC,OAAO,WAAW,CAAC;KACtB;IAED,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,WAAW,EAAE;QAC1C,GAAG,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CACtB,QAAQ,KAAK,MAAM;QACvB,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE,CAChB,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;aAClB,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,KAAK,MAAM,CAAC;QAChD,GAAG,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,CAChC,CAAC,QAAQ,IAAI,QAAQ,CAAC;YAClB,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;YAClB,CAAC,CAAC,SAAS;KACtB,CAAC,CAAC,CAAC;AACR,CAAC;AAhBD,gDAgBC"}
@@ -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
- }