@thinkwise/testwise 0.2.21 → 0.2.67
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/Testwise.ts +2 -0
- package/artifact-builder/SelectorBuilder.ts +2 -2
- package/artifact-builder/SubjectComponentGenerator.ts +21 -12
- package/artifact-builder/SubjectGenerator.ts +20 -6
- package/components/action-bar/ActionBar.ts +7 -7
- package/components/action-bar/CustomActionBar.ts +0 -5
- package/components/cardlist/Cardlist.ts +3 -3
- package/components/chart/Chart.ts +3 -3
- package/components/combined-filter/CombinedFilter.ts +3 -3
- package/components/cube-view-bar/CubeViewBar.ts +3 -3
- package/components/filter/ExcelStyleFilterPopup.ts +69 -0
- package/components/filter/ExcelStyleFilterPopupObjects.ts +46 -0
- package/components/filter/FilterForm.ts +3 -3
- package/components/filter/FilterPopup.ts +187 -0
- package/components/filter/FilterPopupObjects.ts +63 -0
- package/components/filter/ManagePrefilterPopup.ts +44 -0
- package/components/filter/ManagePrefilterPopupObjects.ts +28 -0
- package/components/form/Form.ts +3 -3
- package/components/grid/Grid.ts +48 -133
- package/components/grid/GridObjects.ts +0 -19
- package/components/index.ts +4 -0
- package/components/maps/Maps.ts +3 -3
- package/components/menu/ListBarMenuComponent.ts +11 -0
- package/components/menu/ListBarMenuComponentObjects.ts +6 -0
- package/components/pivot-grid/PivotGrid.ts +3 -3
- package/components/pivot-grid/PivotGridFieldList.ts +3 -3
- package/components/pop-up/AllRowsPopUp.ts +29 -0
- package/components/pop-up/AllRowsPopUpObjects.ts +22 -0
- package/components/prefilter-list/PrefilterList.ts +3 -3
- package/components/preview/Preview.ts +3 -3
- package/components/report-bar/ReportBar.ts +3 -3
- package/components/report-tiles/ReportTiles.ts +3 -3
- package/components/scheduler/Scheduler.ts +3 -3
- package/components/splitter/Splitter.ts +3 -3
- package/components/tab/BaseTab.ts +3 -3
- package/components/tab/DetailTabPage.ts +4 -4
- package/components/tab/Tab.ts +4 -4
- package/components/task/TaskBar.ts +3 -3
- package/components/task/TaskTiles.ts +3 -3
- package/components/topbar/TopBar.ts +2 -0
- package/components/tree-view/TreeView.ts +3 -3
- package/controls/DateControl.ts +13 -14
- package/controls/DateControlObjects.ts +15 -0
- package/controls/FormComboBox.ts +17 -30
- package/controls/FormComboBoxObjects.ts +27 -0
- package/controls/GridColumnControl.ts +68 -0
- package/controls/GridColumnControlObjects.ts +20 -0
- package/controls/InputFieldControl.ts +17 -20
- package/controls/InputFieldControlObjects.ts +19 -0
- package/controls/LookupDropdown.ts +65 -24
- package/controls/LookupDropdownObjects.ts +19 -0
- package/controls/index.ts +1 -0
- package/dist/Testwise.d.ts +1 -0
- package/dist/Testwise.js +1 -0
- package/dist/Testwise.js.map +1 -1
- package/dist/artifact-builder/SelectorBuilder.d.ts +1 -1
- package/dist/artifact-builder/SelectorBuilder.js +2 -2
- package/dist/artifact-builder/SelectorBuilder.js.map +1 -1
- package/dist/artifact-builder/SubjectComponentGenerator.js +18 -12
- package/dist/artifact-builder/SubjectComponentGenerator.js.map +1 -1
- package/dist/artifact-builder/SubjectGenerator.d.ts +1 -0
- package/dist/artifact-builder/SubjectGenerator.js +16 -6
- package/dist/artifact-builder/SubjectGenerator.js.map +1 -1
- package/dist/components/action-bar/ActionBar.d.ts +2 -2
- package/dist/components/action-bar/ActionBar.js +7 -7
- package/dist/components/action-bar/ActionBar.js.map +1 -1
- package/dist/components/action-bar/CustomActionBar.d.ts +0 -2
- package/dist/components/action-bar/CustomActionBar.js +0 -3
- package/dist/components/action-bar/CustomActionBar.js.map +1 -1
- package/dist/components/cardlist/Cardlist.d.ts +2 -2
- package/dist/components/cardlist/Cardlist.js +2 -2
- package/dist/components/cardlist/Cardlist.js.map +1 -1
- package/dist/components/chart/Chart.d.ts +2 -2
- package/dist/components/chart/Chart.js +2 -2
- package/dist/components/chart/Chart.js.map +1 -1
- package/dist/components/combined-filter/CombinedFilter.d.ts +2 -2
- package/dist/components/combined-filter/CombinedFilter.js +2 -2
- package/dist/components/combined-filter/CombinedFilter.js.map +1 -1
- package/dist/components/cube-view-bar/CubeViewBar.d.ts +2 -2
- package/dist/components/cube-view-bar/CubeViewBar.js +2 -2
- package/dist/components/cube-view-bar/CubeViewBar.js.map +1 -1
- package/dist/components/filter/ExcelStyleFilterPopup.d.ts +19 -0
- package/dist/components/filter/ExcelStyleFilterPopup.js +64 -0
- package/dist/components/filter/ExcelStyleFilterPopup.js.map +1 -0
- package/dist/components/filter/ExcelStyleFilterPopupObjects.d.ts +16 -0
- package/dist/components/filter/ExcelStyleFilterPopupObjects.js +26 -0
- package/dist/components/filter/ExcelStyleFilterPopupObjects.js.map +1 -0
- package/dist/components/filter/FilterForm.d.ts +2 -2
- package/dist/components/filter/FilterForm.js +2 -2
- package/dist/components/filter/FilterForm.js.map +1 -1
- package/dist/components/filter/FilterPopup.d.ts +41 -0
- package/dist/components/filter/FilterPopup.js +126 -0
- package/dist/components/filter/FilterPopup.js.map +1 -0
- package/dist/components/filter/FilterPopupObjects.d.ts +29 -0
- package/dist/components/filter/FilterPopupObjects.js +30 -0
- package/dist/components/filter/FilterPopupObjects.js.map +1 -0
- package/dist/components/filter/ManagePrefilterPopup.d.ts +14 -0
- package/dist/components/filter/ManagePrefilterPopup.js +33 -0
- package/dist/components/filter/ManagePrefilterPopup.js.map +1 -0
- package/dist/components/filter/ManagePrefilterPopupObjects.d.ts +11 -0
- package/dist/components/filter/ManagePrefilterPopupObjects.js +19 -0
- package/dist/components/filter/ManagePrefilterPopupObjects.js.map +1 -0
- package/dist/components/form/Form.d.ts +2 -2
- package/dist/components/form/Form.js +2 -2
- package/dist/components/form/Form.js.map +1 -1
- package/dist/components/grid/Grid.d.ts +7 -37
- package/dist/components/grid/Grid.js +32 -127
- package/dist/components/grid/Grid.js.map +1 -1
- package/dist/components/grid/GridObjects.d.ts +0 -6
- package/dist/components/grid/GridObjects.js +0 -8
- package/dist/components/grid/GridObjects.js.map +1 -1
- package/dist/components/index.d.ts +4 -0
- package/dist/components/index.js +4 -0
- package/dist/components/index.js.map +1 -1
- package/dist/components/maps/Maps.d.ts +2 -2
- package/dist/components/maps/Maps.js +2 -2
- package/dist/components/maps/Maps.js.map +1 -1
- package/dist/components/menu/ListBarMenuComponent.d.ts +6 -0
- package/dist/components/menu/ListBarMenuComponent.js +10 -0
- package/dist/components/menu/ListBarMenuComponent.js.map +1 -1
- package/dist/components/menu/ListBarMenuComponentObjects.d.ts +2 -0
- package/dist/components/menu/ListBarMenuComponentObjects.js +2 -0
- package/dist/components/menu/ListBarMenuComponentObjects.js.map +1 -1
- package/dist/components/pivot-grid/PivotGrid.d.ts +2 -2
- package/dist/components/pivot-grid/PivotGrid.js +2 -2
- package/dist/components/pivot-grid/PivotGrid.js.map +1 -1
- package/dist/components/pivot-grid/PivotGridFieldList.d.ts +2 -2
- package/dist/components/pivot-grid/PivotGridFieldList.js +2 -2
- package/dist/components/pivot-grid/PivotGridFieldList.js.map +1 -1
- package/dist/components/pop-up/AllRowsPopUp.d.ts +12 -0
- package/dist/components/pop-up/AllRowsPopUp.js +19 -0
- package/dist/components/pop-up/AllRowsPopUp.js.map +1 -0
- package/dist/components/pop-up/AllRowsPopUpObjects.d.ts +11 -0
- package/dist/components/pop-up/AllRowsPopUpObjects.js +13 -0
- package/dist/components/pop-up/AllRowsPopUpObjects.js.map +1 -0
- package/dist/components/prefilter-list/PrefilterList.d.ts +2 -2
- package/dist/components/prefilter-list/PrefilterList.js +2 -2
- package/dist/components/prefilter-list/PrefilterList.js.map +1 -1
- package/dist/components/preview/Preview.d.ts +2 -2
- package/dist/components/preview/Preview.js +2 -2
- package/dist/components/preview/Preview.js.map +1 -1
- package/dist/components/report-bar/ReportBar.d.ts +2 -2
- package/dist/components/report-bar/ReportBar.js +2 -2
- package/dist/components/report-bar/ReportBar.js.map +1 -1
- package/dist/components/report-tiles/ReportTiles.d.ts +2 -2
- package/dist/components/report-tiles/ReportTiles.js +2 -2
- package/dist/components/report-tiles/ReportTiles.js.map +1 -1
- package/dist/components/scheduler/Scheduler.d.ts +2 -2
- package/dist/components/scheduler/Scheduler.js +2 -2
- package/dist/components/scheduler/Scheduler.js.map +1 -1
- package/dist/components/splitter/Splitter.d.ts +2 -2
- package/dist/components/splitter/Splitter.js +2 -2
- package/dist/components/splitter/Splitter.js.map +1 -1
- package/dist/components/tab/BaseTab.d.ts +2 -2
- package/dist/components/tab/BaseTab.js +2 -2
- package/dist/components/tab/BaseTab.js.map +1 -1
- package/dist/components/tab/DetailTabPage.d.ts +2 -2
- package/dist/components/tab/DetailTabPage.js +3 -3
- package/dist/components/tab/DetailTabPage.js.map +1 -1
- package/dist/components/tab/Tab.d.ts +2 -2
- package/dist/components/tab/Tab.js +3 -3
- package/dist/components/tab/Tab.js.map +1 -1
- package/dist/components/task/TaskBar.d.ts +2 -2
- package/dist/components/task/TaskBar.js +2 -2
- package/dist/components/task/TaskBar.js.map +1 -1
- package/dist/components/task/TaskTiles.d.ts +2 -2
- package/dist/components/task/TaskTiles.js +2 -2
- package/dist/components/task/TaskTiles.js.map +1 -1
- package/dist/components/topbar/TopBar.d.ts +1 -0
- package/dist/components/topbar/TopBar.js +1 -0
- package/dist/components/topbar/TopBar.js.map +1 -1
- package/dist/components/tree-view/TreeView.d.ts +2 -2
- package/dist/components/tree-view/TreeView.js +2 -2
- package/dist/components/tree-view/TreeView.js.map +1 -1
- package/dist/controls/DateControl.d.ts +4 -5
- package/dist/controls/DateControl.js +11 -11
- package/dist/controls/DateControl.js.map +1 -1
- package/dist/controls/DateControlObjects.d.ts +8 -0
- package/dist/controls/DateControlObjects.js +9 -0
- package/dist/controls/DateControlObjects.js.map +1 -0
- package/dist/controls/FormComboBox.d.ts +2 -2
- package/dist/controls/FormComboBox.js +15 -20
- package/dist/controls/FormComboBox.js.map +1 -1
- package/dist/controls/FormComboBoxObjects.d.ts +12 -0
- package/dist/controls/FormComboBoxObjects.js +16 -0
- package/dist/controls/FormComboBoxObjects.js.map +1 -0
- package/dist/controls/GridColumnControl.d.ts +10 -0
- package/dist/controls/GridColumnControl.js +43 -0
- package/dist/controls/GridColumnControl.js.map +1 -0
- package/dist/controls/GridColumnControlObjects.d.ts +9 -0
- package/dist/controls/GridColumnControlObjects.js +13 -0
- package/dist/controls/GridColumnControlObjects.js.map +1 -0
- package/dist/controls/InputFieldControl.d.ts +4 -6
- package/dist/controls/InputFieldControl.js +14 -15
- package/dist/controls/InputFieldControl.js.map +1 -1
- package/dist/controls/InputFieldControlObjects.d.ts +10 -0
- package/dist/controls/InputFieldControlObjects.js +11 -0
- package/dist/controls/InputFieldControlObjects.js.map +1 -0
- package/dist/controls/LookupDropdown.d.ts +6 -1
- package/dist/controls/LookupDropdown.js +51 -19
- package/dist/controls/LookupDropdown.js.map +1 -1
- package/dist/controls/LookupDropdownObjects.d.ts +10 -0
- package/dist/controls/LookupDropdownObjects.js +11 -0
- package/dist/controls/LookupDropdownObjects.js.map +1 -0
- package/dist/controls/index.d.ts +1 -0
- package/dist/controls/index.js +1 -0
- package/dist/controls/index.js.map +1 -1
- package/dist/enums/ElementTypes.d.ts +1 -1
- package/dist/enums/ElementTypes.js +1 -1
- package/dist/enums/ElementTypes.js.map +1 -1
- package/dist/helpers/FlightTracker.d.ts +7 -0
- package/dist/helpers/FlightTracker.js +63 -11
- package/dist/helpers/FlightTracker.js.map +1 -1
- package/dist/helpers/LoginHelper.d.ts +11 -3
- package/dist/helpers/LoginHelper.js +59 -13
- package/dist/helpers/LoginHelper.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/page-extensions/GlobalComponents.d.ts +2 -1
- package/dist/page-extensions/GlobalComponents.js +2 -1
- package/dist/page-extensions/GlobalComponents.js.map +1 -1
- package/dist/page-overrides/ClickOverride.d.ts +1 -0
- package/dist/page-overrides/ClickOverride.js +57 -46
- package/dist/page-overrides/ClickOverride.js.map +1 -1
- package/dist/types/Universal.d.ts +1 -0
- package/enums/ElementTypes.ts +1 -1
- package/helpers/FlightTracker.ts +71 -11
- package/helpers/LoginHelper.ts +79 -21
- package/index.ts +1 -1
- package/package.json +6 -5
- package/page-extensions/GlobalComponents.ts +3 -0
- package/page-overrides/ClickOverride.ts +69 -64
- package/types/Universal.ts +1 -0
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { Grid } from '../components/grid/Grid.js';
|
|
2
|
+
import { escapeRegex } from '../index.js';
|
|
3
|
+
import { GridColumnControlObjects } from './GridColumnControlObjects.js';
|
|
4
|
+
class GridColumnControl {
|
|
5
|
+
constructor(gridContext, id) {
|
|
6
|
+
this._id = id.replace(/-/g, '_');
|
|
7
|
+
this._objects = new GridColumnControlObjects(gridContext, this._id);
|
|
8
|
+
this._grid = new Grid(gridContext);
|
|
9
|
+
}
|
|
10
|
+
async openExcelStyleFilterPopup() {
|
|
11
|
+
await this._grid.openExcelStyleFilterPopup(this._id);
|
|
12
|
+
}
|
|
13
|
+
async getColumnHeader() {
|
|
14
|
+
return await this._objects.columnHeader();
|
|
15
|
+
}
|
|
16
|
+
getCellByExactValue(value) {
|
|
17
|
+
const valueToFindRegex = new RegExp(`^${escapeRegex(value)}$`);
|
|
18
|
+
return this._objects.cellByValue(valueToFindRegex);
|
|
19
|
+
}
|
|
20
|
+
async getCellValues() {
|
|
21
|
+
return await this._grid.getCellValuesByColId(this._id);
|
|
22
|
+
}
|
|
23
|
+
async filterByColumnValueExcelStyle(value, deselectAll) {
|
|
24
|
+
await this._grid.filterByColumnValueExcelStyle(this._objects.columnHeader(), value, deselectAll);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export function createGridColumnControl(gridContext, id) {
|
|
28
|
+
const columnControl = new GridColumnControl(gridContext, id);
|
|
29
|
+
const locator = gridContext.locator(`[col-id="${id}"]`);
|
|
30
|
+
return new Proxy(columnControl, {
|
|
31
|
+
get(target, prop, receiver) {
|
|
32
|
+
if (prop in target) {
|
|
33
|
+
return Reflect.get(target, prop, receiver);
|
|
34
|
+
}
|
|
35
|
+
const value = locator[prop];
|
|
36
|
+
if (typeof value === 'function') {
|
|
37
|
+
return value.bind(locator);
|
|
38
|
+
}
|
|
39
|
+
return value;
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=GridColumnControl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GridColumnControl.js","sourceRoot":"","sources":["../../controls/GridColumnControl.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAYzE,MAAM,iBAAiB;IAKrB,YAAY,WAAoB,EAAE,EAAU;QAC1C,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACjC,IAAI,CAAC,QAAQ,GAAG,IAAI,wBAAwB,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QACpE,IAAI,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC;IACrC,CAAC;IAEM,KAAK,CAAC,yBAAyB;QACpC,MAAM,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvD,CAAC;IAEM,KAAK,CAAC,eAAe;QAC1B,OAAO,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;IAC5C,CAAC;IAEM,mBAAmB,CAAC,KAAa;QACtC,MAAM,gBAAgB,GAAG,IAAI,MAAM,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/D,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;IACrD,CAAC;IAEM,KAAK,CAAC,aAAa;QACxB,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzD,CAAC;IAEM,KAAK,CAAC,6BAA6B,CAAC,KAAa,EAAE,WAAqB;QAC7E,MAAM,IAAI,CAAC,KAAK,CAAC,6BAA6B,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;IACnG,CAAC;CACF;AAED,MAAM,UAAU,uBAAuB,CAAC,WAAoB,EAAE,EAAU;IACtE,MAAM,aAAa,GAAG,IAAI,iBAAiB,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IAExD,OAAO,IAAI,KAAK,CAAC,aAAa,EAAE;QAC9B,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ;YACxB,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;gBACnB,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;YAC7C,CAAC;YAED,MAAM,KAAK,GAAI,OAAe,CAAC,IAAI,CAAC,CAAC;YACrC,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;gBAChC,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC7B,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;KACF,CAAkC,CAAC;AACtC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Locator } from '@playwright/test';
|
|
2
|
+
import { BaseComponentObjects } from '../components/BaseComponentObjects.js';
|
|
3
|
+
export declare class GridColumnControlObjects extends BaseComponentObjects {
|
|
4
|
+
private _id;
|
|
5
|
+
constructor(gridContext: Locator, columnId: string);
|
|
6
|
+
column: () => Locator;
|
|
7
|
+
columnHeader: () => Locator;
|
|
8
|
+
cellByValue: (value: RegExp) => Locator;
|
|
9
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { BaseComponentObjects } from '../components/BaseComponentObjects.js';
|
|
2
|
+
export class GridColumnControlObjects extends BaseComponentObjects {
|
|
3
|
+
constructor(gridContext, columnId) {
|
|
4
|
+
super(gridContext.page(), gridContext);
|
|
5
|
+
this.column = () => this.context.locator(`[col-id="${this._id}"]`);
|
|
6
|
+
this.columnHeader = () => this.context.locator(`[col-id="${this._id}"][role="columnheader"]`);
|
|
7
|
+
this.cellByValue = (value) => this.column().locator('[role="button"]', {
|
|
8
|
+
hasText: value
|
|
9
|
+
});
|
|
10
|
+
this._id = columnId;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=GridColumnControlObjects.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GridColumnControlObjects.js","sourceRoot":"","sources":["../../controls/GridColumnControlObjects.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAE7E,MAAM,OAAO,wBAAyB,SAAQ,oBAAoB;IAGhE,YAAY,WAAoB,EAAE,QAAgB;QAChD,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,WAAW,CAAC,CAAC;QAIlC,WAAM,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QAE9D,iBAAY,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,IAAI,CAAC,GAAG,yBAAyB,CAAC,CAAC;QAEzF,gBAAW,GAAG,CAAC,KAAa,EAAE,EAAE,CACrC,IAAI,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,iBAAiB,EAAE;YACvC,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;QAVH,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC;IACtB,CAAC;CAUF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/** biome-ignore-all lint/suspicious/noExplicitAny: reason42 */
|
|
2
|
-
import type { Locator
|
|
2
|
+
import type { Locator } from '@playwright/test';
|
|
3
3
|
export type IInputFieldControl = Locator & ICoreInputFieldControl;
|
|
4
4
|
export type ICoreInputFieldControl = {
|
|
5
5
|
getValidationMessage(): Promise<string>;
|
|
@@ -11,10 +11,8 @@ export type ICoreInputFieldControl = {
|
|
|
11
11
|
inputElement(): Locator;
|
|
12
12
|
};
|
|
13
13
|
export declare class InputFieldControl implements ICoreInputFieldControl {
|
|
14
|
-
private
|
|
15
|
-
|
|
16
|
-
private _id;
|
|
17
|
-
constructor(page: Page, id: string);
|
|
14
|
+
private _objects;
|
|
15
|
+
constructor(context: Locator, id: string);
|
|
18
16
|
getValidationMessage(): Promise<string>;
|
|
19
17
|
fill(value: string): Promise<void>;
|
|
20
18
|
click(): Promise<void>;
|
|
@@ -23,4 +21,4 @@ export declare class InputFieldControl implements ICoreInputFieldControl {
|
|
|
23
21
|
inputElement(): Locator;
|
|
24
22
|
getLabelText(): Promise<string>;
|
|
25
23
|
}
|
|
26
|
-
export declare function createInputFieldControl(
|
|
24
|
+
export declare function createInputFieldControl(context: Locator, id: string): IInputFieldControl;
|
|
@@ -1,37 +1,36 @@
|
|
|
1
|
+
import { InputFieldControlObjects } from './InputFieldControlObjects.js';
|
|
1
2
|
export class InputFieldControl {
|
|
2
|
-
constructor(
|
|
3
|
-
this.
|
|
4
|
-
this._formFieldLocator = page.getByTestId(`form-field__${id}`);
|
|
5
|
-
this._inputLocator = this._formFieldLocator.locator('input');
|
|
3
|
+
constructor(context, id) {
|
|
4
|
+
this._objects = new InputFieldControlObjects(context, id);
|
|
6
5
|
}
|
|
7
6
|
async getValidationMessage() {
|
|
8
|
-
await this.
|
|
9
|
-
return await this.
|
|
7
|
+
await this._objects.validationMessage().waitFor({ state: 'visible' });
|
|
8
|
+
return await this._objects.validationMessage().innerText();
|
|
10
9
|
}
|
|
11
10
|
async fill(value) {
|
|
12
|
-
await this.
|
|
11
|
+
await this._objects.fieldInput().fill(value);
|
|
13
12
|
}
|
|
14
13
|
async click() {
|
|
15
|
-
await this.
|
|
14
|
+
await this._objects.fieldInput().click();
|
|
16
15
|
}
|
|
17
16
|
async clear() {
|
|
18
|
-
await this.
|
|
17
|
+
await this._objects.fieldInput().fill('');
|
|
19
18
|
}
|
|
20
19
|
async inputValue() {
|
|
21
|
-
return await this.
|
|
20
|
+
return await this._objects.fieldInput().inputValue();
|
|
22
21
|
}
|
|
23
22
|
inputElement() {
|
|
24
|
-
return this.
|
|
23
|
+
return this._objects.fieldInput();
|
|
25
24
|
}
|
|
26
25
|
async getLabelText() {
|
|
27
|
-
let returnText = (await this.
|
|
26
|
+
let returnText = (await this._objects.fieldLabel().textContent()) || '';
|
|
28
27
|
returnText = returnText.replace(/\s+/g, ' ').trim();
|
|
29
28
|
return returnText;
|
|
30
29
|
}
|
|
31
30
|
}
|
|
32
|
-
export function createInputFieldControl(
|
|
33
|
-
const inputFieldControl = new InputFieldControl(
|
|
34
|
-
const locator =
|
|
31
|
+
export function createInputFieldControl(context, id) {
|
|
32
|
+
const inputFieldControl = new InputFieldControl(context, id);
|
|
33
|
+
const locator = context.getByTestId(`form-field__${id}`);
|
|
35
34
|
return new Proxy(inputFieldControl, {
|
|
36
35
|
get(target, prop, receiver) {
|
|
37
36
|
if (prop in target) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InputFieldControl.js","sourceRoot":"","sources":["../../controls/InputFieldControl.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"InputFieldControl.js","sourceRoot":"","sources":["../../controls/InputFieldControl.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAczE,MAAM,OAAO,iBAAiB;IAG5B,YAAY,OAAgB,EAAE,EAAU;QACtC,IAAI,CAAC,QAAQ,GAAG,IAAI,wBAAwB,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC5D,CAAC;IAEM,KAAK,CAAC,oBAAoB;QAC/B,MAAM,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QACtE,OAAO,MAAM,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,CAAC,SAAS,EAAE,CAAC;IAC7D,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,KAAa;QAC7B,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/C,CAAC;IAEM,KAAK,CAAC,KAAK;QAChB,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,CAAC;IAC3C,CAAC;IAEM,KAAK,CAAC,KAAK;QAChB,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC5C,CAAC;IAEM,KAAK,CAAC,UAAU;QACrB,OAAO,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,UAAU,EAAE,CAAC;IACvD,CAAC;IAEM,YAAY;QACjB,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;IACpC,CAAC;IAEM,KAAK,CAAC,YAAY;QACvB,IAAI,UAAU,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;QAExE,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QAEpD,OAAO,UAAU,CAAC;IACpB,CAAC;CACF;AAED,MAAM,UAAU,uBAAuB,CAAC,OAAgB,EAAE,EAAU;IAClE,MAAM,iBAAiB,GAAG,IAAI,iBAAiB,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;IAEzD,OAAO,IAAI,KAAK,CAAC,iBAAiB,EAAE;QAClC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ;YACxB,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;gBACnB,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;YAC7C,CAAC;YACD,MAAM,KAAK,GAAI,OAAe,CAAC,IAAI,CAAC,CAAC;YAErC,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;gBAChC,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC7B,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;KACF,CAAkC,CAAC;AACtC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Locator } from '@playwright/test';
|
|
2
|
+
export declare class InputFieldControlObjects {
|
|
3
|
+
private _context;
|
|
4
|
+
private _id;
|
|
5
|
+
constructor(context: Locator, id: string);
|
|
6
|
+
formField: () => Locator;
|
|
7
|
+
fieldInput: () => Locator;
|
|
8
|
+
fieldLabel: () => Locator;
|
|
9
|
+
validationMessage: () => Locator;
|
|
10
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export class InputFieldControlObjects {
|
|
2
|
+
constructor(context, id) {
|
|
3
|
+
this.formField = () => this._context.getByTestId(`form-field__${this._id}`);
|
|
4
|
+
this.fieldInput = () => this.formField().locator('input');
|
|
5
|
+
this.fieldLabel = () => this.formField().getByTestId(`form-field__${this._id}__label`);
|
|
6
|
+
this.validationMessage = () => this.formField().locator('.TooltipContainer p');
|
|
7
|
+
this._context = context;
|
|
8
|
+
this._id = id;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=InputFieldControlObjects.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InputFieldControlObjects.js","sourceRoot":"","sources":["../../controls/InputFieldControlObjects.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,wBAAwB;IAInC,YAAY,OAAgB,EAAE,EAAU;QAKjC,cAAS,GAAG,GAAY,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,eAAe,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QAEhF,eAAU,GAAG,GAAY,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAE9D,eAAU,GAAG,GAAY,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,WAAW,CAAC,eAAe,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;QAE3F,sBAAiB,GAAG,GAAY,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;QAVxF,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;IAChB,CAAC;CASF"}
|
|
@@ -4,5 +4,10 @@ export type ILookupDropdown = Locator & ILookupDropdownCore;
|
|
|
4
4
|
export type ILookupDropdownCore = {
|
|
5
5
|
lookupSelect(optionToSelect: string): Promise<void>;
|
|
6
6
|
selectOption(optionText: string): Promise<void>;
|
|
7
|
+
fill(value: string): Promise<void>;
|
|
8
|
+
getValidationMessage(): Promise<string>;
|
|
9
|
+
getLabelText(): Promise<string>;
|
|
10
|
+
inputValue(): Promise<string>;
|
|
11
|
+
clear(): Promise<void>;
|
|
7
12
|
};
|
|
8
|
-
export declare function createLookupDropdown(
|
|
13
|
+
export declare function createLookupDropdown(context: Locator, id: string): ILookupDropdown;
|
|
@@ -1,38 +1,70 @@
|
|
|
1
1
|
import { escapeRegex } from '../helpers/RegexHelper.js';
|
|
2
|
+
import { LookupDropdownObjects } from './LookupDropdownObjects.js';
|
|
2
3
|
class LookupDropdown {
|
|
3
|
-
constructor(
|
|
4
|
-
this.
|
|
4
|
+
constructor(context, id) {
|
|
5
|
+
this._objects = new LookupDropdownObjects(context, id);
|
|
6
|
+
}
|
|
7
|
+
async getLabelText() {
|
|
8
|
+
let returnText = (await this._objects.label().textContent()) || '';
|
|
9
|
+
returnText = returnText.replace(/\s+/g, ' ').trim();
|
|
10
|
+
return returnText;
|
|
5
11
|
}
|
|
6
12
|
async lookupSelect(optionToSelect) {
|
|
7
|
-
await
|
|
8
|
-
await this._locator.fill(optionToSelect);
|
|
9
|
-
await this._locator.page().waitEventHandler.setCanContinue(true);
|
|
13
|
+
await this._objects.input().fill(optionToSelect);
|
|
10
14
|
await this.select(optionToSelect);
|
|
11
15
|
}
|
|
16
|
+
async inputValue() {
|
|
17
|
+
return await this._objects.input().inputValue();
|
|
18
|
+
}
|
|
19
|
+
async clear() {
|
|
20
|
+
await this._objects.input().fill('');
|
|
21
|
+
}
|
|
12
22
|
async selectOption(optionText) {
|
|
13
|
-
await this.
|
|
23
|
+
await this._objects.input().click();
|
|
14
24
|
await this.select(optionText);
|
|
15
25
|
}
|
|
26
|
+
async getValidationMessage() {
|
|
27
|
+
await this._objects.validationMessage().waitFor({ state: 'visible' });
|
|
28
|
+
return await this._objects.validationMessage().innerText();
|
|
29
|
+
}
|
|
30
|
+
async fill(value) {
|
|
31
|
+
await Promise.all([
|
|
32
|
+
this._objects
|
|
33
|
+
.input()
|
|
34
|
+
.page()
|
|
35
|
+
.waitForResponse((response) => response.url().includes('/list_') && response.request().method() === 'GET'),
|
|
36
|
+
this._objects.input().click()
|
|
37
|
+
]);
|
|
38
|
+
await Promise.all([
|
|
39
|
+
this._objects
|
|
40
|
+
.input()
|
|
41
|
+
.page()
|
|
42
|
+
.waitForResponse((response) => response.url().includes('/list_') && response.request().method() === 'GET'),
|
|
43
|
+
this._objects.input().fill(value)
|
|
44
|
+
]);
|
|
45
|
+
}
|
|
16
46
|
async select(optionToSelect) {
|
|
17
47
|
const optionsToSelectRegex = new RegExp(`^${escapeRegex(optionToSelect)}$`, 'i');
|
|
18
|
-
await this.
|
|
19
|
-
await this.
|
|
48
|
+
await this._objects.input().page().getByTestId('autocomplete__menu').getByText(optionsToSelectRegex).click();
|
|
49
|
+
await this._objects
|
|
50
|
+
.input()
|
|
20
51
|
.page()
|
|
21
|
-
.waitForFunction((el) => document.activeElement === el, await this.
|
|
52
|
+
.waitForFunction((el) => document.activeElement === el, await this._objects.input().elementHandle());
|
|
22
53
|
}
|
|
23
54
|
}
|
|
24
|
-
export function createLookupDropdown(
|
|
25
|
-
const dropdown = new LookupDropdown(
|
|
26
|
-
|
|
55
|
+
export function createLookupDropdown(context, id) {
|
|
56
|
+
const dropdown = new LookupDropdown(context, id);
|
|
57
|
+
const customProps = new Set(Object.getOwnPropertyNames(LookupDropdown.prototype).filter((p) => p !== 'constructor'));
|
|
58
|
+
return new Proxy(context, {
|
|
27
59
|
get(target, prop, receiver) {
|
|
28
|
-
if (prop
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
return value
|
|
60
|
+
if (customProps.has(prop)) {
|
|
61
|
+
const value = dropdown[prop];
|
|
62
|
+
if (typeof value === 'function') {
|
|
63
|
+
return value.bind(dropdown);
|
|
64
|
+
}
|
|
65
|
+
return value;
|
|
34
66
|
}
|
|
35
|
-
return
|
|
67
|
+
return Reflect.get(target, prop, receiver);
|
|
36
68
|
}
|
|
37
69
|
});
|
|
38
70
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LookupDropdown.js","sourceRoot":"","sources":["../../controls/LookupDropdown.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"LookupDropdown.js","sourceRoot":"","sources":["../../controls/LookupDropdown.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Locator } from '@playwright/test';
|
|
2
|
+
export declare class LookupDropdownObjects {
|
|
3
|
+
private _id;
|
|
4
|
+
private _context;
|
|
5
|
+
constructor(context: Locator, id: string);
|
|
6
|
+
formField: () => Locator;
|
|
7
|
+
label: () => Locator;
|
|
8
|
+
input: () => Locator;
|
|
9
|
+
validationMessage: () => Locator;
|
|
10
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export class LookupDropdownObjects {
|
|
2
|
+
constructor(context, id) {
|
|
3
|
+
this.formField = () => this._context.getByTestId(`form-field__${this._id}`);
|
|
4
|
+
this.label = () => this.formField().getByTestId(`form-field__${this._id}__label`);
|
|
5
|
+
this.input = () => this.formField().locator('input');
|
|
6
|
+
this.validationMessage = () => this.formField().locator('.TooltipContainer p');
|
|
7
|
+
this._context = context;
|
|
8
|
+
this._id = id;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=LookupDropdownObjects.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LookupDropdownObjects.js","sourceRoot":"","sources":["../../controls/LookupDropdownObjects.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,qBAAqB;IAIhC,YAAY,OAAgB,EAAE,EAAU;QAKjC,cAAS,GAAG,GAAY,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,eAAe,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QAEhF,UAAK,GAAG,GAAY,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,WAAW,CAAC,eAAe,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;QAEtF,UAAK,GAAG,GAAY,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAEzD,sBAAiB,GAAG,GAAY,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;QAVxF,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;IAChB,CAAC;CASF"}
|
package/dist/controls/index.d.ts
CHANGED
package/dist/controls/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../controls/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../controls/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC"}
|
|
@@ -5,7 +5,7 @@ export var KnownElementTypes;
|
|
|
5
5
|
KnownElementTypes["Textarea"] = "textarea";
|
|
6
6
|
KnownElementTypes["Checkbox"] = "checkbox";
|
|
7
7
|
KnownElementTypes["Lookup"] = "lookup";
|
|
8
|
-
KnownElementTypes["Column"] = "
|
|
8
|
+
KnownElementTypes["Column"] = "column";
|
|
9
9
|
KnownElementTypes["ComboBox"] = "combo_box";
|
|
10
10
|
KnownElementTypes["DatePicker"] = "date_picker";
|
|
11
11
|
})(KnownElementTypes || (KnownElementTypes = {}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ElementTypes.js","sourceRoot":"","sources":["../../enums/ElementTypes.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,iBASX;AATD,WAAY,iBAAiB;IAC3B,oCAAe,CAAA;IACf,0CAAqB,CAAA;IACrB,0CAAqB,CAAA;IACrB,0CAAqB,CAAA;IACrB,sCAAiB,CAAA;IACjB,
|
|
1
|
+
{"version":3,"file":"ElementTypes.js","sourceRoot":"","sources":["../../enums/ElementTypes.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,iBASX;AATD,WAAY,iBAAiB;IAC3B,oCAAe,CAAA;IACf,0CAAqB,CAAA;IACrB,0CAAqB,CAAA;IACrB,0CAAqB,CAAA;IACrB,sCAAiB,CAAA;IACjB,sCAAiB,CAAA;IACjB,2CAAsB,CAAA;IACtB,+CAA0B,CAAA;AAC5B,CAAC,EATW,iBAAiB,KAAjB,iBAAiB,QAS5B"}
|
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
import { EventEmitter } from 'node:events';
|
|
2
2
|
export declare class FlightTracker {
|
|
3
3
|
requestsInFlight: number;
|
|
4
|
+
private activeRequests;
|
|
4
5
|
eventEmitter: EventEmitter;
|
|
6
|
+
/**
|
|
7
|
+
* Filters out non-functional "noise" requests that shouldn't block test execution.
|
|
8
|
+
*/
|
|
9
|
+
isEssentialRequest(url: string): boolean;
|
|
10
|
+
handleRequestStarted: (url: string) => void;
|
|
11
|
+
handleRequestFinished: (url: string) => void;
|
|
5
12
|
waitToContinue: () => Promise<void>;
|
|
6
13
|
}
|
|
@@ -1,25 +1,77 @@
|
|
|
1
1
|
import { EventEmitter } from 'node:events';
|
|
2
2
|
import { testwiseConfig } from '../services/ConfigBuilder.js';
|
|
3
3
|
const timeout = testwiseConfig().get('featureSettings.InflightRequests.waitTimeout') ?? 5000;
|
|
4
|
+
const stabilityTime = 150;
|
|
4
5
|
export class FlightTracker {
|
|
5
6
|
constructor() {
|
|
6
7
|
this.requestsInFlight = 0;
|
|
8
|
+
this.activeRequests = new Set();
|
|
7
9
|
this.eventEmitter = new EventEmitter();
|
|
10
|
+
this.handleRequestStarted = (url) => {
|
|
11
|
+
if (this.isEssentialRequest(url)) {
|
|
12
|
+
this.activeRequests.add(url);
|
|
13
|
+
this.requestsInFlight = this.activeRequests.size;
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
this.handleRequestFinished = (url) => {
|
|
17
|
+
if (this.isEssentialRequest(url)) {
|
|
18
|
+
this.activeRequests.delete(url);
|
|
19
|
+
this.requestsInFlight = this.activeRequests.size;
|
|
20
|
+
if (this.requestsInFlight === 0) {
|
|
21
|
+
this.eventEmitter.emit('idle');
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
};
|
|
8
25
|
this.waitToContinue = async () => {
|
|
9
26
|
if (this.requestsInFlight === 0) {
|
|
10
|
-
|
|
27
|
+
await new Promise((res) => setTimeout(res, stabilityTime));
|
|
28
|
+
if (this.requestsInFlight === 0)
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
let timeoutId;
|
|
32
|
+
const idlePromise = new Promise((resolve) => {
|
|
33
|
+
const checkIdle = () => {
|
|
34
|
+
if (this.requestsInFlight === 0) {
|
|
35
|
+
setTimeout(() => {
|
|
36
|
+
if (this.requestsInFlight === 0) {
|
|
37
|
+
this.eventEmitter.off('idle', checkIdle);
|
|
38
|
+
resolve();
|
|
39
|
+
}
|
|
40
|
+
}, stabilityTime);
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
this.eventEmitter.on('idle', checkIdle);
|
|
44
|
+
});
|
|
45
|
+
const timeoutPromise = new Promise((_, reject) => {
|
|
46
|
+
timeoutId = setTimeout(() => {
|
|
47
|
+
const pending = Array.from(this.activeRequests).join('\n -> ');
|
|
48
|
+
reject(new Error(`Timeout waiting for ${this.requestsInFlight} requests to complete (${timeout}ms).\nPending Essential Requests:\n -> ${pending}`));
|
|
49
|
+
}, timeout);
|
|
50
|
+
});
|
|
51
|
+
try {
|
|
52
|
+
await Promise.race([idlePromise, timeoutPromise]);
|
|
53
|
+
}
|
|
54
|
+
finally {
|
|
55
|
+
// biome-ignore lint/style/noNonNullAssertion: should be defined if we reach here
|
|
56
|
+
if (timeoutId)
|
|
57
|
+
clearTimeout(timeoutId);
|
|
58
|
+
this.eventEmitter.removeAllListeners('idle');
|
|
11
59
|
}
|
|
12
|
-
await Promise.race([
|
|
13
|
-
new Promise((resolve) => {
|
|
14
|
-
this.eventEmitter.once('idle', resolve);
|
|
15
|
-
}),
|
|
16
|
-
new Promise((_, reject) => {
|
|
17
|
-
setTimeout(() => {
|
|
18
|
-
reject(new Error('Timeout waiting for requests to complete'));
|
|
19
|
-
}, timeout);
|
|
20
|
-
})
|
|
21
|
-
]);
|
|
22
60
|
};
|
|
23
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* Filters out non-functional "noise" requests that shouldn't block test execution.
|
|
64
|
+
*/
|
|
65
|
+
isEssentialRequest(url) {
|
|
66
|
+
const noisePatterns = [
|
|
67
|
+
'.download_icon',
|
|
68
|
+
'.download_list_bar_grp_icon',
|
|
69
|
+
'.download_form_next_grp_icon',
|
|
70
|
+
'/badge()',
|
|
71
|
+
'universal_background_picture',
|
|
72
|
+
'i_ui_theme'
|
|
73
|
+
];
|
|
74
|
+
return !noisePatterns.some((pattern) => url.includes(pattern));
|
|
75
|
+
}
|
|
24
76
|
}
|
|
25
77
|
//# sourceMappingURL=FlightTracker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FlightTracker.js","sourceRoot":"","sources":["../../helpers/FlightTracker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9D,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC,GAAG,CAAS,8CAA8C,CAAC,IAAI,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"FlightTracker.js","sourceRoot":"","sources":["../../helpers/FlightTracker.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import type { Page } from '@playwright/test';
|
|
1
|
+
import type { APIResponse, Page } from '@playwright/test';
|
|
2
2
|
import type { UniversalLoginOptions } from '../types/index.js';
|
|
3
3
|
export declare class LoginHelper {
|
|
4
4
|
private _page;
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
protected serviceUrl: string;
|
|
6
|
+
protected metaEndpoint: string;
|
|
7
7
|
constructor(page: Page);
|
|
8
8
|
/**
|
|
9
9
|
* Log in and go to a specified application
|
|
@@ -37,3 +37,11 @@ export declare class LoginHelper {
|
|
|
37
37
|
private configureApplication;
|
|
38
38
|
logOut(): Promise<void>;
|
|
39
39
|
}
|
|
40
|
+
export declare class UserPreferences {
|
|
41
|
+
private _page;
|
|
42
|
+
readonly guiApplAlias: string;
|
|
43
|
+
readonly url: string;
|
|
44
|
+
constructor(requestContext: Page, serviceUrl?: string, metaEndpoint?: string);
|
|
45
|
+
run(upConfigurationId: number): Promise<void>;
|
|
46
|
+
disable(): Promise<APIResponse>;
|
|
47
|
+
}
|