@futdevpro/dynamo-e2e 1.18.31 → 1.18.33
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 +21 -0
- package/build/_modules/generators/_collections/test-case-filter.util.d.ts +2 -0
- package/build/_modules/generators/_collections/test-case-filter.util.d.ts.map +1 -1
- package/build/_modules/generators/_collections/test-case-filter.util.js +8 -1
- package/build/_modules/generators/_collections/test-case-filter.util.js.map +1 -1
- package/build/_modules/ui-check/_collections/constants/ui-check-page-scripts.const.d.ts.map +1 -1
- package/build/_modules/ui-check/_collections/constants/ui-check-page-scripts.const.js +135 -0
- package/build/_modules/ui-check/_collections/constants/ui-check-page-scripts.const.js.map +1 -1
- package/build/_modules/ui-check/_collections/detectors/covered-control.detector.d.ts +23 -0
- package/build/_modules/ui-check/_collections/detectors/covered-control.detector.d.ts.map +1 -0
- package/build/_modules/ui-check/_collections/detectors/covered-control.detector.js +48 -0
- package/build/_modules/ui-check/_collections/detectors/covered-control.detector.js.map +1 -0
- package/build/_modules/ui-check/_collections/detectors/dead-control.detector.d.ts.map +1 -1
- package/build/_modules/ui-check/_collections/detectors/dead-control.detector.js +8 -1
- package/build/_modules/ui-check/_collections/detectors/dead-control.detector.js.map +1 -1
- package/build/_modules/ui-check/_collections/detectors/scroll-trap.detector.d.ts +41 -0
- package/build/_modules/ui-check/_collections/detectors/scroll-trap.detector.d.ts.map +1 -0
- package/build/_modules/ui-check/_collections/detectors/scroll-trap.detector.js +86 -0
- package/build/_modules/ui-check/_collections/detectors/scroll-trap.detector.js.map +1 -0
- package/build/_modules/ui-check/_collections/ui-check-default-detectors.const.d.ts +8 -1
- package/build/_modules/ui-check/_collections/ui-check-default-detectors.const.d.ts.map +1 -1
- package/build/_modules/ui-check/_collections/ui-check-default-detectors.const.js +12 -1
- package/build/_modules/ui-check/_collections/ui-check-default-detectors.const.js.map +1 -1
- package/build/_modules/ui-check/_collections/ui-check-page.util.d.ts +5 -0
- package/build/_modules/ui-check/_collections/ui-check-page.util.d.ts.map +1 -1
- package/build/_modules/ui-check/_collections/ui-check-page.util.js.map +1 -1
- package/build/_modules/ui-check/index.d.ts +2 -0
- package/build/_modules/ui-check/index.d.ts.map +1 -1
- package/build/_modules/ui-check/index.js +2 -0
- package/build/_modules/ui-check/index.js.map +1 -1
- package/build/index.js +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,27 @@
|
|
|
3
3
|
Minden release a `dynamo-e2e-foundation` HYPERPLAN MP-N ütemezést követi.
|
|
4
4
|
Verzióformátum: `MM.mm.p` (két-számjegyes major-minor, Dynamo-konvenció).
|
|
5
5
|
|
|
6
|
+
## [01.18.33] — 2026-10-28 — `/ui-check` `scroll-trap` candidate (BFR-ORGANIZER-029)
|
|
7
|
+
|
|
8
|
+
- **New candidate detector `scroll-trap`** (BFR-ORGANIZER-029, owner 2026-10-26: "nem lehet scrollozni"): a
|
|
9
|
+
non-scrolling `overflow-y: auto|scroll` + `overscroll-behavior-y: contain|none` element inside a scrolling ancestor
|
|
10
|
+
(or document) — the wheel over it moves nothing. Structural candidates + a wheel test (a finding only where NOTHING
|
|
11
|
+
moved; the scroll positions are restored). Not interactive. Opt in via `DyE2E_UICheckCandidateDetectors_Const`.
|
|
12
|
+
- Specs: +3 real-browser (`/trap-bug` fires; `/trap-fixed`, `/trap-owns-scroll`, `/trap-covered` silent; the frame
|
|
13
|
+
restored), full suite 600/0; mutants: the wheel layer off and the restore off are caught (2/2).
|
|
14
|
+
|
|
15
|
+
## [01.18.32] — 2026-10-24 — `/ui-check` `covered-control` candidate, the current tab is not pressed, CRLF on a single-line field (BFR-ADVENTOR-081, BFR-MASTERPROMPTER-125, -121)
|
|
16
|
+
|
|
17
|
+
- **New candidate detector `covered-control`** (BFR-ADVENTOR-081): a visible, enabled control (links included) whose
|
|
18
|
+
centre is owned by another element is a finding naming that element. Not interactive. Opt in via
|
|
19
|
+
`DyE2E_UICheckCandidateDetectors_Const`.
|
|
20
|
+
- **`dead-control`: the current page / selected tab is not pressed** (BFR-MASTERPROMPTER-125 1.): `aria-current` or a
|
|
21
|
+
selected `role="tab"` is listed in the notes instead.
|
|
22
|
+
- **Generator: a single-line field's pattern check uses the value it really holds** (BFR-MASTERPROMPTER-121 2.,
|
|
23
|
+
BFR-ADVENTOR-079): an `<input>` drops CR / LF, so `pw:crlf-injection-shape` stays `valid` when the held value meets
|
|
24
|
+
the rule; a textarea keeps its line breaks.
|
|
25
|
+
- Specs: +5 (3 real-browser), full suite 597/0; every change mutation-tested (3/3 red).
|
|
26
|
+
|
|
6
27
|
## [01.18.31] — 2026-10-20 — `/ui-check`: QA-1 round 129 (HeloCia) — slow navigation, a page with "mail" in its path, load errors (BFR-FLEET-012)
|
|
7
28
|
|
|
8
29
|
- **A slow in-app navigation is waited for.** When the URL has not changed by `settleMs` and the press showed nothing or
|
|
@@ -12,6 +12,8 @@ import { DyE2E_FieldSettings_Shape } from '../_models/form-settings-shape.interf
|
|
|
12
12
|
*/
|
|
13
13
|
export declare class DyE2E_TestCaseFilter_Util {
|
|
14
14
|
/** A `runMode === smoke`-on belüli auto-keep-szignatúrák. */
|
|
15
|
+
/** Field types whose value keeps line breaks (every other text-like field is a single-line `<input>`). */
|
|
16
|
+
static readonly MULTILINE_TYPES: ReadonlySet<string>;
|
|
15
17
|
private static readonly SMOKE_KEEP_TYPES;
|
|
16
18
|
/** A `runMode === nightly` extra-keep-szignatúrái. */
|
|
17
19
|
private static readonly NIGHTLY_EXTRA_TYPES;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-case-filter.util.d.ts","sourceRoot":"","sources":["../../../../src/_modules/generators/_collections/test-case-filter.util.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,gDAAgD,CAAC;AACxF,OAAO,EAAE,6BAA6B,EAAE,MAAM,gEAAgE,CAAC;AAC/G,OAAO,EAAE,6BAA6B,EAAE,MAAM,uEAAuE,CAAC;AACtH,OAAO,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAC;AAErF;;;;;;;GAOG;AACH,qBAAa,yBAAyB;IAEpC,6DAA6D;IAC7D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CASrC;IAEH,sDAAsD;IACtD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAMxC;IAEH;;;OAGG;IACH,MAAM,CAAC,MAAM,CAAC,CAAC,EACb,KAAK,EAAE,6BAA6B,CAAC,CAAC,CAAC,EAAE,EACzC,aAAa,EAAE,yBAAyB,EACxC,OAAO,EAAE,sBAAsB,EAC/B,QAAQ,CAAC,EAAE,6BAA6B,GACvC,6BAA6B,CAAC,CAAC,CAAC,EAAE;
|
|
1
|
+
{"version":3,"file":"test-case-filter.util.d.ts","sourceRoot":"","sources":["../../../../src/_modules/generators/_collections/test-case-filter.util.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,gDAAgD,CAAC;AACxF,OAAO,EAAE,6BAA6B,EAAE,MAAM,gEAAgE,CAAC;AAC/G,OAAO,EAAE,6BAA6B,EAAE,MAAM,uEAAuE,CAAC;AACtH,OAAO,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAC;AAErF;;;;;;;GAOG;AACH,qBAAa,yBAAyB;IAEpC,6DAA6D;IAC7D,0GAA0G;IAC1G,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,CAA2C;IAE/F,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CASrC;IAEH,sDAAsD;IACtD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAMxC;IAEH;;;OAGG;IACH,MAAM,CAAC,MAAM,CAAC,CAAC,EACb,KAAK,EAAE,6BAA6B,CAAC,CAAC,CAAC,EAAE,EACzC,aAAa,EAAE,yBAAyB,EACxC,OAAO,EAAE,sBAAsB,EAC/B,QAAQ,CAAC,EAAE,6BAA6B,GACvC,6BAA6B,CAAC,CAAC,CAAC,EAAE;IAyLrC;;;;OAIG;IACH,MAAM,CAAC,iBAAiB,CAAC,CAAC,EACxB,KAAK,EAAE,6BAA6B,CAAC,CAAC,CAAC,EAAE,EACzC,OAAO,EAAE,sBAAsB,EAC/B,QAAQ,EAAE,6BAA6B,GAAG,SAAS,GAClD,6BAA6B,CAAC,CAAC,CAAC,EAAE;IAUrC,OAAO,CAAC,MAAM,CAAC,aAAa;CAa7B"}
|
|
@@ -15,6 +15,8 @@ const field_test_case_data_model_1 = require("../../contracts/_models/data-model
|
|
|
15
15
|
*/
|
|
16
16
|
class DyE2E_TestCaseFilter_Util {
|
|
17
17
|
/** A `runMode === smoke`-on belüli auto-keep-szignatúrák. */
|
|
18
|
+
/** Field types whose value keeps line breaks (every other text-like field is a single-line `<input>`). */
|
|
19
|
+
static MULTILINE_TYPES = new Set(['textarea', 'richtextarea']);
|
|
18
20
|
static SMOKE_KEEP_TYPES = new Set([
|
|
19
21
|
field_test_case_type_enum_1.DyE2E_FieldTestCase_Type.emptyInput,
|
|
20
22
|
field_test_case_type_enum_1.DyE2E_FieldTestCase_Type.ascii,
|
|
@@ -121,12 +123,17 @@ class DyE2E_TestCaseFilter_Util {
|
|
|
121
123
|
}
|
|
122
124
|
else {
|
|
123
125
|
const rule = new RegExp(fieldSettings.pattern);
|
|
126
|
+
// BFR-MASTERPROMPTER-121 2. / BFR-ADVENTOR-079 — a single-line `<input>` drops CR / LF from its value (HTML
|
|
127
|
+
// value sanitization), so the rule is checked against what the field really holds (measured: the register
|
|
128
|
+
// password got `Pw1!Set-Cookie: evil=1`, which MATCHES the rule ⇒ no error, the old `invalid` expectation failed)
|
|
129
|
+
const singleLine = !DyE2E_TestCaseFilter_Util.MULTILINE_TYPES.has(fieldSettings.type);
|
|
130
|
+
const heldValue = (value) => (singleLine ? value.replace(/[\r\n]/gu, '') : value);
|
|
124
131
|
result = result.map((c) => {
|
|
125
132
|
if (typeof c.inputValue === 'string'
|
|
126
133
|
&& c.inputValue.length > 0
|
|
127
134
|
&& c.expectation === test_expectation_type_enum_1.DyE2E_TestExpectation_Type.valid
|
|
128
135
|
&& c.type !== field_test_case_type_enum_1.DyE2E_FieldTestCase_Type.emptyInput
|
|
129
|
-
&& !rule.test(c.inputValue)) {
|
|
136
|
+
&& !rule.test(heldValue(c.inputValue))) {
|
|
130
137
|
return new field_test_case_data_model_1.DyE2E_FieldTestCase_DataModel({
|
|
131
138
|
...c,
|
|
132
139
|
expectation: test_expectation_type_enum_1.DyE2E_TestExpectation_Type.invalid,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-case-filter.util.js","sourceRoot":"","sources":["../../../../src/_modules/generators/_collections/test-case-filter.util.ts"],"names":[],"mappings":";;;AAAA,gGAA4F;AAC5F,kGAA+F;AAC/F,4FAAwF;AACxF,+GAA+G;AAI/G;;;;;;;GAOG;AACH,MAAa,yBAAyB;IAEpC,6DAA6D;
|
|
1
|
+
{"version":3,"file":"test-case-filter.util.js","sourceRoot":"","sources":["../../../../src/_modules/generators/_collections/test-case-filter.util.ts"],"names":[],"mappings":";;;AAAA,gGAA4F;AAC5F,kGAA+F;AAC/F,4FAAwF;AACxF,+GAA+G;AAI/G;;;;;;;GAOG;AACH,MAAa,yBAAyB;IAEpC,6DAA6D;IAC7D,0GAA0G;IAC1G,MAAM,CAAU,eAAe,GAAwB,IAAI,GAAG,CAAC,CAAE,UAAU,EAAE,cAAc,CAAE,CAAC,CAAC;IAEvF,MAAM,CAAU,gBAAgB,GAA0C,IAAI,GAAG,CAAC;QACxF,oDAAwB,CAAC,UAAU;QACnC,oDAAwB,CAAC,KAAK;QAC9B,oDAAwB,CAAC,IAAI;QAC7B,oDAAwB,CAAC,GAAG;QAC5B,oDAAwB,CAAC,QAAQ;QACjC,oDAAwB,CAAC,WAAW;QACpC,oDAAwB,CAAC,UAAU;QACnC,oDAAwB,CAAC,QAAQ;KAClC,CAAC,CAAC;IAEH,sDAAsD;IAC9C,MAAM,CAAU,mBAAmB,GAA0C,IAAI,GAAG,CAAC;QAC3F,oDAAwB,CAAC,WAAW;QACpC,oDAAwB,CAAC,WAAW;QACpC,oDAAwB,CAAC,WAAW;QACpC,oDAAwB,CAAC,gBAAgB;QACzC,oDAAwB,CAAC,WAAW;KACrC,CAAC,CAAC;IAEH;;;OAGG;IACH,MAAM,CAAC,MAAM,CACX,KAAyC,EACzC,aAAwC,EACxC,OAA+B,EAC/B,QAAwC;QAExC,IAAI,MAAM,GAAuC,KAAK,CAAC,MAAM,CAC3D,CAAC,CAAmC,EAAW,EAAE,CAAC,yBAAyB,CAAC,aAAa,CAAC,CAAC,EAAE,OAAO,CAAC,CACtG,CAAC;QAEF,qFAAqF;QACrF,iFAAiF;QACjF,sFAAsF;QACtF,qFAAqF;QACrF,IAAI,aAAa,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;YACpC,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,uEAAuE;QACvE,6FAA6F;QAC7F,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;YAC5B,MAAM,GAAG,MAAM,CAAC,MAAM,CACpB,CAAC,CAAmC,EAAW,EAAE,CAC/C,CAAC,CAAC,gBAAgB,KAAK,UAAU,IAAI,CAAC,CAAC,WAAW,KAAK,uDAA0B,CAAC,OAAO,CAC5F,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,0EAA0E;YAC1E,gFAAgF;YAChF,2EAA2E;YAC3E,uEAAuE;YACvE,MAAM,GAAG,MAAM,CAAC,MAAM,CACpB,CAAC,CAAmC,EAAW,EAAE,CAC/C,CAAC,CAAC,IAAI,KAAK,oDAAwB,CAAC,UAAU,IAAI,CAAC,CAAC,WAAW,KAAK,uDAA0B,CAAC,KAAK,CACvG,CAAC;QACJ,CAAC;QAED,iFAAiF;QACjF,kFAAkF;QAClF,oFAAoF;QACpF,+EAA+E;QAC/E,uFAAuF;QACvF,yEAAyE;QACzE,IAAI,aAAa,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACtC,MAAM,GAAG,MAAM,CAAC,MAAM,CACpB,CAAC,CAAmC,EAAW,EAAE,CAC/C,CAAC,CAAC,gBAAgB,KAAK,UAAU,IAAI,CAAC,CAAC,WAAW,KAAK,uDAA0B,CAAC,OAAO,CAC5F,CAAC;QACJ,CAAC;QAED,gFAAgF;QAChF,8EAA8E;QAC9E,+EAA+E;QAC/E,kFAAkF;QAClF,IAAI,OAAO,aAAa,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YAChD,MAAM,GAAG,MAAM,CAAC,MAAM,CACpB,CAAC,CAAmC,EAAW,EAAE,CAC/C,CAAC,CAAC,gBAAgB,KAAK,WAAW,IAAI,CAAC,CAAC,WAAW,KAAK,uDAA0B,CAAC,OAAO,CAC7F,CAAC;QACJ,CAAC;QACD,IAAI,OAAO,aAAa,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YAChD,MAAM,GAAG,MAAM,CAAC,MAAM,CACpB,CAAC,CAAmC,EAAW,EAAE,CAC/C,CAAC,CAAC,gBAAgB,KAAK,WAAW,IAAI,CAAC,CAAC,WAAW,KAAK,uDAA0B,CAAC,OAAO,CAC7F,CAAC;QACJ,CAAC;QAED,iCAAiC;QACjC,IAAI,OAAO,aAAa,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YAChD,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAmC,EAAoC,EAAE;gBAC5F,IAAI,CAAC,CAAC,IAAI,KAAK,oDAAwB,CAAC,QAAQ,IAAI,OAAO,CAAC,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;oBACrF,MAAM,eAAe,GAAW,GAAG,CAAC,MAAM,CAAE,aAAa,CAAC,SAAoB,GAAG,CAAC,CAAC,CAAC;oBACpF,OAAO,IAAI,0DAA6B,CAAI,EAAE,GAAG,CAAC,EAAE,UAAU,EAAE,eAA+B,EAAE,CAAC,CAAC;gBACrG,CAAC;gBACD,OAAO,CAAC,CAAC;YACX,CAAC,CAAC,CAAC;QACL,CAAC;QACD,IAAI,OAAO,aAAa,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YAChD,MAAM,MAAM,GAAW,aAAa,CAAC,SAAmB,CAAC;YACzD,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAmC,EAAoC,EAAE;gBAC5F,0EAA0E;gBAC1E,IAAI,CAAC,CAAC,IAAI,KAAK,oDAAwB,CAAC,SAAS,IAAI,OAAO,CAAC,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;oBACtF,MAAM,gBAAgB,GAAW,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;oBACrE,OAAO,IAAI,0DAA6B,CAAI,EAAE,GAAG,CAAC,EAAE,UAAU,EAAE,gBAAgC,EAAE,CAAC,CAAC;gBACtG,CAAC;gBACD,wFAAwF;gBACxF,qFAAqF;gBACrF,+FAA+F;gBAC/F,IACE,OAAO,CAAC,CAAC,UAAU,KAAK,QAAQ;uBAC7B,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;uBACvB,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,MAAM;uBAC5B,CAAC,CAAC,WAAW,KAAK,uDAA0B,CAAC,KAAK;uBAClD,CAAC,CAAC,IAAI,KAAK,oDAAwB,CAAC,UAAU,EACjD,CAAC;oBACD,OAAO,IAAI,0DAA6B,CAAI;wBAC1C,GAAG,CAAC;wBACJ,WAAW,EAAE,uDAA0B,CAAC,OAAO;wBAC/C,gBAAgB,EAAE,WAAW;qBAC9B,CAAC,CAAC;gBACL,CAAC;gBACD,OAAO,CAAC,CAAC;YACX,CAAC,CAAC,CAAC;QACL,CAAC;QAED,iHAAiH;QACjH,kHAAkH;QAClH,yGAAyG;QACzG,kHAAkH;QAClH,IAAI,OAAO,aAAa,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC9C,MAAM,GAAG,MAAM,CAAC,MAAM,CACpB,CAAC,CAAmC,EAAW,EAAE,CAC/C,CAAC,CAAC,gBAAgB,KAAK,SAAS,IAAI,CAAC,CAAC,WAAW,KAAK,uDAA0B,CAAC,OAAO,CAC3F,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,GAAW,IAAI,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YACvD,4GAA4G;YAC5G,0GAA0G;YAC1G,kHAAkH;YAClH,MAAM,UAAU,GAAY,CAAC,yBAAyB,CAAC,eAAe,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YAC/F,MAAM,SAAS,GAA8B,CAAC,KAAa,EAAU,EAAE,CACrE,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YAEvD,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAmC,EAAoC,EAAE;gBAC5F,IACE,OAAO,CAAC,CAAC,UAAU,KAAK,QAAQ;uBAC7B,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;uBACvB,CAAC,CAAC,WAAW,KAAK,uDAA0B,CAAC,KAAK;uBAClD,CAAC,CAAC,IAAI,KAAK,oDAAwB,CAAC,UAAU;uBAC9C,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,EACtC,CAAC;oBACD,OAAO,IAAI,0DAA6B,CAAI;wBAC1C,GAAG,CAAC;wBACJ,WAAW,EAAE,uDAA0B,CAAC,OAAO;wBAC/C,gBAAgB,EAAE,SAAS;qBAC5B,CAAC,CAAC;gBACL,CAAC;gBACD,OAAO,CAAC,CAAC;YACX,CAAC,CAAC,CAAC;QACL,CAAC;QAED,sDAAsD;QACtD,IAAI,OAAO,aAAa,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC1C,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAmC,EAAoC,EAAE;gBAC5F,IAAI,CAAC,CAAC,IAAI,KAAK,oDAAwB,CAAC,QAAQ,EAAE,CAAC;oBACjD,OAAO,IAAI,0DAA6B,CAAI,EAAE,GAAG,CAAC,EAAE,UAAU,EAAE,aAAa,CAAC,GAAmB,EAAE,CAAC,CAAC;gBACvG,CAAC;gBACD,IAAI,CAAC,CAAC,IAAI,KAAK,oDAAwB,CAAC,QAAQ,EAAE,CAAC;oBACjD,OAAO,IAAI,0DAA6B,CAAI,EAAE,GAAG,CAAC,EAAE,UAAU,EAAE,MAAM,CAAE,aAAa,CAAC,GAAc,GAAG,CAAC,CAAiB,EAAE,CAAC,CAAC;gBAC/H,CAAC;gBACD,OAAO,CAAC,CAAC;YACX,CAAC,CAAC,CAAC;QACL,CAAC;QACD,IAAI,OAAO,aAAa,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC1C,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAmC,EAAoC,EAAE;gBAC5F,IAAI,CAAC,CAAC,IAAI,KAAK,oDAAwB,CAAC,QAAQ,EAAE,CAAC;oBACjD,OAAO,IAAI,0DAA6B,CAAI,EAAE,GAAG,CAAC,EAAE,UAAU,EAAE,aAAa,CAAC,GAAmB,EAAE,CAAC,CAAC;gBACvG,CAAC;gBACD,IAAI,CAAC,CAAC,IAAI,KAAK,oDAAwB,CAAC,QAAQ,EAAE,CAAC;oBACjD,OAAO,IAAI,0DAA6B,CAAI,EAAE,GAAG,CAAC,EAAE,UAAU,EAAE,MAAM,CAAE,aAAa,CAAC,GAAc,GAAG,CAAC,CAAiB,EAAE,CAAC,CAAC;gBAC/H,CAAC;gBACD,OAAO,CAAC,CAAC;YACX,CAAC,CAAC,CAAC;QACL,CAAC;QAED,wBAAwB;QACxB,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxD,MAAM,SAAS,GAAkC,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;gBAC7E,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAmC,EAAW,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YAClG,CAAC;iBAAM,IAAI,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC/D,MAAM,SAAS,GAAkC,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;gBAC7E,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAmC,EAAW,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YACnG,CAAC;YACD,IAAI,QAAQ,CAAC,WAAW,IAAI,QAAQ,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5D,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;oBAC1C,MAAM,CAAC,IAAI,CAAC,IAAI,0DAA6B,CAAI;wBAC/C,EAAE,EAAE,UAAU,MAAM,CAAC,IAAI,EAAE;wBAC3B,IAAI,EAAE,MAAM,CAAC,IAAI;wBACjB,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,UAAU,MAAM,CAAC,IAAI,EAAE;wBAC1D,UAAU,EAAE,CAAC,MAAM,CAAC,UAAU,IAAI,IAAI,CAAsB;wBAC5D,WAAW,EAAE,uDAA0B,CAAC,KAAK;wBAC7C,KAAK,EAAE,MAAM,CAAC,aAAa;qBAC5B,CAAC,CAAC,CAAC;gBACN,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,iBAAiB,CACtB,KAAyC,EACzC,OAA+B,EAC/B,QAAmD;QAEnD,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,IAAI,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;YAC/D,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,SAAS,GAAkC,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAE7E,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAmC,EAAW,EAAE,CACnE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,yBAAyB,CAAC,aAAa,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;IAClF,CAAC;IAEO,MAAM,CAAC,aAAa,CAC1B,QAA0C,EAC1C,OAA+B;QAE/B,IAAI,OAAO,KAAK,gDAAsB,CAAC,KAAK,EAAE,CAAC;YAC7C,OAAO,yBAAyB,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACvE,CAAC;QACD,IAAI,OAAO,KAAK,gDAAsB,CAAC,IAAI,EAAE,CAAC;YAC5C,OAAO,CAAC,yBAAyB,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC3E,CAAC;QACD,UAAU;QACV,OAAO,IAAI,CAAC;IACd,CAAC;;AA3PH,8DA4PC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui-check-page-scripts.const.d.ts","sourceRoot":"","sources":["../../../../../src/_modules/ui-check/_collections/constants/ui-check-page-scripts.const.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,8BAA8B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"ui-check-page-scripts.const.d.ts","sourceRoot":"","sources":["../../../../../src/_modules/ui-check/_collections/constants/ui-check-page-scripts.const.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,8BAA8B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAwY3E,CAAC"}
|
|
@@ -66,6 +66,9 @@ exports.DyE2E_UICheckPageScripts_Const = {
|
|
|
66
66
|
ariaLabel: el.getAttribute('aria-label'),
|
|
67
67
|
title: el.getAttribute('title') || '',
|
|
68
68
|
destructive: !!el.closest('[data-e2e-destructive]'),
|
|
69
|
+
// BFR-MASTERPROMPTER-125 1. — the current page / the selected tab: pressing it again is deliberately inert
|
|
70
|
+
current: (!!el.getAttribute('aria-current') && el.getAttribute('aria-current') !== 'false')
|
|
71
|
+
|| (el.getAttribute('role') === 'tab' && el.getAttribute('aria-selected') === 'true'),
|
|
69
72
|
});
|
|
70
73
|
if (out.length >= arg.max) break;
|
|
71
74
|
}
|
|
@@ -251,5 +254,137 @@ exports.DyE2E_UICheckPageScripts_Const = {
|
|
|
251
254
|
viewportWidth: vw, inner: inner.filter((a) => !inner.some((b) => b !== a && b.selector.startsWith(a.selector
|
|
252
255
|
+ ' > '))) };
|
|
253
256
|
}`,
|
|
257
|
+
// BFR-ADVENTOR-081 — a visible, enabled control whose centre is owned by ANOTHER element (a click lands there).
|
|
258
|
+
// Every control is scrolled to the viewport centre first; the page scroll is restored at the end. A modal dialog open
|
|
259
|
+
// ⇒ only its controls are checked (the rest is covered on purpose). A label of the control does not count.
|
|
260
|
+
coveredControls: `(arg) => {
|
|
261
|
+
const cssPath = (el) => {
|
|
262
|
+
const parts = [];
|
|
263
|
+
let node = el;
|
|
264
|
+
while (node && node.nodeType === 1 && node !== document.documentElement) {
|
|
265
|
+
if (node.id && /^[A-Za-z][\\w-]*$/.test(node.id) && document.querySelectorAll('#' + node.id).length === 1) {
|
|
266
|
+
parts.unshift('#' + node.id);
|
|
267
|
+
break;
|
|
268
|
+
}
|
|
269
|
+
const tag = node.tagName.toLowerCase();
|
|
270
|
+
const parent = node.parentElement;
|
|
271
|
+
const same = parent ? Array.from(parent.children).filter((c) => c.tagName === node.tagName) : [];
|
|
272
|
+
parts.unshift(same.length > 1 ? tag + ':nth-of-type(' + (same.indexOf(node) + 1) + ')' : tag);
|
|
273
|
+
node = parent;
|
|
274
|
+
}
|
|
275
|
+
return parts.join(' > ');
|
|
276
|
+
};
|
|
277
|
+
const visible = (el) => {
|
|
278
|
+
const r = el.getBoundingClientRect();
|
|
279
|
+
const cs = getComputedStyle(el);
|
|
280
|
+
return r.width > 0 && r.height > 0 && cs.visibility !== 'hidden' && cs.display !== 'none'
|
|
281
|
+
&& (typeof el.checkVisibility !== 'function' || el.checkVisibility());
|
|
282
|
+
};
|
|
283
|
+
const disabled = (el) => el.disabled === true || el.getAttribute('aria-disabled') === 'true'
|
|
284
|
+
|| !!el.closest('[inert], fieldset[disabled]');
|
|
285
|
+
const describe = (el) => ({
|
|
286
|
+
selector: cssPath(el),
|
|
287
|
+
tag: el.tagName.toLowerCase(),
|
|
288
|
+
text: (el.textContent || '').replace(/\\s+/g, ' ').trim().slice(0, 80),
|
|
289
|
+
testId: el.getAttribute('data-testid') || el.getAttribute('data-test-id') || null,
|
|
290
|
+
className: String(el.getAttribute('class') || '').slice(0, 80),
|
|
291
|
+
});
|
|
292
|
+
const dialogs = Array.from(document.querySelectorAll(
|
|
293
|
+
'[role="dialog"], [role="alertdialog"], mat-dialog-container, .mat-mdc-dialog-container, dialog[open]'))
|
|
294
|
+
.filter((d) => visible(d));
|
|
295
|
+
const backdrop = Array.from(document.querySelectorAll('.cdk-overlay-backdrop-showing, .modal-backdrop'))
|
|
296
|
+
.some((b) => visible(b));
|
|
297
|
+
const modal = dialogs.length && (backdrop || dialogs.some((d) => d.getAttribute('aria-modal') === 'true'))
|
|
298
|
+
? dialogs[dialogs.length - 1] : null;
|
|
299
|
+
const selector = 'a[href], button, [role="button"], [role="tab"], [role="menuitem"], select, textarea,'
|
|
300
|
+
+ ' input:not([type="hidden"])';
|
|
301
|
+
const startX = window.scrollX;
|
|
302
|
+
const startY = window.scrollY;
|
|
303
|
+
const out = [];
|
|
304
|
+
let checked = 0;
|
|
305
|
+
for (const el of Array.from((modal || document).querySelectorAll(selector))) {
|
|
306
|
+
if (checked >= arg.max) break;
|
|
307
|
+
const probe = el.tagName === 'INPUT' && !visible(el) ? (el.closest('label') || el) : el;
|
|
308
|
+
if (!visible(probe) || disabled(el) || getComputedStyle(el).pointerEvents === 'none') continue;
|
|
309
|
+
checked++;
|
|
310
|
+
probe.scrollIntoView({ block: 'center', inline: 'center' });
|
|
311
|
+
const r = probe.getBoundingClientRect();
|
|
312
|
+
const x = r.left + r.width / 2;
|
|
313
|
+
const y = r.top + r.height / 2;
|
|
314
|
+
if (x < 0 || y < 0 || x >= window.innerWidth || y >= window.innerHeight) continue;
|
|
315
|
+
const top = document.elementFromPoint(x, y);
|
|
316
|
+
if (!top || top === el || el.contains(top) || top.contains(el) || probe.contains(top)) continue;
|
|
317
|
+
const label = top.closest('label');
|
|
318
|
+
if (label && (label.control === el || label.contains(el))) continue;
|
|
319
|
+
out.push({ control: describe(el), cover: describe(top), x: Math.round(x), y: Math.round(y) });
|
|
320
|
+
}
|
|
321
|
+
window.scrollTo(startX, startY);
|
|
322
|
+
return { checked: checked, covered: out };
|
|
323
|
+
}`,
|
|
324
|
+
// BFR-ORGANIZER-029 — a scroll container with overscroll containment that does NOT scroll itself, inside a scrolling
|
|
325
|
+
// ancestor (or document): the structural candidates of a scroll trap, with the centre of their visible part.
|
|
326
|
+
scrollTraps: `(arg) => {
|
|
327
|
+
const root = document.scrollingElement || document.documentElement;
|
|
328
|
+
const vh = window.innerHeight;
|
|
329
|
+
const vw = window.innerWidth;
|
|
330
|
+
const cssPath = (el) => {
|
|
331
|
+
const parts = [];
|
|
332
|
+
let node = el;
|
|
333
|
+
while (node && node.nodeType === 1 && node !== document.documentElement) {
|
|
334
|
+
if (node.id && /^[A-Za-z][\\w-]*$/.test(node.id)) { parts.unshift('#' + node.id); break; }
|
|
335
|
+
const tag = node.tagName.toLowerCase();
|
|
336
|
+
const parent = node.parentElement;
|
|
337
|
+
const same = parent ? Array.from(parent.children).filter((c) => c.tagName === node.tagName) : [];
|
|
338
|
+
parts.unshift(same.length > 1 ? tag + ':nth-of-type(' + (same.indexOf(node) + 1) + ')' : tag);
|
|
339
|
+
node = parent;
|
|
340
|
+
}
|
|
341
|
+
return parts.join(' > ');
|
|
342
|
+
};
|
|
343
|
+
const scrolls = (el) => /(auto|scroll|overlay)/.test(getComputedStyle(el).overflowY)
|
|
344
|
+
&& el.scrollHeight > el.clientHeight + 1;
|
|
345
|
+
const documentScrolls = root.scrollHeight > vh + 1;
|
|
346
|
+
const out = [];
|
|
347
|
+
for (const el of Array.from(document.querySelectorAll('body *'))) {
|
|
348
|
+
if (out.length >= arg.max) break;
|
|
349
|
+
const cs = getComputedStyle(el);
|
|
350
|
+
if (!/(auto|scroll|overlay)/.test(cs.overflowY) || !/^(contain|none)$/.test(cs.overscrollBehaviorY)) continue;
|
|
351
|
+
if (el.scrollHeight > el.clientHeight + 1) continue;
|
|
352
|
+
let scroller = null;
|
|
353
|
+
for (let a = el.parentElement; a && a !== document.body && a !== document.documentElement; a = a.parentElement) {
|
|
354
|
+
if (scrolls(a)) { scroller = a; break; }
|
|
355
|
+
}
|
|
356
|
+
if (!scroller && !documentScrolls) continue;
|
|
357
|
+
const r = el.getBoundingClientRect();
|
|
358
|
+
const top = Math.max(r.top, 0);
|
|
359
|
+
const bottom = Math.min(r.bottom, vh);
|
|
360
|
+
const left = Math.max(r.left, 0);
|
|
361
|
+
const right = Math.min(r.right, vw);
|
|
362
|
+
if (bottom - top < 20 || right - left < 20) continue;
|
|
363
|
+
out.push({ selector: cssPath(el), tag: el.tagName.toLowerCase(),
|
|
364
|
+
className: (typeof el.className === 'string' ? el.className : '').slice(0, 80),
|
|
365
|
+
overscroll: cs.overscrollBehaviorY, scrollHeight: el.scrollHeight, clientHeight: el.clientHeight,
|
|
366
|
+
scroller: scroller
|
|
367
|
+
? { selector: cssPath(scroller), scrollHeight: scroller.scrollHeight, clientHeight: scroller.clientHeight }
|
|
368
|
+
: { selector: 'document', scrollHeight: root.scrollHeight, clientHeight: vh },
|
|
369
|
+
x: Math.round((left + right) / 2), y: Math.round((top + bottom) / 2) });
|
|
370
|
+
}
|
|
371
|
+
return out;
|
|
372
|
+
}`,
|
|
373
|
+
// BFR-ORGANIZER-029 — the scroll positions of an element, all its ancestors and the window (the wheel test).
|
|
374
|
+
scrollChain: `(selector) => {
|
|
375
|
+
const out = [];
|
|
376
|
+
for (let n = document.querySelector(selector); n && n.nodeType === 1; n = n.parentElement) out.push(n.scrollTop);
|
|
377
|
+
out.push(window.scrollY);
|
|
378
|
+
return out;
|
|
379
|
+
}`,
|
|
380
|
+
// BFR-ORGANIZER-029 — puts the positions `scrollChain` read back (the page is left as it was found).
|
|
381
|
+
restoreScrollChain: `(arg) => {
|
|
382
|
+
let i = 0;
|
|
383
|
+
for (let n = document.querySelector(arg.selector); n && n.nodeType === 1; n = n.parentElement) {
|
|
384
|
+
n.scrollTop = arg.positions[i++] || 0;
|
|
385
|
+
}
|
|
386
|
+
window.scrollTo(window.scrollX, arg.positions[i] || 0);
|
|
387
|
+
return true;
|
|
388
|
+
}`,
|
|
254
389
|
};
|
|
255
390
|
//# sourceMappingURL=ui-check-page-scripts.const.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui-check-page-scripts.const.js","sourceRoot":"","sources":["../../../../../src/_modules/ui-check/_collections/constants/ui-check-page-scripts.const.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACU,QAAA,8BAA8B,GAAqC;IAE9E;;;OAGG;IACH,YAAY,EAAE
|
|
1
|
+
{"version":3,"file":"ui-check-page-scripts.const.js","sourceRoot":"","sources":["../../../../../src/_modules/ui-check/_collections/constants/ui-check-page-scripts.const.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACU,QAAA,8BAA8B,GAAqC;IAE9E;;;OAGG;IACH,YAAY,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA+DZ;IAEF,gHAAgH;IAChH,kBAAkB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAkElB;IAEF,iEAAiE;IACjE,iBAAiB,EAAE;;;;;;;IAOjB;IAEF;;;;;OAKG;IACH,eAAe,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAwCf;IAEF,kEAAkE;IAClE,WAAW,EAAE;;;;;IAKX;IAEF,kEAAkE;IAClE,WAAW,EAAE;;;;;;IAMX;IAEF;;;;OAIG;IACH,YAAY,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAmCZ;IAEF,gHAAgH;IAChH,sHAAsH;IACtH,2GAA2G;IAC3G,eAAe,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA+Df;IAEF,qHAAqH;IACrH,6GAA6G;IAC7G,WAAW,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA8CX;IAEF,6GAA6G;IAC7G,WAAW,EAAE;;;;;IAKX;IAEF,qGAAqG;IACrG,kBAAkB,EAAE;;;;;;;IAOlB;CACH,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Page } from '@playwright/test';
|
|
2
|
+
import { DyE2E_UICheckContext_Interface } from '../../_models/ui-check-context.interface';
|
|
3
|
+
import { DyE2E_UICheckDetector_Interface, DyE2E_UICheckOrigin_Interface } from '../../_models/ui-check-detector.interface';
|
|
4
|
+
import { DyE2E_UICheckFinding_Interface } from '../../_models/ui-check-finding.interface';
|
|
5
|
+
/**
|
|
6
|
+
* A control another element covers: a visible, enabled control (links included) is scrolled to the viewport centre,
|
|
7
|
+
* and the element at its centre (`elementFromPoint`) is not the control, not inside it and not its label — so a click
|
|
8
|
+
* lands on that other element. NOT interactive: nothing is pressed, so it runs on any host.
|
|
9
|
+
*
|
|
10
|
+
* Origin: `BFR-ADVENTOR-081` — Adventor TEST 01.15.853, the landing page: the footer slid over the "Report illegal
|
|
11
|
+
* content" link (a `h-full` box overflowed); the journey's click waited 90 s, the `dead-control` gave 0 findings (it
|
|
12
|
+
* does not press `a[href]`).
|
|
13
|
+
*/
|
|
14
|
+
export declare class DyE2E_CoveredControl_Detector implements DyE2E_UICheckDetector_Interface {
|
|
15
|
+
readonly id: string;
|
|
16
|
+
readonly errorClass: string;
|
|
17
|
+
readonly description: string;
|
|
18
|
+
readonly origin: DyE2E_UICheckOrigin_Interface;
|
|
19
|
+
readonly interactive: boolean;
|
|
20
|
+
notes: string[];
|
|
21
|
+
run(page: Page, context: DyE2E_UICheckContext_Interface): Promise<DyE2E_UICheckFinding_Interface[]>;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=covered-control.detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"covered-control.detector.d.ts","sourceRoot":"","sources":["../../../../../src/_modules/ui-check/_collections/detectors/covered-control.detector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExC,OAAO,EAAE,8BAA8B,EAAE,MAAM,0CAA0C,CAAC;AAC1F,OAAO,EAAE,+BAA+B,EAAE,6BAA6B,EAAE,MAAM,2CAA2C,CAAC;AAC3H,OAAO,EAAE,8BAA8B,EAAE,MAAM,0CAA0C,CAAC;AAmB1F;;;;;;;;GAQG;AACH,qBAAa,6BAA8B,YAAW,+BAA+B;IAEnF,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAqB;IACxC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAsC;IACjE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAA0E;IACtG,QAAQ,CAAC,MAAM,EAAE,6BAA6B,CAE5C;IACF,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAS;IACtC,KAAK,EAAE,MAAM,EAAE,CAAM;IAEf,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,8BAA8B,GAAG,OAAO,CAAC,8BAA8B,EAAE,CAAC;CA0B1G"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DyE2E_CoveredControl_Detector = void 0;
|
|
4
|
+
const ui_check_page_scripts_const_1 = require("../constants/ui-check-page-scripts.const");
|
|
5
|
+
const ui_check_page_util_1 = require("../ui-check-page.util");
|
|
6
|
+
/**
|
|
7
|
+
* A control another element covers: a visible, enabled control (links included) is scrolled to the viewport centre,
|
|
8
|
+
* and the element at its centre (`elementFromPoint`) is not the control, not inside it and not its label — so a click
|
|
9
|
+
* lands on that other element. NOT interactive: nothing is pressed, so it runs on any host.
|
|
10
|
+
*
|
|
11
|
+
* Origin: `BFR-ADVENTOR-081` — Adventor TEST 01.15.853, the landing page: the footer slid over the "Report illegal
|
|
12
|
+
* content" link (a `h-full` box overflowed); the journey's click waited 90 s, the `dead-control` gave 0 findings (it
|
|
13
|
+
* does not press `a[href]`).
|
|
14
|
+
*/
|
|
15
|
+
class DyE2E_CoveredControl_Detector {
|
|
16
|
+
id = 'covered-control';
|
|
17
|
+
errorClass = 'control-covered-by-other-element';
|
|
18
|
+
description = 'A visible, enabled control whose centre is owned by another element.';
|
|
19
|
+
origin = {
|
|
20
|
+
code: 'BFR-ADVENTOR-081', foundBy: 'adventor lane (CI journey + manual check)', date: '2026-10-20',
|
|
21
|
+
};
|
|
22
|
+
interactive = false;
|
|
23
|
+
notes = [];
|
|
24
|
+
async run(page, context) {
|
|
25
|
+
const max = (context.maxControls ?? ui_check_page_util_1.DyE2E_UICheckPage_Util.defaultMaxControls) * 3;
|
|
26
|
+
const measure = await ui_check_page_util_1.DyE2E_UICheckPage_Util.evaluate(page, ui_check_page_scripts_const_1.DyE2E_UICheckPageScripts_Const['coveredControls'], { max: max });
|
|
27
|
+
this.notes = measure.checked >= max
|
|
28
|
+
? [`only the first ${max} controls were checked (maxControls × 3)`]
|
|
29
|
+
: [];
|
|
30
|
+
return measure.covered.map((hit) => ({
|
|
31
|
+
detector: this.id,
|
|
32
|
+
errorClass: this.errorClass,
|
|
33
|
+
url: page.url() || context.url,
|
|
34
|
+
target: {
|
|
35
|
+
selector: hit.control.selector, tag: hit.control.tag, text: hit.control.text, testId: hit.control.testId,
|
|
36
|
+
ariaLabel: null,
|
|
37
|
+
},
|
|
38
|
+
measured: `"${hit.control.text || hit.control.testId || hit.control.selector}" is covered at its centre ` +
|
|
39
|
+
`(${hit.x}, ${hit.y}) by <${hit.cover.tag}${hit.cover.testId ? ` data-testid="${hit.cover.testId}"` : ''}` +
|
|
40
|
+
`${hit.cover.className ? ` class="${hit.cover.className}"` : ''}> (${hit.cover.selector}) — a click lands on ` +
|
|
41
|
+
'that element, not on the control.',
|
|
42
|
+
expected: 'The control is the top-most element at its own centre (nothing overlaps it).',
|
|
43
|
+
details: { ...hit },
|
|
44
|
+
}));
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
exports.DyE2E_CoveredControl_Detector = DyE2E_CoveredControl_Detector;
|
|
48
|
+
//# sourceMappingURL=covered-control.detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"covered-control.detector.js","sourceRoot":"","sources":["../../../../../src/_modules/ui-check/_collections/detectors/covered-control.detector.ts"],"names":[],"mappings":";;;AAKA,0FAA0F;AAC1F,8DAA+D;AAiB/D;;;;;;;;GAQG;AACH,MAAa,6BAA6B;IAE/B,EAAE,GAAW,iBAAiB,CAAC;IAC/B,UAAU,GAAW,kCAAkC,CAAC;IACxD,WAAW,GAAW,sEAAsE,CAAC;IAC7F,MAAM,GAAkC;QAC/C,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,2CAA2C,EAAE,IAAI,EAAE,YAAY;KACnG,CAAC;IACO,WAAW,GAAY,KAAK,CAAC;IACtC,KAAK,GAAa,EAAE,CAAC;IAErB,KAAK,CAAC,GAAG,CAAC,IAAU,EAAE,OAAuC;QAC3D,MAAM,GAAG,GAAW,CAAC,OAAO,CAAC,WAAW,IAAI,2CAAsB,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;QAC3F,MAAM,OAAO,GAA2C,MAAM,2CAAsB,CAAC,QAAQ,CAAC,IAAI,EAChG,4DAA8B,CAAC,iBAAiB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAEnE,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,OAAO,IAAI,GAAG;YACjC,CAAC,CAAC,CAAE,kBAAkB,GAAG,0CAA0C,CAAE;YACrE,CAAC,CAAC,EAAE,CAAC;QAEP,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAA8D,EACzD,EAAE,CAAC,CAAC;YACnC,QAAQ,EAAE,IAAI,CAAC,EAAE;YACjB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,OAAO,CAAC,GAAG;YAC9B,MAAM,EAAE;gBACN,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM;gBACxG,SAAS,EAAE,IAAI;aAChB;YACD,QAAQ,EAAE,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,6BAA6B;gBACvG,IAAI,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,SAAS,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,iBAAiB,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBAC1G,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,KAAK,CAAC,QAAQ,uBAAuB;gBAC9G,mCAAmC;YACrC,QAAQ,EAAE,8EAA8E;YACxF,OAAO,EAAE,EAAE,GAAG,GAAG,EAAE;SACpB,CAAC,CAAC,CAAC;IACN,CAAC;CACF;AArCD,sEAqCC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dead-control.detector.d.ts","sourceRoot":"","sources":["../../../../../src/_modules/ui-check/_collections/detectors/dead-control.detector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExC,OAAO,EAAE,8BAA8B,EAAE,MAAM,0CAA0C,CAAC;AAC1F,OAAO,EAAE,+BAA+B,EAAE,6BAA6B,EAAE,MAAM,2CAA2C,CAAC;AAC3H,OAAO,EAAE,8BAA8B,EAAE,MAAM,0CAA0C,CAAC;AAS1F;;;;;;;;;;GAUG;AACH,qBAAa,0BAA2B,YAAW,+BAA+B;IAEhF,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAkB;IACrC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAA4B;IACvD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAmE;IAC/F,QAAQ,CAAC,MAAM,EAAE,6BAA6B,CAE5C;IACF,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAQ;IACrC,KAAK,EAAE,MAAM,EAAE,CAAM;IAEf,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,8BAA8B,GAAG,OAAO,CAAC,8BAA8B,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"dead-control.detector.d.ts","sourceRoot":"","sources":["../../../../../src/_modules/ui-check/_collections/detectors/dead-control.detector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExC,OAAO,EAAE,8BAA8B,EAAE,MAAM,0CAA0C,CAAC;AAC1F,OAAO,EAAE,+BAA+B,EAAE,6BAA6B,EAAE,MAAM,2CAA2C,CAAC;AAC3H,OAAO,EAAE,8BAA8B,EAAE,MAAM,0CAA0C,CAAC;AAS1F;;;;;;;;;;GAUG;AACH,qBAAa,0BAA2B,YAAW,+BAA+B;IAEhF,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAkB;IACrC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAA4B;IACvD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAmE;IAC/F,QAAQ,CAAC,MAAM,EAAE,6BAA6B,CAE5C;IACF,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAQ;IACrC,KAAK,EAAE,MAAM,EAAE,CAAM;IAEf,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,8BAA8B,GAAG,OAAO,CAAC,8BAA8B,EAAE,CAAC;IAyEzG,qFAAqF;IACrF,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAO;IAExC;;;OAGG;YACW,cAAc;IAyB5B,+EAA+E;YACjE,SAAS;IAevB,iCAAiC;IACjC,OAAO,CAAC,KAAK;CAwCd"}
|
|
@@ -43,7 +43,14 @@ class DyE2E_DeadControl_Detector {
|
|
|
43
43
|
this.notes.push(`${listed.denied.length} control(s) not pressed (deny list): ` + listed.denied
|
|
44
44
|
.map((c) => `"${c.text || c.ariaLabel || c.testId}"`).join(', '));
|
|
45
45
|
}
|
|
46
|
-
|
|
46
|
+
// BFR-MASTERPROMPTER-125 1. — the tab of the page itself (`aria-current` / a selected tab) does nothing by design
|
|
47
|
+
const currentOnes = listed.controls.filter((c) => !!c.current);
|
|
48
|
+
if (currentOnes.length) {
|
|
49
|
+
this.notes.push(`${currentOnes.length} control(s) not pressed (they mark the current page / selected tab): ` +
|
|
50
|
+
currentOnes.map((c) => `"${c.text || c.ariaLabel || c.testId}"`)
|
|
51
|
+
.join(', '));
|
|
52
|
+
}
|
|
53
|
+
for (const control of listed.controls.filter((c) => !c.current)) {
|
|
47
54
|
await ui_check_page_util_1.DyE2E_UICheckPage_Util.reload(page, context, background);
|
|
48
55
|
// an earlier press may have changed the page for good (a stored choice) ⇒ find the control again by identity
|
|
49
56
|
const current = await this.findAgain(page, context, control);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dead-control.detector.js","sourceRoot":"","sources":["../../../../../src/_modules/ui-check/_collections/detectors/dead-control.detector.ts"],"names":[],"mappings":";;;AAKA,0FAA0F;AAC1F,gEAAsG;AACtG,8DAI+B;AAE/B;;;;;;;;;;GAUG;AACH,MAAa,0BAA0B;IAE5B,EAAE,GAAW,cAAc,CAAC;IAC5B,UAAU,GAAW,wBAAwB,CAAC;IAC9C,WAAW,GAAW,+DAA+D,CAAC;IACtF,MAAM,GAAkC;QAC/C,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,0BAA0B,EAAE,IAAI,EAAE,YAAY;KACjF,CAAC;IACO,WAAW,GAAY,IAAI,CAAC;IACrC,KAAK,GAAa,EAAE,CAAC;IAErB,KAAK,CAAC,GAAG,CAAC,IAAU,EAAE,OAAuC;QAC3D,MAAM,KAAK,GAAwC,MAAM,6CAAuB,CAAC,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACpH,MAAM,QAAQ,GAAqC,EAAE,CAAC;QACtD,gGAAgG;QAChG,MAAM,UAAU,GAAgB,IAAI,GAAG,EAAU,CAAC;QAElD,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC;YACH,MAAM,2CAAsB,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;YAC/D,gHAAgH;YAChH,uGAAuG;YACvG,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;gBACpB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,UAAU,CAAC,IAAI,8DAA8D;oBAC5G,0BAA0B,CAAE,GAAG,UAAU,CAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;YACpE,CAAC;YACD,MAAM,MAAM,GACV,MAAM,2CAAsB,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YAEpE,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBACzB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,uCAAuC,GAAG,MAAM,CAAC,MAAM;qBAC3F,GAAG,CAAC,CAAC,CAAiC,EAAU,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAC9G,CAAC;YACD,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"dead-control.detector.js","sourceRoot":"","sources":["../../../../../src/_modules/ui-check/_collections/detectors/dead-control.detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { Page } from '@playwright/test';
|
|
2
|
+
import { DyE2E_UICheckContext_Interface } from '../../_models/ui-check-context.interface';
|
|
3
|
+
import { DyE2E_UICheckDetector_Interface, DyE2E_UICheckOrigin_Interface } from '../../_models/ui-check-detector.interface';
|
|
4
|
+
import { DyE2E_UICheckFinding_Interface } from '../../_models/ui-check-finding.interface';
|
|
5
|
+
/**
|
|
6
|
+
* A SCROLL TRAP: an element that is a scroll container (`overflow-y: auto|scroll`) with
|
|
7
|
+
* `overscroll-behavior-y: contain` (or `none`), but does NOT scroll itself (its content is not bounded), while an
|
|
8
|
+
* ancestor (or the document) does — so the wheel over its content moves nothing: the element has nothing to scroll and
|
|
9
|
+
* the `contain` forbids handing the scroll on.
|
|
10
|
+
*
|
|
11
|
+
* Two layers: (1) STRUCTURAL — the candidates above; (2) BEHAVIOURAL — the wheel over each candidate's centre, and the
|
|
12
|
+
* scroll positions of the candidate, all its ancestors and the window before / after. Only a candidate where NOTHING
|
|
13
|
+
* moved is a finding (a browser that chains anyway is no trap). The positions are restored afterwards; nothing is
|
|
14
|
+
* pressed, so the detector is not interactive.
|
|
15
|
+
*
|
|
16
|
+
* Origin: `BFR-ORGANIZER-029` — owner, 2026-10-26 05:09: "nem lehet scrollozni"; measured by My Assistant Dev 1 on the
|
|
17
|
+
* Organizer TEST (`v01.16.219`): 25 wheel events on the task list ⇒ 0 px, desktop and mobile; the shared
|
|
18
|
+
* `app-a-pull-to-refresh` `.ptr-root` (`overflow-y: auto` + `overscroll-behavior-y: contain`, 5435 / 5435 px) inside a
|
|
19
|
+
* scrolling frame (5732 / 844 px). `nested-scroll` cannot see it: there the document does not scroll and the trap
|
|
20
|
+
* itself is not scrollable.
|
|
21
|
+
*/
|
|
22
|
+
export declare class DyE2E_ScrollTrap_Detector implements DyE2E_UICheckDetector_Interface {
|
|
23
|
+
readonly id: string;
|
|
24
|
+
readonly errorClass: string;
|
|
25
|
+
readonly description: string;
|
|
26
|
+
readonly origin: DyE2E_UICheckOrigin_Interface;
|
|
27
|
+
readonly interactive: boolean;
|
|
28
|
+
notes: string[];
|
|
29
|
+
/** At most this many candidates get the wheel test (a page with more is noted). */
|
|
30
|
+
static readonly maxCandidates: number;
|
|
31
|
+
/** One wheel step, px (well over one line, so a working chain always moves something). */
|
|
32
|
+
static readonly wheelPx: number;
|
|
33
|
+
/** The wait after the wheel (Playwright does not wait for the scroll to finish). */
|
|
34
|
+
static readonly wheelSettleMs: number;
|
|
35
|
+
run(page: Page, context: DyE2E_UICheckContext_Interface): Promise<DyE2E_UICheckFinding_Interface[]>;
|
|
36
|
+
/** Wheels over the candidate and returns how many px the candidate, its ancestors and the window moved together. */
|
|
37
|
+
private wheelMovedPx;
|
|
38
|
+
/** The finding of one trapped candidate. */
|
|
39
|
+
private toFinding;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=scroll-trap.detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scroll-trap.detector.d.ts","sourceRoot":"","sources":["../../../../../src/_modules/ui-check/_collections/detectors/scroll-trap.detector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExC,OAAO,EAAE,8BAA8B,EAAE,MAAM,0CAA0C,CAAC;AAC1F,OAAO,EAAE,+BAA+B,EAAE,6BAA6B,EAAE,MAAM,2CAA2C,CAAC;AAC3H,OAAO,EAAE,8BAA8B,EAAE,MAAM,0CAA0C,CAAC;AAmB1F;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,yBAA0B,YAAW,+BAA+B;IAE/E,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAiB;IACpC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAA0C;IACrE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAC8E;IAC1G,QAAQ,CAAC,MAAM,EAAE,6BAA6B,CAG5C;IACF,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAS;IACtC,KAAK,EAAE,MAAM,EAAE,CAAM;IAErB,mFAAmF;IACnF,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAM;IAE3C,0FAA0F;IAC1F,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAO;IAEtC,oFAAoF;IACpF,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAO;IAEtC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,8BAA8B,GAAG,OAAO,CAAC,8BAA8B,EAAE,CAAC;IAsBzG,oHAAoH;YACtG,YAAY;IAmB1B,4CAA4C;IAC5C,OAAO,CAAC,SAAS;CAsBlB"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DyE2E_ScrollTrap_Detector = void 0;
|
|
4
|
+
const ui_check_page_scripts_const_1 = require("../constants/ui-check-page-scripts.const");
|
|
5
|
+
const ui_check_page_util_1 = require("../ui-check-page.util");
|
|
6
|
+
/**
|
|
7
|
+
* A SCROLL TRAP: an element that is a scroll container (`overflow-y: auto|scroll`) with
|
|
8
|
+
* `overscroll-behavior-y: contain` (or `none`), but does NOT scroll itself (its content is not bounded), while an
|
|
9
|
+
* ancestor (or the document) does — so the wheel over its content moves nothing: the element has nothing to scroll and
|
|
10
|
+
* the `contain` forbids handing the scroll on.
|
|
11
|
+
*
|
|
12
|
+
* Two layers: (1) STRUCTURAL — the candidates above; (2) BEHAVIOURAL — the wheel over each candidate's centre, and the
|
|
13
|
+
* scroll positions of the candidate, all its ancestors and the window before / after. Only a candidate where NOTHING
|
|
14
|
+
* moved is a finding (a browser that chains anyway is no trap). The positions are restored afterwards; nothing is
|
|
15
|
+
* pressed, so the detector is not interactive.
|
|
16
|
+
*
|
|
17
|
+
* Origin: `BFR-ORGANIZER-029` — owner, 2026-10-26 05:09: "nem lehet scrollozni"; measured by My Assistant Dev 1 on the
|
|
18
|
+
* Organizer TEST (`v01.16.219`): 25 wheel events on the task list ⇒ 0 px, desktop and mobile; the shared
|
|
19
|
+
* `app-a-pull-to-refresh` `.ptr-root` (`overflow-y: auto` + `overscroll-behavior-y: contain`, 5435 / 5435 px) inside a
|
|
20
|
+
* scrolling frame (5732 / 844 px). `nested-scroll` cannot see it: there the document does not scroll and the trap
|
|
21
|
+
* itself is not scrollable.
|
|
22
|
+
*/
|
|
23
|
+
class DyE2E_ScrollTrap_Detector {
|
|
24
|
+
id = 'scroll-trap';
|
|
25
|
+
errorClass = 'scroll-trapped-by-overscroll-contain';
|
|
26
|
+
description = 'A non-scrolling overscroll-contain container inside a scrolling one: the wheel over it moves nothing.';
|
|
27
|
+
origin = {
|
|
28
|
+
code: 'BFR-ORGANIZER-029', foundBy: 'owner 2026-10-26, measured by My Assistant Dev 1 (Organizer TEST)',
|
|
29
|
+
date: '2026-10-26',
|
|
30
|
+
};
|
|
31
|
+
interactive = false;
|
|
32
|
+
notes = [];
|
|
33
|
+
/** At most this many candidates get the wheel test (a page with more is noted). */
|
|
34
|
+
static maxCandidates = 10;
|
|
35
|
+
/** One wheel step, px (well over one line, so a working chain always moves something). */
|
|
36
|
+
static wheelPx = 600;
|
|
37
|
+
/** The wait after the wheel (Playwright does not wait for the scroll to finish). */
|
|
38
|
+
static wheelSettleMs = 300;
|
|
39
|
+
async run(page, context) {
|
|
40
|
+
const candidates = await ui_check_page_util_1.DyE2E_UICheckPage_Util.evaluate(page, ui_check_page_scripts_const_1.DyE2E_UICheckPageScripts_Const['scrollTraps'], { max: DyE2E_ScrollTrap_Detector.maxCandidates + 1 });
|
|
41
|
+
const findings = [];
|
|
42
|
+
this.notes = candidates.length > DyE2E_ScrollTrap_Detector.maxCandidates
|
|
43
|
+
? [`scroll-trap: more than ${DyE2E_ScrollTrap_Detector.maxCandidates} candidates — only the first ` +
|
|
44
|
+
`${DyE2E_ScrollTrap_Detector.maxCandidates} were wheel-tested`]
|
|
45
|
+
: [];
|
|
46
|
+
// the behavioural layer: the wheel over each candidate — a finding only where nothing moved
|
|
47
|
+
for (const candidate of candidates.slice(0, DyE2E_ScrollTrap_Detector.maxCandidates)) {
|
|
48
|
+
const movedPx = await this.wheelMovedPx(page, candidate);
|
|
49
|
+
if (!movedPx) {
|
|
50
|
+
findings.push(this.toFinding({ page: page, context: context, candidate: candidate }));
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return findings;
|
|
54
|
+
}
|
|
55
|
+
/** Wheels over the candidate and returns how many px the candidate, its ancestors and the window moved together. */
|
|
56
|
+
async wheelMovedPx(page, candidate) {
|
|
57
|
+
const before = await ui_check_page_util_1.DyE2E_UICheckPage_Util.evaluate(page, ui_check_page_scripts_const_1.DyE2E_UICheckPageScripts_Const['scrollChain'], candidate.selector);
|
|
58
|
+
await page.mouse.move(candidate.x, candidate.y);
|
|
59
|
+
await page.mouse.wheel(0, DyE2E_ScrollTrap_Detector.wheelPx);
|
|
60
|
+
await page.waitForTimeout(DyE2E_ScrollTrap_Detector.wheelSettleMs);
|
|
61
|
+
const after = await ui_check_page_util_1.DyE2E_UICheckPage_Util.evaluate(page, ui_check_page_scripts_const_1.DyE2E_UICheckPageScripts_Const['scrollChain'], candidate.selector);
|
|
62
|
+
// the page is left as it was found
|
|
63
|
+
await ui_check_page_util_1.DyE2E_UICheckPage_Util.evaluate(page, ui_check_page_scripts_const_1.DyE2E_UICheckPageScripts_Const['restoreScrollChain'], { selector: candidate.selector, positions: before });
|
|
64
|
+
return after.reduce((sum, position, index) => sum + Math.abs(position - (before[index] ?? 0)), 0);
|
|
65
|
+
}
|
|
66
|
+
/** The finding of one trapped candidate. */
|
|
67
|
+
toFinding(set) {
|
|
68
|
+
const candidate = set.candidate;
|
|
69
|
+
return {
|
|
70
|
+
detector: this.id,
|
|
71
|
+
errorClass: this.errorClass,
|
|
72
|
+
url: set.page.url() || set.context.url,
|
|
73
|
+
target: { selector: candidate.selector, tag: candidate.tag, text: candidate.className, testId: null,
|
|
74
|
+
ariaLabel: null },
|
|
75
|
+
measured: `"${candidate.selector}" has overscroll-behavior-y: ${candidate.overscroll} but does not scroll ` +
|
|
76
|
+
`(${candidate.scrollHeight} / ${candidate.clientHeight} px), while "${candidate.scroller.selector}" does ` +
|
|
77
|
+
`(${candidate.scroller.scrollHeight} / ${candidate.scroller.clientHeight} px); a ` +
|
|
78
|
+
`${DyE2E_ScrollTrap_Detector.wheelPx} px wheel over it moved 0 px.`,
|
|
79
|
+
expected: 'The wheel over the content scrolls the page: the overscroll containment only on the element that ' +
|
|
80
|
+
'owns the scroll (a bounded height), or no containment at all.',
|
|
81
|
+
details: { ...candidate, wheelPx: DyE2E_ScrollTrap_Detector.wheelPx, movedPx: 0 },
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
exports.DyE2E_ScrollTrap_Detector = DyE2E_ScrollTrap_Detector;
|
|
86
|
+
//# sourceMappingURL=scroll-trap.detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scroll-trap.detector.js","sourceRoot":"","sources":["../../../../../src/_modules/ui-check/_collections/detectors/scroll-trap.detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,7 +14,14 @@ export declare const DyE2E_UICheckDefaultDetectors_Const: readonly DyE2E_UICheck
|
|
|
14
14
|
* - `nested-scroll`: fires on the real defect (`BL-QA-FDPUI-003`, MP TEST 2026-10-20), the "silent after the fix" half
|
|
15
15
|
* waits for the fix;
|
|
16
16
|
* - `non-toggling-control`: the owner's checkbox defect could not be reproduced on 2026-10-20 (MP + Adventor TEST,
|
|
17
|
-
* desktop + mobile, five close paths) — the exact place is needed from the human who saw it
|
|
17
|
+
* desktop + mobile, five close paths) — the exact place is needed from the human who saw it;
|
|
18
|
+
* - `covered-control` (BFR-ADVENTOR-081): fires on a fixture of the measured defect (a footer over a link) and stays
|
|
19
|
+
* silent on the fixed layout; the real page (Adventor TEST 853) is fixed already, so the live proof is the
|
|
20
|
+
* "silent now" half only.
|
|
21
|
+
* - `scroll-trap` (BFR-ORGANIZER-029): fires on a fixture of the measured defect (a non-scrolling
|
|
22
|
+
* `overscroll-behavior-y: contain` box inside a scrolling frame: the wheel moves 0 px) and stays silent on the
|
|
23
|
+
* fixed layouts; the real page (Organizer TEST task list) was fixed in the project, so the live proof is the
|
|
24
|
+
* "silent now" half only.
|
|
18
25
|
*/
|
|
19
26
|
export declare const DyE2E_UICheckCandidateDetectors_Const: readonly DyE2E_UICheckDetector_Interface[];
|
|
20
27
|
//# sourceMappingURL=ui-check-default-detectors.const.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui-check-default-detectors.const.d.ts","sourceRoot":"","sources":["../../../../src/_modules/ui-check/_collections/ui-check-default-detectors.const.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,+BAA+B,EAAE,MAAM,wCAAwC,CAAC;
|
|
1
|
+
{"version":3,"file":"ui-check-default-detectors.const.d.ts","sourceRoot":"","sources":["../../../../src/_modules/ui-check/_collections/ui-check-default-detectors.const.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,+BAA+B,EAAE,MAAM,wCAAwC,CAAC;AAOzF;;;;;;GAMG;AACH,eAAO,MAAM,mCAAmC,EAAE,SAAS,+BAA+B,EAEzF,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,qCAAqC,EAAE,SAAS,+BAA+B,EAK3F,CAAC"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DyE2E_UICheckCandidateDetectors_Const = exports.DyE2E_UICheckDefaultDetectors_Const = void 0;
|
|
4
|
+
const covered_control_detector_1 = require("./detectors/covered-control.detector");
|
|
4
5
|
const dead_control_detector_1 = require("./detectors/dead-control.detector");
|
|
5
6
|
const nested_scroll_detector_1 = require("./detectors/nested-scroll.detector");
|
|
6
7
|
const non_toggling_control_detector_1 = require("./detectors/non-toggling-control.detector");
|
|
8
|
+
const scroll_trap_detector_1 = require("./detectors/scroll-trap.detector");
|
|
7
9
|
/**
|
|
8
10
|
* The DEFAULT, growing UI detector list (BFR-FLEET-012) — every page, form and feature gets all of them.
|
|
9
11
|
*
|
|
@@ -21,10 +23,19 @@ exports.DyE2E_UICheckDefaultDetectors_Const = [
|
|
|
21
23
|
* - `nested-scroll`: fires on the real defect (`BL-QA-FDPUI-003`, MP TEST 2026-10-20), the "silent after the fix" half
|
|
22
24
|
* waits for the fix;
|
|
23
25
|
* - `non-toggling-control`: the owner's checkbox defect could not be reproduced on 2026-10-20 (MP + Adventor TEST,
|
|
24
|
-
* desktop + mobile, five close paths) — the exact place is needed from the human who saw it
|
|
26
|
+
* desktop + mobile, five close paths) — the exact place is needed from the human who saw it;
|
|
27
|
+
* - `covered-control` (BFR-ADVENTOR-081): fires on a fixture of the measured defect (a footer over a link) and stays
|
|
28
|
+
* silent on the fixed layout; the real page (Adventor TEST 853) is fixed already, so the live proof is the
|
|
29
|
+
* "silent now" half only.
|
|
30
|
+
* - `scroll-trap` (BFR-ORGANIZER-029): fires on a fixture of the measured defect (a non-scrolling
|
|
31
|
+
* `overscroll-behavior-y: contain` box inside a scrolling frame: the wheel moves 0 px) and stays silent on the
|
|
32
|
+
* fixed layouts; the real page (Organizer TEST task list) was fixed in the project, so the live proof is the
|
|
33
|
+
* "silent now" half only.
|
|
25
34
|
*/
|
|
26
35
|
exports.DyE2E_UICheckCandidateDetectors_Const = [
|
|
27
36
|
new nested_scroll_detector_1.DyE2E_NestedScroll_Detector(),
|
|
28
37
|
new non_toggling_control_detector_1.DyE2E_NonTogglingControl_Detector(),
|
|
38
|
+
new covered_control_detector_1.DyE2E_CoveredControl_Detector(),
|
|
39
|
+
new scroll_trap_detector_1.DyE2E_ScrollTrap_Detector(),
|
|
29
40
|
];
|
|
30
41
|
//# sourceMappingURL=ui-check-default-detectors.const.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui-check-default-detectors.const.js","sourceRoot":"","sources":["../../../../src/_modules/ui-check/_collections/ui-check-default-detectors.const.ts"],"names":[],"mappings":";;;AACA,6EAA+E;AAC/E,+EAAiF;AACjF,6FAA8F;
|
|
1
|
+
{"version":3,"file":"ui-check-default-detectors.const.js","sourceRoot":"","sources":["../../../../src/_modules/ui-check/_collections/ui-check-default-detectors.const.ts"],"names":[],"mappings":";;;AACA,mFAAqF;AACrF,6EAA+E;AAC/E,+EAAiF;AACjF,6FAA8F;AAC9F,2EAA6E;AAE7E;;;;;;GAMG;AACU,QAAA,mCAAmC,GAA+C;IAC7F,IAAI,kDAA0B,EAAE;CACjC,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACU,QAAA,qCAAqC,GAA+C;IAC/F,IAAI,oDAA2B,EAAE;IACjC,IAAI,iEAAiC,EAAE;IACvC,IAAI,wDAA6B,EAAE;IACnC,IAAI,gDAAyB,EAAE;CAChC,CAAC"}
|
|
@@ -6,6 +6,11 @@ import { DyE2E_UICheckNetworkGuard_Interface } from './ui-check-guard.util';
|
|
|
6
6
|
export interface DyE2E_UICheckControl_Interface extends DyE2E_UICheckTarget_Interface {
|
|
7
7
|
title: string;
|
|
8
8
|
destructive: boolean;
|
|
9
|
+
/**
|
|
10
|
+
* BFR-MASTERPROMPTER-125 1. — the control marks the CURRENT page / the selected tab (`aria-current`, or a
|
|
11
|
+
* `role="tab"` with `aria-selected="true"`): pressing it again is deliberately inert.
|
|
12
|
+
*/
|
|
13
|
+
current?: boolean;
|
|
9
14
|
}
|
|
10
15
|
/** Everything a press caused (or failed to cause). */
|
|
11
16
|
export interface DyE2E_UICheckPressEffect_Interface {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui-check-page.util.d.ts","sourceRoot":"","sources":["../../../../src/_modules/ui-check/_collections/ui-check-page.util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAE1D,OAAO,EAAE,8BAA8B,EAAE,MAAM,uCAAuC,CAAC;AACvF,OAAO,EAAE,6BAA6B,EAAE,MAAM,uCAAuC,CAAC;AAEtF,OAAO,EAA2B,mCAAmC,EAAE,MAAM,uBAAuB,CAAC;AAErG,wDAAwD;AACxD,MAAM,WAAW,8BAA+B,SAAQ,6BAA6B;IACnF,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"ui-check-page.util.d.ts","sourceRoot":"","sources":["../../../../src/_modules/ui-check/_collections/ui-check-page.util.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui-check-page.util.js","sourceRoot":"","sources":["../../../../src/_modules/ui-check/_collections/ui-check-page.util.ts"],"names":[],"mappings":";;;AAIA,yFAAyF;AACzF,+DAAqG;
|
|
1
|
+
{"version":3,"file":"ui-check-page.util.js","sourceRoot":"","sources":["../../../../src/_modules/ui-check/_collections/ui-check-page.util.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,9 +13,11 @@
|
|
|
13
13
|
* ```
|
|
14
14
|
*/
|
|
15
15
|
export * from './_collections/constants/ui-check-page-scripts.const';
|
|
16
|
+
export * from './_collections/detectors/covered-control.detector';
|
|
16
17
|
export * from './_collections/detectors/dead-control.detector';
|
|
17
18
|
export * from './_collections/detectors/nested-scroll.detector';
|
|
18
19
|
export * from './_collections/detectors/non-toggling-control.detector';
|
|
20
|
+
export * from './_collections/detectors/scroll-trap.detector';
|
|
19
21
|
export * from './_collections/ui-check-default-detectors.const';
|
|
20
22
|
export * from './_collections/ui-check-guard.util';
|
|
21
23
|
export * from './_collections/ui-check-page.util';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/_modules/ui-check/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,cAAc,sDAAsD,CAAC;AACrE,cAAc,gDAAgD,CAAC;AAC/D,cAAc,iDAAiD,CAAC;AAChE,cAAc,wDAAwD,CAAC;AACvE,cAAc,iDAAiD,CAAC;AAChE,cAAc,oCAAoC,CAAC;AACnD,cAAc,mCAAmC,CAAC;AAClD,cAAc,qCAAqC,CAAC;AACpD,cAAc,sCAAsC,CAAC;AACrD,cAAc,uCAAuC,CAAC;AACtD,cAAc,sCAAsC,CAAC;AACrD,cAAc,qCAAqC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/_modules/ui-check/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,cAAc,sDAAsD,CAAC;AACrE,cAAc,mDAAmD,CAAC;AAClE,cAAc,gDAAgD,CAAC;AAC/D,cAAc,iDAAiD,CAAC;AAChE,cAAc,wDAAwD,CAAC;AACvE,cAAc,+CAA+C,CAAC;AAC9D,cAAc,iDAAiD,CAAC;AAChE,cAAc,oCAAoC,CAAC;AACnD,cAAc,mCAAmC,CAAC;AAClD,cAAc,qCAAqC,CAAC;AACpD,cAAc,sCAAsC,CAAC;AACrD,cAAc,uCAAuC,CAAC;AACtD,cAAc,sCAAsC,CAAC;AACrD,cAAc,qCAAqC,CAAC"}
|
|
@@ -29,9 +29,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
29
29
|
* ```
|
|
30
30
|
*/
|
|
31
31
|
__exportStar(require("./_collections/constants/ui-check-page-scripts.const"), exports);
|
|
32
|
+
__exportStar(require("./_collections/detectors/covered-control.detector"), exports);
|
|
32
33
|
__exportStar(require("./_collections/detectors/dead-control.detector"), exports);
|
|
33
34
|
__exportStar(require("./_collections/detectors/nested-scroll.detector"), exports);
|
|
34
35
|
__exportStar(require("./_collections/detectors/non-toggling-control.detector"), exports);
|
|
36
|
+
__exportStar(require("./_collections/detectors/scroll-trap.detector"), exports);
|
|
35
37
|
__exportStar(require("./_collections/ui-check-default-detectors.const"), exports);
|
|
36
38
|
__exportStar(require("./_collections/ui-check-guard.util"), exports);
|
|
37
39
|
__exportStar(require("./_collections/ui-check-page.util"), exports);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/_modules/ui-check/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;;;GAaG;AACH,uFAAqE;AACrE,iFAA+D;AAC/D,kFAAgE;AAChE,yFAAuE;AACvE,kFAAgE;AAChE,qEAAmD;AACnD,oEAAkD;AAClD,sEAAoD;AACpD,uEAAqD;AACrD,wEAAsD;AACtD,uEAAqD;AACrD,sEAAoD"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/_modules/ui-check/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;;;GAaG;AACH,uFAAqE;AACrE,oFAAkE;AAClE,iFAA+D;AAC/D,kFAAgE;AAChE,yFAAuE;AACvE,gFAA8D;AAC9D,kFAAgE;AAChE,qEAAmD;AACnD,oEAAkD;AAClD,sEAAoD;AACpD,uEAAqD;AACrD,wEAAsD;AACtD,uEAAqD;AACrD,sEAAoD"}
|
package/build/index.js
CHANGED
|
@@ -26,5 +26,5 @@ __exportStar(require("./_modules/game/index"), exports);
|
|
|
26
26
|
__exportStar(require("./_modules/ui-check/index"), exports);
|
|
27
27
|
__exportStar(require("./_modules/coverage/index"), exports);
|
|
28
28
|
/** Package-version stamp — npm-publish-time runtime-érték. */
|
|
29
|
-
exports.DYE2E_PACKAGE_VERSION = '01.18.
|
|
29
|
+
exports.DYE2E_PACKAGE_VERSION = '01.18.33';
|
|
30
30
|
//# sourceMappingURL=index.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@futdevpro/dynamo-e2e",
|
|
3
|
-
"version": "01.18.
|
|
3
|
+
"version": "01.18.33",
|
|
4
4
|
"description": "End-to-end testing engine for the Dynamo + FDP ecosystem — auto-generated form-coverage tests, viewport audit matrix, CWV diagnostics. Settings-POJO-first.",
|
|
5
5
|
"DyBu_settings": {
|
|
6
6
|
"packageType": "core-package",
|