@serenity-js/webdriverio 3.0.0-rc.5 → 3.0.0-rc.9
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 +137 -0
- package/lib/screenplay/abilities/BrowseTheWebWithWebdriverIO.d.ts +1 -1
- package/lib/screenplay/abilities/BrowseTheWebWithWebdriverIO.js.map +1 -1
- package/lib/screenplay/models/WebdriverIOPageElement.js +79 -7
- package/lib/screenplay/models/WebdriverIOPageElement.js.map +1 -1
- package/package.json +15 -15
- package/src/screenplay/abilities/BrowseTheWebWithWebdriverIO.ts +1 -1
- package/src/screenplay/models/WebdriverIOPageElement.ts +97 -13
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,124 @@
|
|
|
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.9](https://github.com/serenity-js/serenity-js/compare/v3.0.0-rc.8...v3.0.0-rc.9) (2022-02-01)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* **web:** isVisible() works with Web elements in Shadow DOM ([cf84fb0](https://github.com/serenity-js/serenity-js/commit/cf84fb072a6b813338b68bb1dec3932ea8709e3e)), closes [#1085](https://github.com/serenity-js/serenity-js/issues/1085)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
# [3.0.0-rc.8](https://github.com/serenity-js/serenity-js/compare/v3.0.0-rc.7...v3.0.0-rc.8) (2022-01-28)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
### Bug Fixes
|
|
21
|
+
|
|
22
|
+
* **webdriverio:** corrected visibility of the `browser` field on BrowseTheWebWithWebdriverIO ([0de725f](https://github.com/serenity-js/serenity-js/commit/0de725f71ec67c496b16fabdbc7e1a06715732fa))
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
# [3.0.0-rc.7](https://github.com/serenity-js/serenity-js/compare/v3.0.0-rc.6...v3.0.0-rc.7) (2022-01-28)
|
|
29
|
+
|
|
30
|
+
**Note:** Version bump only for package @serenity-js/webdriverio
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
# [3.0.0-rc.6](https://github.com/serenity-js/serenity-js/compare/v2.32.7...v3.0.0-rc.6) (2022-01-10)
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
# [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)
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
### Features
|
|
44
|
+
|
|
45
|
+
* **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)
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
# [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)
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
# [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)
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
### Bug Fixes
|
|
57
|
+
|
|
58
|
+
* **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)
|
|
59
|
+
* **deps:** updated tiny-types to 1.17.0 ([3187051](https://github.com/serenity-js/serenity-js/commit/3187051594158b4b450c82e851e417fd2ed21652))
|
|
60
|
+
* **web:** refactored Selector and NativeElementLocator classes to simplify the implementation ([f0c8f11](https://github.com/serenity-js/serenity-js/commit/f0c8f113433958877d36f13d0bc7f355ea68d280))
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
### Features
|
|
64
|
+
|
|
65
|
+
* **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))
|
|
66
|
+
* **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)
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
# [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)
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
# [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)
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
# [3.0.0-rc.0](https://github.com/serenity-js/serenity-js/compare/v2.32.5...v3.0.0-rc.0) (2021-12-08)
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
### Bug Fixes
|
|
82
|
+
|
|
83
|
+
* **core:** 3.0 RC ([469d54e](https://github.com/serenity-js/serenity-js/commit/469d54e4f81ef430566b93852e3174826f8ef672)), closes [#805](https://github.com/serenity-js/serenity-js/issues/805)
|
|
84
|
+
* **deps:** updated WebdriverIO ([9de63d4](https://github.com/serenity-js/serenity-js/commit/9de63d460d9735abfc5bb066671f6f28c3274597))
|
|
85
|
+
* **deps:** web ([b075b8e](https://github.com/serenity-js/serenity-js/commit/b075b8ecd8e00014469dda15a90175d60ed80c91))
|
|
86
|
+
* **web:** corrected timestamp rounding when retrieving the expiry date of a cookie ([d636965](https://github.com/serenity-js/serenity-js/commit/d63696586618cd701e703e33dd8b476efaac65b6))
|
|
87
|
+
* **webdriverio:** ensure getLastScriptExecutionResult returns undefined for void functions ([aa00dfd](https://github.com/serenity-js/serenity-js/commit/aa00dfd3ab320a5d7ee786feea1ce0355ac42638))
|
|
88
|
+
* **webdriverio:** fixed synchronisation issue in ModalDialog ([12324b2](https://github.com/serenity-js/serenity-js/commit/12324b2cef9c161df8b68960d5b958c1f208f70a)), closes [#805](https://github.com/serenity-js/serenity-js/issues/805)
|
|
89
|
+
* **webdriverio:** separated UIElement.hoverOver from UIElement.scrollIntoView ([cf4ca2c](https://github.com/serenity-js/serenity-js/commit/cf4ca2c531e0f90f9a27917e322359c13bfbc6e6))
|
|
90
|
+
* **webdriverio:** updated WebdriverIO to 7.13.2 ([ef79d19](https://github.com/serenity-js/serenity-js/commit/ef79d1962224e8dd04a1b0e099662c91ea118dfe))
|
|
91
|
+
* **webdriverio:** updated WebdriverIO to 7.16.7 ([3316e29](https://github.com/serenity-js/serenity-js/commit/3316e2905e68b1cabf76086da353072376f95f4a))
|
|
92
|
+
* **web:** removed window-specific APIs from BrowseTheWeb that got replaced by Page ([918f447](https://github.com/serenity-js/serenity-js/commit/918f447c1d8f326fbf5730f1aa61108045556212)), closes [#805](https://github.com/serenity-js/serenity-js/issues/805)
|
|
93
|
+
* **web:** renamed Element and associated classes to PageElement to avoid name conflicts ([1e4204b](https://github.com/serenity-js/serenity-js/commit/1e4204b5507469e6574c87a6d84454e39e8a813e))
|
|
94
|
+
* **web:** renamed PageElementList to PageElements to improve readability ([a9903a7](https://github.com/serenity-js/serenity-js/commit/a9903a7389b00106ef94d2bdb9f86a7fd04be541)), closes [#805](https://github.com/serenity-js/serenity-js/issues/805)
|
|
95
|
+
* **web:** standardised getters across PageElement implementations ([336472b](https://github.com/serenity-js/serenity-js/commit/336472b1a6882412f6a88483e51266909a1d51d0))
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
### Features
|
|
99
|
+
|
|
100
|
+
* **protractor:** compatibility with @serenity-js/web ([9df4db2](https://github.com/serenity-js/serenity-js/commit/9df4db27a6e0ae62bf0d0e679a170d4865041043)), closes [#805](https://github.com/serenity-js/serenity-js/issues/805)
|
|
101
|
+
* **web:** a common way to run the tests for all the web adapters ([c7e584a](https://github.com/serenity-js/serenity-js/commit/c7e584a9bf288ebc7781affdb720097527e8ed3a))
|
|
102
|
+
* **web:** added Page.viewportSize and Page.setViewportSize methods ([4cabbe2](https://github.com/serenity-js/serenity-js/commit/4cabbe21a7fbac3457c6a6ea3d4442a62c3f1f3c))
|
|
103
|
+
* **web:** all Screenplay APIs migrated from @serenity-js/webdriverio to @serenity-js/web ([7b6b95d](https://github.com/serenity-js/serenity-js/commit/7b6b95dc255446c29ae213ba2a1d142d426d16c8))
|
|
104
|
+
* **webdriverio:** support for native WebdriverIO services ([8d5ad22](https://github.com/serenity-js/serenity-js/commit/8d5ad22594cdb2ebddedc58a30259ca8430e360c))
|
|
105
|
+
* **web:** interaction to set a Cookie ([c056439](https://github.com/serenity-js/serenity-js/commit/c056439746a8f57c3edd937b8862f2babb70e94e)), closes [#805](https://github.com/serenity-js/serenity-js/issues/805)
|
|
106
|
+
* **web:** interaction to setViewportSize of a Page ([dd7f180](https://github.com/serenity-js/serenity-js/commit/dd7f18057b857d2e69c19265888bfd5b15fda21b))
|
|
107
|
+
* **web:** ModalDialog available for both Protractor and WebdriverIO adapters ([ef3c566](https://github.com/serenity-js/serenity-js/commit/ef3c566aed12b52aa22c54058992d369172b8597)), closes [#805](https://github.com/serenity-js/serenity-js/issues/805)
|
|
108
|
+
* **web:** new module @serenity-js/web to provide Web-related Screenplay Pattern APIs ([bead861](https://github.com/serenity-js/serenity-js/commit/bead8612af1a5c99b775e680a3904f44d0281cf9))
|
|
109
|
+
* **web:** Page.url() and Page.title() replace Website.url() and Website.title() ([49fe009](https://github.com/serenity-js/serenity-js/commit/49fe0094422ab53ec67d4ba303f80c33e382eebd)), closes [#805](https://github.com/serenity-js/serenity-js/issues/805)
|
|
110
|
+
* **web:** removed Target in favour of PageElement ([69496c4](https://github.com/serenity-js/serenity-js/commit/69496c47c4a1ec7b92e7ab6c83da1559e926f28e)), closes [#805](https://github.com/serenity-js/serenity-js/issues/805)
|
|
111
|
+
* **web:** support for switching browsing context ([a73a635](https://github.com/serenity-js/serenity-js/commit/a73a635f93183d67229acde78e74526564008869)), closes [#805](https://github.com/serenity-js/serenity-js/issues/805)
|
|
112
|
+
* **web:** support for working with cookies ([39cde6d](https://github.com/serenity-js/serenity-js/commit/39cde6de7a36d27a8b1c596493efbec94900af6b)), closes [#805](https://github.com/serenity-js/serenity-js/issues/805)
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
### BREAKING CHANGES
|
|
116
|
+
|
|
117
|
+
* **core:** Introduced @serenity-js/web - a shared library for Serenity/JS Web integration
|
|
118
|
+
modules such as @serenity-js/protractor and @serenity-js/webdriverio. Dropped support for Node 12.
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
|
|
6
124
|
# [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
125
|
|
|
8
126
|
|
|
@@ -103,6 +221,25 @@ modules such as @serenity-js/protractor and @serenity-js/webdriverio. Dropped su
|
|
|
103
221
|
|
|
104
222
|
|
|
105
223
|
|
|
224
|
+
## [2.32.7](https://github.com/serenity-js/serenity-js/compare/v2.32.6...v2.32.7) (2022-01-10)
|
|
225
|
+
|
|
226
|
+
|
|
227
|
+
### Bug Fixes
|
|
228
|
+
|
|
229
|
+
* **webdriverio:** SECURITY: updated WebdriverIO to 7.16.13 ([2062dfd](https://github.com/serenity-js/serenity-js/commit/2062dfd3277b68335502082df1abe7a5bcb4ca7f)), closes [Marak/colors.js#285](https://github.com/Marak/colors.js/issues/285)
|
|
230
|
+
|
|
231
|
+
|
|
232
|
+
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
## [2.32.6](https://github.com/serenity-js/serenity-js/compare/v2.32.5...v2.32.6) (2022-01-10)
|
|
236
|
+
|
|
237
|
+
**Note:** Version bump only for package @serenity-js/webdriverio
|
|
238
|
+
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
|
|
242
|
+
|
|
106
243
|
## [2.32.5](https://github.com/serenity-js/serenity-js/compare/v2.32.4...v2.32.5) (2021-12-08)
|
|
107
244
|
|
|
108
245
|
**Note:** Version bump only for package @serenity-js/webdriverio
|
|
@@ -36,7 +36,7 @@ import { WebdriverIONativeElementRoot } from '../models/locators';
|
|
|
36
36
|
* @see {@link @serenity-js/core/lib/screenplay/actor~Actor}
|
|
37
37
|
*/
|
|
38
38
|
export declare class BrowseTheWebWithWebdriverIO extends BrowseTheWeb<wdio.Element<'async'>, WebdriverIONativeElementRoot> {
|
|
39
|
-
readonly browser: wdio.Browser<'async'>;
|
|
39
|
+
protected readonly browser: wdio.Browser<'async'>;
|
|
40
40
|
/**
|
|
41
41
|
* @param {@wdio/types~Browser} browserInstance
|
|
42
42
|
* @returns {BrowseTheWebWithWebdriverIO}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BrowseTheWebWithWebdriverIO.js","sourceRoot":"","sources":["../../../src/screenplay/abilities/BrowseTheWebWithWebdriverIO.ts"],"names":[],"mappings":";;;AAAA,4CAAyD;AACzD,0CAAoL;AAGpL,sCAA+G;AAC/G,iDAAsF;AAEtF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAa,2BAA4B,SAAQ,kBAAiE;IAe9G;;OAEG;IACH,
|
|
1
|
+
{"version":3,"file":"BrowseTheWebWithWebdriverIO.js","sourceRoot":"","sources":["../../../src/screenplay/abilities/BrowseTheWebWithWebdriverIO.ts"],"names":[],"mappings":"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"}
|
|
@@ -84,22 +84,94 @@ class WebdriverIOPageElement extends web_1.PageElement {
|
|
|
84
84
|
return false;
|
|
85
85
|
}
|
|
86
86
|
const browser = await this.browserFor(element);
|
|
87
|
-
/* eslint-disable no-var */
|
|
87
|
+
/* eslint-disable no-var,unicorn/consistent-function-scoping,unicorn/prevent-abbreviations,@typescript-eslint/ban-ts-comment,unicorn/no-for-loop,prefer-const */
|
|
88
88
|
// get element at cx/cy and see if the element we found is our element, and therefore it's visible.
|
|
89
89
|
return browser.execute(
|
|
90
90
|
/* istanbul ignore next */
|
|
91
91
|
function isVisible(element) {
|
|
92
|
-
if (!element.getBoundingClientRect) {
|
|
92
|
+
if (!element.getBoundingClientRect || !element.scrollIntoView || !element.contains || !element.getClientRects || !document.elementFromPoint) {
|
|
93
93
|
return false;
|
|
94
94
|
}
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
95
|
+
// Edge before switching to Chromium
|
|
96
|
+
const isOldEdge = !!window['StyleMedia'];
|
|
97
|
+
// get overlapping element
|
|
98
|
+
function getOverlappingElement(elem, context) {
|
|
99
|
+
context = context || document;
|
|
100
|
+
const elemDimension = elem.getBoundingClientRect();
|
|
101
|
+
const x = elemDimension.left + (elem.clientWidth / 2);
|
|
102
|
+
const y = elemDimension.top + (elem.clientHeight / 2);
|
|
103
|
+
return context.elementFromPoint(x, y);
|
|
104
|
+
}
|
|
105
|
+
// get overlapping element rects (currently only the first)
|
|
106
|
+
// applicable if element's text is multiline.
|
|
107
|
+
function getOverlappingRects(elem, context) {
|
|
108
|
+
context = context || document;
|
|
109
|
+
const elems = [];
|
|
110
|
+
const rects = elem.getClientRects();
|
|
111
|
+
// webdriver clicks on center of the first element's rect (line of text), it might change in future
|
|
112
|
+
const rect = rects[0];
|
|
113
|
+
const x = rect.left + (rect.width / 2);
|
|
114
|
+
const y = rect.top + (rect.height / 2);
|
|
115
|
+
elems.push(context.elementFromPoint(x, y));
|
|
116
|
+
return elems;
|
|
117
|
+
}
|
|
118
|
+
// get overlapping elements
|
|
119
|
+
function getOverlappingElements(elem, context) {
|
|
120
|
+
return [getOverlappingElement(elem, context)].concat(getOverlappingRects(elem, context));
|
|
121
|
+
}
|
|
122
|
+
// is a node a descendant of a given node
|
|
123
|
+
function nodeContains(elem, otherNode) {
|
|
124
|
+
// Edge doesn't support neither Shadow Dom nor contains if ShadowRoot polyfill is used
|
|
125
|
+
if (isOldEdge) {
|
|
126
|
+
let tmpElement = otherNode;
|
|
127
|
+
while (tmpElement) {
|
|
128
|
+
if (tmpElement === elem) {
|
|
129
|
+
return true;
|
|
130
|
+
}
|
|
131
|
+
tmpElement = tmpElement.parentNode;
|
|
132
|
+
// DocumentFragment / ShadowRoot polyfill like ShadyRoot
|
|
133
|
+
if (tmpElement && tmpElement.nodeType === 11 && tmpElement.host) {
|
|
134
|
+
tmpElement = tmpElement.host;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return false;
|
|
138
|
+
}
|
|
139
|
+
return elem.contains(otherNode);
|
|
140
|
+
}
|
|
141
|
+
// is one of overlapping elements the `elem` or one of its child
|
|
142
|
+
function isOverlappingElementMatch(elementsFromPoint, elem) {
|
|
143
|
+
if (elementsFromPoint.some(function (elementFromPoint) {
|
|
144
|
+
return elementFromPoint === elem || nodeContains(elem, elementFromPoint);
|
|
145
|
+
})) {
|
|
98
146
|
return true;
|
|
147
|
+
}
|
|
148
|
+
// shadow root
|
|
149
|
+
// filter unique elements with shadowRoot
|
|
150
|
+
// @ts-ignore
|
|
151
|
+
let elemsWithShadowRoot = [].concat(elementsFromPoint);
|
|
152
|
+
elemsWithShadowRoot = elemsWithShadowRoot.filter(function (x) {
|
|
153
|
+
return x && x.shadowRoot && x.shadowRoot.elementFromPoint;
|
|
154
|
+
});
|
|
155
|
+
// getOverlappingElements of every element with shadowRoot
|
|
156
|
+
let shadowElementsFromPoint = [];
|
|
157
|
+
for (let i = 0; i < elemsWithShadowRoot.length; ++i) {
|
|
158
|
+
let shadowElement = elemsWithShadowRoot[i];
|
|
159
|
+
shadowElementsFromPoint = shadowElementsFromPoint.concat(getOverlappingElements(elem, shadowElement.shadowRoot));
|
|
160
|
+
}
|
|
161
|
+
// remove duplicates and parents
|
|
162
|
+
// @ts-ignore
|
|
163
|
+
shadowElementsFromPoint = [].concat(shadowElementsFromPoint);
|
|
164
|
+
shadowElementsFromPoint = shadowElementsFromPoint.filter(function (x) {
|
|
165
|
+
return !elementsFromPoint.includes(x);
|
|
166
|
+
});
|
|
167
|
+
if (shadowElementsFromPoint.length === 0) {
|
|
168
|
+
return false;
|
|
169
|
+
}
|
|
170
|
+
return isOverlappingElementMatch(shadowElementsFromPoint, elem);
|
|
99
171
|
}
|
|
100
|
-
return
|
|
172
|
+
return isOverlappingElementMatch(getOverlappingElements(element), element);
|
|
101
173
|
}, element);
|
|
102
|
-
/* eslint-enable no-var */
|
|
174
|
+
/* eslint-enable no-var,unicorn/consistent-function-scoping,unicorn/prevent-abbreviations,@typescript-eslint/ban-ts-comment,unicorn/no-for-loop,prefer-const */
|
|
103
175
|
}
|
|
104
176
|
// based on https://github.com/webdriverio/webdriverio/blob/dec6da76b0e218af935dbf39735ae3491d5edd8c/packages/webdriverio/src/utils/index.ts#L98
|
|
105
177
|
async browserFor(nativeElement) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebdriverIOPageElement.js","sourceRoot":"","sources":["../../../src/screenplay/models/WebdriverIOPageElement.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"WebdriverIOPageElement.js","sourceRoot":"","sources":["../../../src/screenplay/models/WebdriverIOPageElement.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@serenity-js/webdriverio",
|
|
3
|
-
"version": "3.0.0-rc.
|
|
3
|
+
"version": "3.0.0-rc.9",
|
|
4
4
|
"description": "Serenity/JS reporter and Screenplay Pattern library for WebdriverIO",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Jan Molak",
|
|
@@ -49,10 +49,10 @@
|
|
|
49
49
|
"npm": "^6 || ^7 || ^8"
|
|
50
50
|
},
|
|
51
51
|
"dependencies": {
|
|
52
|
-
"@serenity-js/core": "3.0.0-rc.
|
|
53
|
-
"@serenity-js/web": "3.0.0-rc.
|
|
54
|
-
"@wdio/reporter": "^7.16.
|
|
55
|
-
"@wdio/types": "^7.16.
|
|
52
|
+
"@serenity-js/core": "3.0.0-rc.9",
|
|
53
|
+
"@serenity-js/web": "3.0.0-rc.9",
|
|
54
|
+
"@wdio/reporter": "^7.16.13",
|
|
55
|
+
"@wdio/types": "^7.16.13",
|
|
56
56
|
"deepmerge": "^4.2.2",
|
|
57
57
|
"is-plain-object": "^5.0.0",
|
|
58
58
|
"tiny-types": "^1.17.0"
|
|
@@ -61,8 +61,8 @@
|
|
|
61
61
|
"@serenity-js/cucumber": "^3.0.0-rc",
|
|
62
62
|
"@serenity-js/jasmine": "^3.0.0-rc",
|
|
63
63
|
"@serenity-js/mocha": "^3.0.0-rc",
|
|
64
|
-
"@wdio/cli": "^7.16.
|
|
65
|
-
"webdriverio": "^7.16.
|
|
64
|
+
"@wdio/cli": "^7.16.13",
|
|
65
|
+
"webdriverio": "^7.16.13"
|
|
66
66
|
},
|
|
67
67
|
"peerDependenciesMeta": {
|
|
68
68
|
"@serenity-js/cucumber": {
|
|
@@ -79,18 +79,18 @@
|
|
|
79
79
|
"@documentation/esdoc-template": "3.0.0",
|
|
80
80
|
"@integration/testing-tools": "3.0.0",
|
|
81
81
|
"@types/mocha": "^9.0.0",
|
|
82
|
-
"@wdio/cli": "^7.16.
|
|
83
|
-
"@wdio/devtools-service": "^7.16.
|
|
84
|
-
"@wdio/dot-reporter": "^7.16.
|
|
85
|
-
"@wdio/local-runner": "^7.16.
|
|
86
|
-
"@wdio/mocha-framework": "^7.16.
|
|
87
|
-
"@wdio/spec-reporter": "^7.16.
|
|
82
|
+
"@wdio/cli": "^7.16.13",
|
|
83
|
+
"@wdio/devtools-service": "^7.16.13",
|
|
84
|
+
"@wdio/dot-reporter": "^7.16.13",
|
|
85
|
+
"@wdio/local-runner": "^7.16.13",
|
|
86
|
+
"@wdio/mocha-framework": "^7.16.13",
|
|
87
|
+
"@wdio/spec-reporter": "^7.16.13",
|
|
88
88
|
"axios": "^0.21.4",
|
|
89
89
|
"cross-env": "^7.0.3",
|
|
90
90
|
"mocha": "^9.1.3",
|
|
91
91
|
"mocha-testdata": "^1.2.0",
|
|
92
92
|
"start-server-and-test": "^1.14.0",
|
|
93
|
-
"webdriverio": "^7.16.
|
|
93
|
+
"webdriverio": "^7.16.13"
|
|
94
94
|
},
|
|
95
95
|
"nyc": {
|
|
96
96
|
"include": [
|
|
@@ -112,5 +112,5 @@
|
|
|
112
112
|
"cache": true,
|
|
113
113
|
"all": false
|
|
114
114
|
},
|
|
115
|
-
"gitHead": "
|
|
115
|
+
"gitHead": "bc72fce0831fe6c1e4e69d5ca307d7fb5f6d2f0d"
|
|
116
116
|
}
|
|
@@ -56,7 +56,7 @@ export class BrowseTheWebWithWebdriverIO extends BrowseTheWeb<wdio.Element<'asyn
|
|
|
56
56
|
/**
|
|
57
57
|
* @param {@wdio/types~Browser} browser
|
|
58
58
|
*/
|
|
59
|
-
constructor(
|
|
59
|
+
constructor(protected readonly browser: wdio.Browser<'async'>) {
|
|
60
60
|
super(new Map()
|
|
61
61
|
.set(ByCss, (selector: ByCss) => WebdriverIOLocator.createRootLocator(this.browser, selector, selector.value))
|
|
62
62
|
.set(ByCssContainingText, (selector: ByCssContainingText) => WebdriverIOLocator.createRootLocator(this.browser, selector, `${ selector.value }*=${ selector.text }`))
|
|
@@ -105,32 +105,116 @@ export class WebdriverIOPageElement
|
|
|
105
105
|
|
|
106
106
|
const browser = await this.browserFor(element);
|
|
107
107
|
|
|
108
|
-
/* eslint-disable no-var */
|
|
108
|
+
/* eslint-disable no-var,unicorn/consistent-function-scoping,unicorn/prevent-abbreviations,@typescript-eslint/ban-ts-comment,unicorn/no-for-loop,prefer-const */
|
|
109
109
|
|
|
110
110
|
// get element at cx/cy and see if the element we found is our element, and therefore it's visible.
|
|
111
111
|
return browser.execute(
|
|
112
112
|
/* istanbul ignore next */
|
|
113
113
|
function isVisible(element: any) {
|
|
114
|
-
|
|
115
|
-
|
|
114
|
+
|
|
115
|
+
if (!element.getBoundingClientRect || !element.scrollIntoView || !element.contains || !element.getClientRects || !document.elementFromPoint) {
|
|
116
|
+
return false
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// Edge before switching to Chromium
|
|
120
|
+
const isOldEdge = !!window['StyleMedia']
|
|
121
|
+
|
|
122
|
+
// get overlapping element
|
|
123
|
+
function getOverlappingElement (elem: HTMLElement, context?: Document) {
|
|
124
|
+
context = context || document
|
|
125
|
+
const elemDimension = elem.getBoundingClientRect()
|
|
126
|
+
const x = elemDimension.left + (elem.clientWidth / 2)
|
|
127
|
+
const y = elemDimension.top + (elem.clientHeight / 2)
|
|
128
|
+
return context.elementFromPoint(x, y)
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
// get overlapping element rects (currently only the first)
|
|
132
|
+
// applicable if element's text is multiline.
|
|
133
|
+
function getOverlappingRects (elem: HTMLElement, context?: Document) {
|
|
134
|
+
context = context || document
|
|
135
|
+
const elems = []
|
|
136
|
+
|
|
137
|
+
const rects = elem.getClientRects()
|
|
138
|
+
// webdriver clicks on center of the first element's rect (line of text), it might change in future
|
|
139
|
+
const rect = rects[0]
|
|
140
|
+
const x = rect.left + (rect.width / 2)
|
|
141
|
+
const y = rect.top + (rect.height / 2)
|
|
142
|
+
elems.push(context.elementFromPoint(x, y))
|
|
143
|
+
|
|
144
|
+
return elems
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
// get overlapping elements
|
|
148
|
+
function getOverlappingElements (elem: HTMLElement, context?: Document) {
|
|
149
|
+
return [getOverlappingElement(elem, context)].concat(getOverlappingRects(elem, context))
|
|
116
150
|
}
|
|
117
151
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
152
|
+
// is a node a descendant of a given node
|
|
153
|
+
function nodeContains (elem: HTMLElement, otherNode: HTMLElement) {
|
|
154
|
+
// Edge doesn't support neither Shadow Dom nor contains if ShadowRoot polyfill is used
|
|
155
|
+
if (isOldEdge) {
|
|
156
|
+
let tmpElement = otherNode as HTMLElement | ShadowRoot | Element
|
|
157
|
+
while (tmpElement) {
|
|
158
|
+
if (tmpElement === elem) {
|
|
159
|
+
return true
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
tmpElement = tmpElement.parentNode as ShadowRoot
|
|
163
|
+
// DocumentFragment / ShadowRoot polyfill like ShadyRoot
|
|
164
|
+
if (tmpElement && tmpElement.nodeType === 11 && tmpElement.host) {
|
|
165
|
+
tmpElement = tmpElement.host
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
return false
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
return elem.contains(otherNode)
|
|
172
|
+
}
|
|
123
173
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
174
|
+
// is one of overlapping elements the `elem` or one of its child
|
|
175
|
+
function isOverlappingElementMatch (elementsFromPoint: HTMLElement[], elem: HTMLElement): boolean {
|
|
176
|
+
if (elementsFromPoint.some(function (elementFromPoint) {
|
|
177
|
+
return elementFromPoint === elem || nodeContains(elem, elementFromPoint)
|
|
178
|
+
})) {
|
|
179
|
+
return true
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
// shadow root
|
|
183
|
+
// filter unique elements with shadowRoot
|
|
184
|
+
// @ts-ignore
|
|
185
|
+
let elemsWithShadowRoot = [].concat(elementsFromPoint)
|
|
186
|
+
elemsWithShadowRoot = elemsWithShadowRoot.filter(function (x: HTMLElement) {
|
|
187
|
+
return x && x.shadowRoot && x.shadowRoot.elementFromPoint
|
|
188
|
+
})
|
|
189
|
+
|
|
190
|
+
// getOverlappingElements of every element with shadowRoot
|
|
191
|
+
let shadowElementsFromPoint: HTMLElement[] = []
|
|
192
|
+
for (let i = 0; i < elemsWithShadowRoot.length; ++i) {
|
|
193
|
+
let shadowElement = elemsWithShadowRoot[i]
|
|
194
|
+
shadowElementsFromPoint = shadowElementsFromPoint.concat(
|
|
195
|
+
getOverlappingElements(elem, (shadowElement as HTMLElement).shadowRoot as any) as any
|
|
196
|
+
)
|
|
197
|
+
}
|
|
198
|
+
// remove duplicates and parents
|
|
199
|
+
// @ts-ignore
|
|
200
|
+
shadowElementsFromPoint = [].concat(shadowElementsFromPoint)
|
|
201
|
+
shadowElementsFromPoint = shadowElementsFromPoint.filter(function (x) {
|
|
202
|
+
return !elementsFromPoint.includes(x)
|
|
203
|
+
})
|
|
204
|
+
|
|
205
|
+
if (shadowElementsFromPoint.length === 0) {
|
|
206
|
+
return false
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
return isOverlappingElementMatch(shadowElementsFromPoint, elem)
|
|
127
210
|
}
|
|
128
|
-
|
|
211
|
+
|
|
212
|
+
return isOverlappingElementMatch(getOverlappingElements(element) as any as HTMLElement[], element)
|
|
129
213
|
},
|
|
130
214
|
element,
|
|
131
215
|
);
|
|
132
216
|
|
|
133
|
-
/* eslint-enable no-var */
|
|
217
|
+
/* eslint-enable no-var,unicorn/consistent-function-scoping,unicorn/prevent-abbreviations,@typescript-eslint/ban-ts-comment,unicorn/no-for-loop,prefer-const */
|
|
134
218
|
}
|
|
135
219
|
|
|
136
220
|
// based on https://github.com/webdriverio/webdriverio/blob/dec6da76b0e218af935dbf39735ae3491d5edd8c/packages/webdriverio/src/utils/index.ts#L98
|