@serenity-js/protractor 3.0.0-rc.13 → 3.0.0-rc.16

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 (41) hide show
  1. package/CHANGELOG.md +56 -183
  2. package/lib/adapter/ProtractorFrameworkAdapter.js +1 -1
  3. package/lib/adapter/ProtractorFrameworkAdapter.js.map +1 -1
  4. package/lib/adapter/browser-detector/StandardisedCapabilities.d.ts +4 -4
  5. package/lib/adapter/browser-detector/StandardisedCapabilities.js +14 -14
  6. package/lib/adapter/browser-detector/StandardisedCapabilities.js.map +1 -1
  7. package/lib/adapter/browser-detector/index.js +5 -1
  8. package/lib/adapter/browser-detector/index.js.map +1 -1
  9. package/lib/adapter/index.js +5 -1
  10. package/lib/adapter/index.js.map +1 -1
  11. package/lib/adapter/reporter/ProtractorReporter.js +9 -4
  12. package/lib/adapter/reporter/ProtractorReporter.js.map +1 -1
  13. package/lib/adapter/reporter/index.js +5 -1
  14. package/lib/adapter/reporter/index.js.map +1 -1
  15. package/lib/adapter/runner/TestRunnerDetector.js +1 -1
  16. package/lib/adapter/runner/TestRunnerDetector.js.map +1 -1
  17. package/lib/adapter/runner/index.js +5 -1
  18. package/lib/adapter/runner/index.js.map +1 -1
  19. package/lib/index.js +5 -1
  20. package/lib/index.js.map +1 -1
  21. package/lib/screenplay/abilities/index.js +5 -1
  22. package/lib/screenplay/abilities/index.js.map +1 -1
  23. package/lib/screenplay/index.js +5 -1
  24. package/lib/screenplay/index.js.map +1 -1
  25. package/lib/screenplay/interactions/index.js +5 -1
  26. package/lib/screenplay/interactions/index.js.map +1 -1
  27. package/lib/screenplay/models/ProtractorPageElement.d.ts +14 -0
  28. package/lib/screenplay/models/ProtractorPageElement.js +28 -14
  29. package/lib/screenplay/models/ProtractorPageElement.js.map +1 -1
  30. package/lib/screenplay/models/index.js +5 -1
  31. package/lib/screenplay/models/index.js.map +1 -1
  32. package/lib/screenplay/models/locators/index.js +5 -1
  33. package/lib/screenplay/models/locators/index.js.map +1 -1
  34. package/lib/screenplay/questions/index.js +5 -1
  35. package/lib/screenplay/questions/index.js.map +1 -1
  36. package/package.json +17 -17
  37. package/src/adapter/ProtractorFrameworkAdapter.ts +1 -1
  38. package/src/adapter/browser-detector/StandardisedCapabilities.ts +24 -24
  39. package/src/adapter/reporter/ProtractorReporter.ts +13 -13
  40. package/src/adapter/runner/TestRunnerDetector.ts +1 -1
  41. package/src/screenplay/models/ProtractorPageElement.ts +30 -16
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/screenplay/abilities/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,+DAA6C"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/screenplay/abilities/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+DAA6C"}
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/screenplay/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,8CAA4B;AAC5B,iDAA+B;AAC/B,2CAAyB;AACzB,8CAA4B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/screenplay/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA4B;AAC5B,iDAA+B;AAC/B,2CAAyB;AACzB,8CAA4B"}
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/screenplay/interactions/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,+CAA6B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/screenplay/interactions/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA6B"}
@@ -1,5 +1,8 @@
1
1
  import { PageElement, SwitchableOrigin } from '@serenity-js/web';
2
2
  import { ElementFinder } from 'protractor';
3
+ /**
4
+ * @extends {@serenity-js/web/lib/screenplay/models~PageElement}
5
+ */
3
6
  export declare class ProtractorPageElement extends PageElement<ElementFinder> {
4
7
  of(parent: ProtractorPageElement): PageElement<ElementFinder>;
5
8
  clearValue(): Promise<void>;
@@ -18,5 +21,16 @@ export declare class ProtractorPageElement extends PageElement<ElementFinder> {
18
21
  isEnabled(): Promise<boolean>;
19
22
  isPresent(): Promise<boolean>;
20
23
  isSelected(): Promise<boolean>;
24
+ /**
25
+ * @desc
26
+ * Checks if the PageElement:
27
+ * - is not hidden, so doesn't have CSS style like `display: none`, `visibility: hidden` or `opacity: 0`
28
+ * - is within the browser viewport
29
+ * - doesn't have its centre covered by other elements
30
+ *
31
+ * @returns {Promise<boolean>}
32
+ *
33
+ * @see {@link @serenity-js/web/lib/screenplay/models~PageElement}
34
+ */
21
35
  isVisible(): Promise<boolean>;
22
36
  }
@@ -5,15 +5,18 @@ 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 promised_1 = require("../promised");
8
+ /**
9
+ * @extends {@serenity-js/web/lib/screenplay/models~PageElement}
10
+ */
8
11
  class ProtractorPageElement extends web_1.PageElement {
9
12
  of(parent) {
10
13
  return new ProtractorPageElement(this.locator.of(parent.locator));
11
14
  }
12
15
  async clearValue() {
13
- function removeCharactersFrom(elf, numberOfCharacters) {
14
- return numberOfCharacters === 0
15
- ? Promise.resolve(void 0)
16
- : elf.sendKeys(protractor_1.protractor.Key.END, ...times(numberOfCharacters, protractor_1.protractor.Key.BACK_SPACE));
16
+ async function removeCharactersFrom(elf, numberOfCharacters) {
17
+ if (numberOfCharacters > 0) {
18
+ await elf.sendKeys(protractor_1.protractor.Key.END, ...times(numberOfCharacters, protractor_1.protractor.Key.BACK_SPACE));
19
+ }
17
20
  }
18
21
  // eslint-disable-next-line unicorn/consistent-function-scoping
19
22
  function times(length, key) {
@@ -27,7 +30,7 @@ class ProtractorPageElement extends web_1.PageElement {
27
30
  }
28
31
  async click() {
29
32
  const element = await this.nativeElement();
30
- return element.click();
33
+ return (0, promised_1.promised)(element.click());
31
34
  }
32
35
  async doubleClick() {
33
36
  const element = await this.nativeElement();
@@ -39,7 +42,7 @@ class ProtractorPageElement extends web_1.PageElement {
39
42
  }
40
43
  async enterValue(value) {
41
44
  const element = await this.nativeElement();
42
- return element.sendKeys([].concat(value).join(''));
45
+ return (0, promised_1.promised)(element.sendKeys([].concat(value).join('')));
43
46
  }
44
47
  async scrollIntoView() {
45
48
  const element = await this.nativeElement();
@@ -63,11 +66,11 @@ class ProtractorPageElement extends web_1.PageElement {
63
66
  }
64
67
  async attribute(name) {
65
68
  const element = await this.nativeElement();
66
- return element.getAttribute(name);
69
+ return (0, promised_1.promised)(element.getAttribute(name));
67
70
  }
68
71
  async text() {
69
72
  const element = await this.nativeElement();
70
- return element.getText();
73
+ return (0, promised_1.promised)(element.getText());
71
74
  }
72
75
  async value() {
73
76
  const element = await this.nativeElement();
@@ -90,7 +93,7 @@ class ProtractorPageElement extends web_1.PageElement {
90
93
  await browser.switchTo().frame(webElement);
91
94
  return {
92
95
  switchBack: async () => {
93
- await browser.driver.switchToParentFrame();
96
+ await (0, promised_1.promised)(browser.driver.switchToParentFrame());
94
97
  },
95
98
  };
96
99
  }
@@ -100,7 +103,7 @@ class ProtractorPageElement extends web_1.PageElement {
100
103
  await webElement.getDriver().executeScript(`arguments[0].focus()`, webElement);
101
104
  return {
102
105
  switchBack: async () => {
103
- await webElement.getDriver().executeScript(`arguments[0].focus()`, previouslyFocusedElement);
106
+ await (0, promised_1.promised)(webElement.getDriver().executeScript(`arguments[0].focus()`, previouslyFocusedElement));
104
107
  },
105
108
  };
106
109
  }
@@ -112,23 +115,34 @@ class ProtractorPageElement extends web_1.PageElement {
112
115
  async isActive() {
113
116
  const element = await this.nativeElement();
114
117
  const webElement = await element.getWebElement();
115
- return webElement.getDriver().switchTo().activeElement().then((active) => element.equals(active));
118
+ return (0, promised_1.promised)(webElement.getDriver().switchTo().activeElement().then((active) => element.equals(active)));
116
119
  }
117
120
  async isClickable() {
118
121
  return this.isEnabled();
119
122
  }
120
123
  async isEnabled() {
121
124
  const element = await this.nativeElement();
122
- return element.isEnabled();
125
+ return (0, promised_1.promised)(element.isEnabled());
123
126
  }
124
127
  async isPresent() {
125
128
  const element = await this.nativeElement();
126
- return element.isPresent();
129
+ return (0, promised_1.promised)(element.isPresent());
127
130
  }
128
131
  async isSelected() {
129
132
  const element = await this.nativeElement();
130
- return element.isSelected();
133
+ return (0, promised_1.promised)(element.isSelected());
131
134
  }
135
+ /**
136
+ * @desc
137
+ * Checks if the PageElement:
138
+ * - is not hidden, so doesn't have CSS style like `display: none`, `visibility: hidden` or `opacity: 0`
139
+ * - is within the browser viewport
140
+ * - doesn't have its centre covered by other elements
141
+ *
142
+ * @returns {Promise<boolean>}
143
+ *
144
+ * @see {@link @serenity-js/web/lib/screenplay/models~PageElement}
145
+ */
132
146
  async isVisible() {
133
147
  const element = await this.nativeElement();
134
148
  if (!await element.isDisplayed()) {
@@ -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,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/screenplay/models/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qDAAmC;AACnC,0DAAwC;AACxC,mDAAiC;AACjC,0DAAwC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/screenplay/models/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qDAAmC;AACnC,0DAAwC;AACxC,mDAAiC;AACjC,0DAAwC"}
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/screenplay/models/locators/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,sDAAoC;AACpC,gEAA8C"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/screenplay/models/locators/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,sDAAoC;AACpC,gEAA8C"}
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/screenplay/questions/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oDAAkC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/screenplay/questions/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oDAAkC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@serenity-js/protractor",
3
- "version": "3.0.0-rc.13",
3
+ "version": "3.0.0-rc.16",
4
4
  "description": "Test your web apps with Serenity/JS",
5
5
  "author": {
6
6
  "name": "Jan Molak",
@@ -51,19 +51,19 @@
51
51
  "npm": "^6 || ^7 || ^8"
52
52
  },
53
53
  "dependencies": {
54
- "@serenity-js/assertions": "3.0.0-rc.13",
55
- "@serenity-js/core": "3.0.0-rc.13",
54
+ "@serenity-js/assertions": "3.0.0-rc.16",
55
+ "@serenity-js/core": "3.0.0-rc.16",
56
56
  "deepmerge": "^4.2.2",
57
57
  "is-plain-object": "^5.0.0",
58
58
  "query-selector-shadow-dom": "^1.0.0",
59
+ "selenium-webdriver": "^3.6.0",
59
60
  "tiny-types": "^1.17.0"
60
61
  },
61
62
  "peerDependencies": {
62
63
  "@serenity-js/cucumber": "^3.0.0-rc",
63
64
  "@serenity-js/jasmine": "^3.0.0-rc",
64
65
  "@serenity-js/mocha": "^3.0.0-rc",
65
- "protractor": "^5.0.0 || ^7.0.0",
66
- "selenium-webdriver": "^3.6.0"
66
+ "protractor": "^5.0.0 || ^7.0.0"
67
67
  },
68
68
  "peerDependenciesMeta": {
69
69
  "@serenity-js/cucumber": {
@@ -79,28 +79,28 @@
79
79
  "devDependencies": {
80
80
  "@documentation/esdoc-template": "3.0.0",
81
81
  "@integration/testing-tools": "3.0.0",
82
- "@serenity-js/cucumber": "3.0.0-rc.13",
83
- "@serenity-js/jasmine": "3.0.0-rc.13",
84
- "@serenity-js/local-server": "3.0.0-rc.13",
85
- "@serenity-js/mocha": "3.0.0-rc.13",
86
- "@serenity-js/rest": "3.0.0-rc.13",
87
- "@serenity-js/web": "3.0.0-rc.13",
82
+ "@serenity-js/cucumber": "3.0.0-rc.16",
83
+ "@serenity-js/jasmine": "3.0.0-rc.16",
84
+ "@serenity-js/local-server": "3.0.0-rc.16",
85
+ "@serenity-js/mocha": "3.0.0-rc.16",
86
+ "@serenity-js/rest": "3.0.0-rc.16",
87
+ "@serenity-js/web": "3.0.0-rc.16",
88
88
  "@types/chai": "^4.3.0",
89
89
  "@types/express": "^4.17.13",
90
90
  "@types/html-minifier": "^4.0.2",
91
91
  "@types/mocha": "^9.1.0",
92
92
  "@types/selenium-webdriver": "^3.0.19",
93
93
  "axios": "^0.21.4",
94
- "body-parser": "^1.19.2",
94
+ "body-parser": "^1.20.0",
95
95
  "cross-env": "^7.0.3",
96
- "express": "^4.17.2",
96
+ "express": "^4.17.3",
97
97
  "html-minifier": "^4.0.0",
98
- "mocha": "^9.2.1",
98
+ "mocha": "^9.2.2",
99
99
  "protractor": "^7.0.0",
100
100
  "selenium-webdriver": "^3.6.0",
101
101
  "start-server-and-test": "^1.14.0",
102
- "ts-node": "^10.5.0",
103
- "typescript": "^4.5.5"
102
+ "ts-node": "^10.7.0",
103
+ "typescript": "^4.6.3"
104
104
  },
105
- "gitHead": "9fb7df72c7f33cb10504843db890f7855b8c355a"
105
+ "gitHead": "636519a30032f1ff9a3fcba8c45433ca0e17fc7f"
106
106
  }
@@ -53,7 +53,7 @@ export class ProtractorFrameworkAdapter {
53
53
  .then(() => this.protractorRunner.runTestPreparer(TestRunnerDetector.protractorCliOptions()))
54
54
  .then(() => runner.load(specs))
55
55
  .then(() => runner.run())
56
- .then(() => Promise.resolve((config.onComplete || noop)()))
56
+ .then(() => (config.onComplete || noop)())
57
57
  .then(() => reporter.report());
58
58
  }
59
59
 
@@ -11,34 +11,33 @@ export class StandardisedCapabilities {
11
11
  constructor(private currentBrowser: () => ProtractorBrowser) {
12
12
  }
13
13
 
14
- browserName(): PromiseLike<string> {
14
+ browserName(): Promise<string | undefined> {
15
15
  return this.get(
16
16
  caps => caps.get('browserName'),
17
17
  );
18
18
  }
19
19
 
20
- browserVersion(): PromiseLike<string> {
21
- return this.get(
20
+ async browserVersion(): Promise<string | undefined> {
21
+ const version = await this.get(
22
22
  caps => caps.get('version'),
23
23
  caps => caps.get('browserVersion'),
24
24
  caps => caps.has('deviceManufacturer') && caps.has('deviceModel')
25
25
  ? `${ caps.get('deviceManufacturer') } ${ caps.get('deviceModel') }`
26
26
  : undefined,
27
27
  caps => caps.has('mobile') && caps.get('mobile').version,
28
- ).
29
- then(version =>
30
- this.get(
31
- caps => !! caps.get('mobileEmulationEnabled') && '(mobile emulation)',
32
- ).then(suffix =>
33
- [
34
- version,
35
- suffix,
36
- ].filter(_ => !!_).join(' '),
37
- ),
38
28
  );
29
+
30
+ const suffix = await this.get(
31
+ caps => !! caps.get('mobileEmulationEnabled') && '(mobile emulation)',
32
+ );
33
+
34
+ return [
35
+ version,
36
+ suffix,
37
+ ].filter(_ => !!_).join(' ');
39
38
  }
40
39
 
41
- platformName(): PromiseLike<string> {
40
+ platformName(): Promise<string | undefined> {
42
41
  return this.get(
43
42
  caps => (!! caps.get('platformName') && ! /any/i.test(caps.get('platformName')))
44
43
  ? caps.get('platformName')
@@ -46,21 +45,22 @@ export class StandardisedCapabilities {
46
45
  );
47
46
  }
48
47
 
49
- platformVersion(): PromiseLike<string> {
48
+ platformVersion(): Promise<string | undefined> {
50
49
  return this.get(
51
50
  caps => caps.get('platformVersion'),
52
51
  );
53
52
  }
54
53
 
55
- private get(...fetchers: Array<(capabilities: Capabilities) => string>): PromiseLike<string> {
56
- return this.currentBrowser().getCapabilities().then(caps => {
57
- for (const fetcher of fetchers) {
58
- const result = fetcher(caps);
59
- if (result) {
60
- return result;
61
- }
54
+ private async get(...fetchers: Array<(capabilities: Capabilities) => string>): Promise<string | undefined> {
55
+ const capabilities = await this.currentBrowser().getCapabilities();
56
+
57
+ for (const fetcher of fetchers) {
58
+ const result = fetcher(capabilities);
59
+ if (result) {
60
+ return result;
62
61
  }
63
- return undefined; // eslint-disable-line unicorn/no-useless-undefined
64
- });
62
+ }
63
+
64
+ return undefined; // eslint-disable-line unicorn/no-useless-undefined
65
65
  }
66
66
  }
@@ -85,9 +85,9 @@ export class ProtractorReporter implements StageCrewMember {
85
85
  });
86
86
  }
87
87
 
88
- private afterEach(): PromiseLike<void> {
88
+ private async afterEach(): Promise<void> {
89
89
  if (! this.runner.afterEach) {
90
- return Promise.resolve();
90
+ return;
91
91
  }
92
92
 
93
93
  const id = CorrelationId.create();
@@ -98,16 +98,16 @@ export class ProtractorReporter implements StageCrewMember {
98
98
  this.stage.currentTime(),
99
99
  ));
100
100
 
101
- return Promise.resolve(this.runner.afterEach() as PromiseLike<void> | undefined)
102
- .then(
103
- () =>
104
- this.stage.announce(new AsyncOperationCompleted(
105
- new Description(`[${ this.constructor.name }] ProtractorRunner.afterEach succeeded`),
106
- id,
107
- this.stage.currentTime(),
108
- )),
109
- error =>
110
- this.stage.announce(new AsyncOperationFailed(error, id, this.stage.currentTime())),
111
- );
101
+ try {
102
+ await this.runner.afterEach();
103
+
104
+ this.stage.announce(new AsyncOperationCompleted(
105
+ new Description(`[${ this.constructor.name }] ProtractorRunner.afterEach succeeded`),
106
+ id,
107
+ this.stage.currentTime(),
108
+ ));
109
+ } catch (error) {
110
+ this.stage.announce(new AsyncOperationFailed(error, id, this.stage.currentTime()));
111
+ }
112
112
  }
113
113
  }
@@ -53,7 +53,7 @@ export class TestRunnerDetector {
53
53
  return this.useCucumber(config);
54
54
  case !! config.mochaOpts:
55
55
  return this.useMocha(config);
56
- case !! config.jasmineNodeOpts:
56
+ case !! config.jasmineNodeOpts: // eslint-disable-line unicorn/no-useless-switch-case
57
57
  default:
58
58
  return this.useJasmine(config);
59
59
  }
@@ -5,6 +5,9 @@ import { WebElement } from 'selenium-webdriver';
5
5
 
6
6
  import { promised } from '../promised';
7
7
 
8
+ /**
9
+ * @extends {@serenity-js/web/lib/screenplay/models~PageElement}
10
+ */
8
11
  export class ProtractorPageElement extends PageElement<ElementFinder> {
9
12
 
10
13
  of(parent: ProtractorPageElement): PageElement<ElementFinder> {
@@ -12,13 +15,13 @@ export class ProtractorPageElement extends PageElement<ElementFinder> {
12
15
  }
13
16
 
14
17
  async clearValue(): Promise<void> {
15
- function removeCharactersFrom(elf: ElementFinder, numberOfCharacters: number): PromiseLike<void> {
16
- return numberOfCharacters === 0
17
- ? Promise.resolve(void 0)
18
- : elf.sendKeys(
18
+ async function removeCharactersFrom(elf: ElementFinder, numberOfCharacters: number): Promise<void> {
19
+ if (numberOfCharacters > 0) {
20
+ await elf.sendKeys(
19
21
  protractor.Key.END,
20
22
  ...times(numberOfCharacters, protractor.Key.BACK_SPACE),
21
23
  );
24
+ }
22
25
  }
23
26
 
24
27
  // eslint-disable-next-line unicorn/consistent-function-scoping
@@ -37,7 +40,7 @@ export class ProtractorPageElement extends PageElement<ElementFinder> {
37
40
  async click(): Promise<void> {
38
41
  const element: ElementFinder = await this.nativeElement();
39
42
 
40
- return element.click();
43
+ return promised(element.click());
41
44
  }
42
45
 
43
46
  async doubleClick(): Promise<void> {
@@ -55,9 +58,9 @@ export class ProtractorPageElement extends PageElement<ElementFinder> {
55
58
  async enterValue(value: string | number | Array<string | number>): Promise<void> {
56
59
  const element: ElementFinder = await this.nativeElement();
57
60
 
58
- return element.sendKeys(
61
+ return promised(element.sendKeys(
59
62
  [].concat(value).join(''),
60
- );
63
+ ));
61
64
  }
62
65
 
63
66
  async scrollIntoView(): Promise<void> {
@@ -95,13 +98,13 @@ export class ProtractorPageElement extends PageElement<ElementFinder> {
95
98
  async attribute(name: string): Promise<string> {
96
99
  const element: ElementFinder = await this.nativeElement();
97
100
 
98
- return element.getAttribute(name);
101
+ return promised(element.getAttribute(name));
99
102
  }
100
103
 
101
104
  async text(): Promise<string> {
102
105
  const element: ElementFinder = await this.nativeElement();
103
106
 
104
- return element.getText();
107
+ return promised(element.getText());
105
108
  }
106
109
 
107
110
  async value(): Promise<string> {
@@ -134,7 +137,7 @@ export class ProtractorPageElement extends PageElement<ElementFinder> {
134
137
 
135
138
  return {
136
139
  switchBack: async (): Promise<void> => {
137
- await browser.driver.switchToParentFrame();
140
+ await promised(browser.driver.switchToParentFrame());
138
141
  },
139
142
  };
140
143
  }
@@ -146,7 +149,7 @@ export class ProtractorPageElement extends PageElement<ElementFinder> {
146
149
 
147
150
  return {
148
151
  switchBack: async (): Promise<void> => {
149
- await webElement.getDriver().executeScript(`arguments[0].focus()`, previouslyFocusedElement);
152
+ await promised(webElement.getDriver().executeScript(`arguments[0].focus()`, previouslyFocusedElement));
150
153
  },
151
154
  };
152
155
  }
@@ -159,9 +162,9 @@ export class ProtractorPageElement extends PageElement<ElementFinder> {
159
162
  const element: ElementFinder = await this.nativeElement();
160
163
  const webElement: WebElement = await element.getWebElement();
161
164
 
162
- return webElement.getDriver().switchTo().activeElement().then((active: WebElement) =>
165
+ return promised(webElement.getDriver().switchTo().activeElement().then((active: WebElement) =>
163
166
  element.equals(active),
164
- );
167
+ ));
165
168
  }
166
169
 
167
170
  async isClickable(): Promise<boolean> {
@@ -171,21 +174,32 @@ export class ProtractorPageElement extends PageElement<ElementFinder> {
171
174
  async isEnabled(): Promise<boolean> {
172
175
  const element: ElementFinder = await this.nativeElement();
173
176
 
174
- return element.isEnabled();
177
+ return promised(element.isEnabled());
175
178
  }
176
179
 
177
180
  async isPresent(): Promise<boolean> {
178
181
  const element: ElementFinder = await this.nativeElement();
179
182
 
180
- return element.isPresent();
183
+ return promised(element.isPresent());
181
184
  }
182
185
 
183
186
  async isSelected(): Promise<boolean> {
184
187
  const element: ElementFinder = await this.nativeElement();
185
188
 
186
- return element.isSelected();
189
+ return promised(element.isSelected());
187
190
  }
188
191
 
192
+ /**
193
+ * @desc
194
+ * Checks if the PageElement:
195
+ * - is not hidden, so doesn't have CSS style like `display: none`, `visibility: hidden` or `opacity: 0`
196
+ * - is within the browser viewport
197
+ * - doesn't have its centre covered by other elements
198
+ *
199
+ * @returns {Promise<boolean>}
200
+ *
201
+ * @see {@link @serenity-js/web/lib/screenplay/models~PageElement}
202
+ */
189
203
  async isVisible(): Promise<boolean> {
190
204
  const element: ElementFinder = await this.nativeElement();
191
205