@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.
Files changed (234) hide show
  1. package/Testwise.ts +2 -0
  2. package/artifact-builder/SelectorBuilder.ts +2 -2
  3. package/artifact-builder/SubjectComponentGenerator.ts +21 -12
  4. package/artifact-builder/SubjectGenerator.ts +20 -6
  5. package/components/action-bar/ActionBar.ts +7 -7
  6. package/components/action-bar/CustomActionBar.ts +0 -5
  7. package/components/cardlist/Cardlist.ts +3 -3
  8. package/components/chart/Chart.ts +3 -3
  9. package/components/combined-filter/CombinedFilter.ts +3 -3
  10. package/components/cube-view-bar/CubeViewBar.ts +3 -3
  11. package/components/filter/ExcelStyleFilterPopup.ts +69 -0
  12. package/components/filter/ExcelStyleFilterPopupObjects.ts +46 -0
  13. package/components/filter/FilterForm.ts +3 -3
  14. package/components/filter/FilterPopup.ts +187 -0
  15. package/components/filter/FilterPopupObjects.ts +63 -0
  16. package/components/filter/ManagePrefilterPopup.ts +44 -0
  17. package/components/filter/ManagePrefilterPopupObjects.ts +28 -0
  18. package/components/form/Form.ts +3 -3
  19. package/components/grid/Grid.ts +48 -133
  20. package/components/grid/GridObjects.ts +0 -19
  21. package/components/index.ts +4 -0
  22. package/components/maps/Maps.ts +3 -3
  23. package/components/menu/ListBarMenuComponent.ts +11 -0
  24. package/components/menu/ListBarMenuComponentObjects.ts +6 -0
  25. package/components/pivot-grid/PivotGrid.ts +3 -3
  26. package/components/pivot-grid/PivotGridFieldList.ts +3 -3
  27. package/components/pop-up/AllRowsPopUp.ts +29 -0
  28. package/components/pop-up/AllRowsPopUpObjects.ts +22 -0
  29. package/components/prefilter-list/PrefilterList.ts +3 -3
  30. package/components/preview/Preview.ts +3 -3
  31. package/components/report-bar/ReportBar.ts +3 -3
  32. package/components/report-tiles/ReportTiles.ts +3 -3
  33. package/components/scheduler/Scheduler.ts +3 -3
  34. package/components/splitter/Splitter.ts +3 -3
  35. package/components/tab/BaseTab.ts +3 -3
  36. package/components/tab/DetailTabPage.ts +4 -4
  37. package/components/tab/Tab.ts +4 -4
  38. package/components/task/TaskBar.ts +3 -3
  39. package/components/task/TaskTiles.ts +3 -3
  40. package/components/topbar/TopBar.ts +2 -0
  41. package/components/tree-view/TreeView.ts +3 -3
  42. package/controls/DateControl.ts +13 -14
  43. package/controls/DateControlObjects.ts +15 -0
  44. package/controls/FormComboBox.ts +17 -30
  45. package/controls/FormComboBoxObjects.ts +27 -0
  46. package/controls/GridColumnControl.ts +68 -0
  47. package/controls/GridColumnControlObjects.ts +20 -0
  48. package/controls/InputFieldControl.ts +17 -20
  49. package/controls/InputFieldControlObjects.ts +19 -0
  50. package/controls/LookupDropdown.ts +65 -24
  51. package/controls/LookupDropdownObjects.ts +19 -0
  52. package/controls/index.ts +1 -0
  53. package/dist/Testwise.d.ts +1 -0
  54. package/dist/Testwise.js +1 -0
  55. package/dist/Testwise.js.map +1 -1
  56. package/dist/artifact-builder/SelectorBuilder.d.ts +1 -1
  57. package/dist/artifact-builder/SelectorBuilder.js +2 -2
  58. package/dist/artifact-builder/SelectorBuilder.js.map +1 -1
  59. package/dist/artifact-builder/SubjectComponentGenerator.js +18 -12
  60. package/dist/artifact-builder/SubjectComponentGenerator.js.map +1 -1
  61. package/dist/artifact-builder/SubjectGenerator.d.ts +1 -0
  62. package/dist/artifact-builder/SubjectGenerator.js +16 -6
  63. package/dist/artifact-builder/SubjectGenerator.js.map +1 -1
  64. package/dist/components/action-bar/ActionBar.d.ts +2 -2
  65. package/dist/components/action-bar/ActionBar.js +7 -7
  66. package/dist/components/action-bar/ActionBar.js.map +1 -1
  67. package/dist/components/action-bar/CustomActionBar.d.ts +0 -2
  68. package/dist/components/action-bar/CustomActionBar.js +0 -3
  69. package/dist/components/action-bar/CustomActionBar.js.map +1 -1
  70. package/dist/components/cardlist/Cardlist.d.ts +2 -2
  71. package/dist/components/cardlist/Cardlist.js +2 -2
  72. package/dist/components/cardlist/Cardlist.js.map +1 -1
  73. package/dist/components/chart/Chart.d.ts +2 -2
  74. package/dist/components/chart/Chart.js +2 -2
  75. package/dist/components/chart/Chart.js.map +1 -1
  76. package/dist/components/combined-filter/CombinedFilter.d.ts +2 -2
  77. package/dist/components/combined-filter/CombinedFilter.js +2 -2
  78. package/dist/components/combined-filter/CombinedFilter.js.map +1 -1
  79. package/dist/components/cube-view-bar/CubeViewBar.d.ts +2 -2
  80. package/dist/components/cube-view-bar/CubeViewBar.js +2 -2
  81. package/dist/components/cube-view-bar/CubeViewBar.js.map +1 -1
  82. package/dist/components/filter/ExcelStyleFilterPopup.d.ts +19 -0
  83. package/dist/components/filter/ExcelStyleFilterPopup.js +64 -0
  84. package/dist/components/filter/ExcelStyleFilterPopup.js.map +1 -0
  85. package/dist/components/filter/ExcelStyleFilterPopupObjects.d.ts +16 -0
  86. package/dist/components/filter/ExcelStyleFilterPopupObjects.js +26 -0
  87. package/dist/components/filter/ExcelStyleFilterPopupObjects.js.map +1 -0
  88. package/dist/components/filter/FilterForm.d.ts +2 -2
  89. package/dist/components/filter/FilterForm.js +2 -2
  90. package/dist/components/filter/FilterForm.js.map +1 -1
  91. package/dist/components/filter/FilterPopup.d.ts +41 -0
  92. package/dist/components/filter/FilterPopup.js +126 -0
  93. package/dist/components/filter/FilterPopup.js.map +1 -0
  94. package/dist/components/filter/FilterPopupObjects.d.ts +29 -0
  95. package/dist/components/filter/FilterPopupObjects.js +30 -0
  96. package/dist/components/filter/FilterPopupObjects.js.map +1 -0
  97. package/dist/components/filter/ManagePrefilterPopup.d.ts +14 -0
  98. package/dist/components/filter/ManagePrefilterPopup.js +33 -0
  99. package/dist/components/filter/ManagePrefilterPopup.js.map +1 -0
  100. package/dist/components/filter/ManagePrefilterPopupObjects.d.ts +11 -0
  101. package/dist/components/filter/ManagePrefilterPopupObjects.js +19 -0
  102. package/dist/components/filter/ManagePrefilterPopupObjects.js.map +1 -0
  103. package/dist/components/form/Form.d.ts +2 -2
  104. package/dist/components/form/Form.js +2 -2
  105. package/dist/components/form/Form.js.map +1 -1
  106. package/dist/components/grid/Grid.d.ts +7 -37
  107. package/dist/components/grid/Grid.js +32 -127
  108. package/dist/components/grid/Grid.js.map +1 -1
  109. package/dist/components/grid/GridObjects.d.ts +0 -6
  110. package/dist/components/grid/GridObjects.js +0 -8
  111. package/dist/components/grid/GridObjects.js.map +1 -1
  112. package/dist/components/index.d.ts +4 -0
  113. package/dist/components/index.js +4 -0
  114. package/dist/components/index.js.map +1 -1
  115. package/dist/components/maps/Maps.d.ts +2 -2
  116. package/dist/components/maps/Maps.js +2 -2
  117. package/dist/components/maps/Maps.js.map +1 -1
  118. package/dist/components/menu/ListBarMenuComponent.d.ts +6 -0
  119. package/dist/components/menu/ListBarMenuComponent.js +10 -0
  120. package/dist/components/menu/ListBarMenuComponent.js.map +1 -1
  121. package/dist/components/menu/ListBarMenuComponentObjects.d.ts +2 -0
  122. package/dist/components/menu/ListBarMenuComponentObjects.js +2 -0
  123. package/dist/components/menu/ListBarMenuComponentObjects.js.map +1 -1
  124. package/dist/components/pivot-grid/PivotGrid.d.ts +2 -2
  125. package/dist/components/pivot-grid/PivotGrid.js +2 -2
  126. package/dist/components/pivot-grid/PivotGrid.js.map +1 -1
  127. package/dist/components/pivot-grid/PivotGridFieldList.d.ts +2 -2
  128. package/dist/components/pivot-grid/PivotGridFieldList.js +2 -2
  129. package/dist/components/pivot-grid/PivotGridFieldList.js.map +1 -1
  130. package/dist/components/pop-up/AllRowsPopUp.d.ts +12 -0
  131. package/dist/components/pop-up/AllRowsPopUp.js +19 -0
  132. package/dist/components/pop-up/AllRowsPopUp.js.map +1 -0
  133. package/dist/components/pop-up/AllRowsPopUpObjects.d.ts +11 -0
  134. package/dist/components/pop-up/AllRowsPopUpObjects.js +13 -0
  135. package/dist/components/pop-up/AllRowsPopUpObjects.js.map +1 -0
  136. package/dist/components/prefilter-list/PrefilterList.d.ts +2 -2
  137. package/dist/components/prefilter-list/PrefilterList.js +2 -2
  138. package/dist/components/prefilter-list/PrefilterList.js.map +1 -1
  139. package/dist/components/preview/Preview.d.ts +2 -2
  140. package/dist/components/preview/Preview.js +2 -2
  141. package/dist/components/preview/Preview.js.map +1 -1
  142. package/dist/components/report-bar/ReportBar.d.ts +2 -2
  143. package/dist/components/report-bar/ReportBar.js +2 -2
  144. package/dist/components/report-bar/ReportBar.js.map +1 -1
  145. package/dist/components/report-tiles/ReportTiles.d.ts +2 -2
  146. package/dist/components/report-tiles/ReportTiles.js +2 -2
  147. package/dist/components/report-tiles/ReportTiles.js.map +1 -1
  148. package/dist/components/scheduler/Scheduler.d.ts +2 -2
  149. package/dist/components/scheduler/Scheduler.js +2 -2
  150. package/dist/components/scheduler/Scheduler.js.map +1 -1
  151. package/dist/components/splitter/Splitter.d.ts +2 -2
  152. package/dist/components/splitter/Splitter.js +2 -2
  153. package/dist/components/splitter/Splitter.js.map +1 -1
  154. package/dist/components/tab/BaseTab.d.ts +2 -2
  155. package/dist/components/tab/BaseTab.js +2 -2
  156. package/dist/components/tab/BaseTab.js.map +1 -1
  157. package/dist/components/tab/DetailTabPage.d.ts +2 -2
  158. package/dist/components/tab/DetailTabPage.js +3 -3
  159. package/dist/components/tab/DetailTabPage.js.map +1 -1
  160. package/dist/components/tab/Tab.d.ts +2 -2
  161. package/dist/components/tab/Tab.js +3 -3
  162. package/dist/components/tab/Tab.js.map +1 -1
  163. package/dist/components/task/TaskBar.d.ts +2 -2
  164. package/dist/components/task/TaskBar.js +2 -2
  165. package/dist/components/task/TaskBar.js.map +1 -1
  166. package/dist/components/task/TaskTiles.d.ts +2 -2
  167. package/dist/components/task/TaskTiles.js +2 -2
  168. package/dist/components/task/TaskTiles.js.map +1 -1
  169. package/dist/components/topbar/TopBar.d.ts +1 -0
  170. package/dist/components/topbar/TopBar.js +1 -0
  171. package/dist/components/topbar/TopBar.js.map +1 -1
  172. package/dist/components/tree-view/TreeView.d.ts +2 -2
  173. package/dist/components/tree-view/TreeView.js +2 -2
  174. package/dist/components/tree-view/TreeView.js.map +1 -1
  175. package/dist/controls/DateControl.d.ts +4 -5
  176. package/dist/controls/DateControl.js +11 -11
  177. package/dist/controls/DateControl.js.map +1 -1
  178. package/dist/controls/DateControlObjects.d.ts +8 -0
  179. package/dist/controls/DateControlObjects.js +9 -0
  180. package/dist/controls/DateControlObjects.js.map +1 -0
  181. package/dist/controls/FormComboBox.d.ts +2 -2
  182. package/dist/controls/FormComboBox.js +15 -20
  183. package/dist/controls/FormComboBox.js.map +1 -1
  184. package/dist/controls/FormComboBoxObjects.d.ts +12 -0
  185. package/dist/controls/FormComboBoxObjects.js +16 -0
  186. package/dist/controls/FormComboBoxObjects.js.map +1 -0
  187. package/dist/controls/GridColumnControl.d.ts +10 -0
  188. package/dist/controls/GridColumnControl.js +43 -0
  189. package/dist/controls/GridColumnControl.js.map +1 -0
  190. package/dist/controls/GridColumnControlObjects.d.ts +9 -0
  191. package/dist/controls/GridColumnControlObjects.js +13 -0
  192. package/dist/controls/GridColumnControlObjects.js.map +1 -0
  193. package/dist/controls/InputFieldControl.d.ts +4 -6
  194. package/dist/controls/InputFieldControl.js +14 -15
  195. package/dist/controls/InputFieldControl.js.map +1 -1
  196. package/dist/controls/InputFieldControlObjects.d.ts +10 -0
  197. package/dist/controls/InputFieldControlObjects.js +11 -0
  198. package/dist/controls/InputFieldControlObjects.js.map +1 -0
  199. package/dist/controls/LookupDropdown.d.ts +6 -1
  200. package/dist/controls/LookupDropdown.js +51 -19
  201. package/dist/controls/LookupDropdown.js.map +1 -1
  202. package/dist/controls/LookupDropdownObjects.d.ts +10 -0
  203. package/dist/controls/LookupDropdownObjects.js +11 -0
  204. package/dist/controls/LookupDropdownObjects.js.map +1 -0
  205. package/dist/controls/index.d.ts +1 -0
  206. package/dist/controls/index.js +1 -0
  207. package/dist/controls/index.js.map +1 -1
  208. package/dist/enums/ElementTypes.d.ts +1 -1
  209. package/dist/enums/ElementTypes.js +1 -1
  210. package/dist/enums/ElementTypes.js.map +1 -1
  211. package/dist/helpers/FlightTracker.d.ts +7 -0
  212. package/dist/helpers/FlightTracker.js +63 -11
  213. package/dist/helpers/FlightTracker.js.map +1 -1
  214. package/dist/helpers/LoginHelper.d.ts +11 -3
  215. package/dist/helpers/LoginHelper.js +59 -13
  216. package/dist/helpers/LoginHelper.js.map +1 -1
  217. package/dist/index.d.ts +1 -1
  218. package/dist/index.js +1 -1
  219. package/dist/index.js.map +1 -1
  220. package/dist/page-extensions/GlobalComponents.d.ts +2 -1
  221. package/dist/page-extensions/GlobalComponents.js +2 -1
  222. package/dist/page-extensions/GlobalComponents.js.map +1 -1
  223. package/dist/page-overrides/ClickOverride.d.ts +1 -0
  224. package/dist/page-overrides/ClickOverride.js +57 -46
  225. package/dist/page-overrides/ClickOverride.js.map +1 -1
  226. package/dist/types/Universal.d.ts +1 -0
  227. package/enums/ElementTypes.ts +1 -1
  228. package/helpers/FlightTracker.ts +71 -11
  229. package/helpers/LoginHelper.ts +79 -21
  230. package/index.ts +1 -1
  231. package/package.json +6 -5
  232. package/page-extensions/GlobalComponents.ts +3 -0
  233. package/page-overrides/ClickOverride.ts +69 -64
  234. 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, Page } from '@playwright/test';
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 _formFieldLocator;
15
- private _inputLocator;
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(page: Page, id: string): IInputFieldControl;
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(page, id) {
3
- this._id = id;
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._formFieldLocator.locator('.TooltipContainer p').waitFor({ state: 'visible' });
9
- return await this._formFieldLocator.locator('.TooltipContainer p').innerText();
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._inputLocator.fill(value);
11
+ await this._objects.fieldInput().fill(value);
13
12
  }
14
13
  async click() {
15
- await this._inputLocator.click();
14
+ await this._objects.fieldInput().click();
16
15
  }
17
16
  async clear() {
18
- await this._inputLocator.fill('');
17
+ await this._objects.fieldInput().fill('');
19
18
  }
20
19
  async inputValue() {
21
- return await this._inputLocator.inputValue();
20
+ return await this._objects.fieldInput().inputValue();
22
21
  }
23
22
  inputElement() {
24
- return this._inputLocator;
23
+ return this._objects.fieldInput();
25
24
  }
26
25
  async getLabelText() {
27
- let returnText = (await this._formFieldLocator.getByTestId(`form-field__${this._id}__label`).textContent()) || '';
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(page, id) {
33
- const inputFieldControl = new InputFieldControl(page, id);
34
- const locator = page.getByTestId(`form-field__${id}`);
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":"AAgBA,MAAM,OAAO,iBAAiB;IAK5B,YAAY,IAAU,EAAE,EAAU;QAChC,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;QACd,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;QAC/D,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/D,CAAC;IAEM,KAAK,CAAC,oBAAoB;QAC/B,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAC1F,OAAO,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,SAAS,EAAE,CAAC;IACjF,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,KAAa;QAC7B,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IAEM,KAAK,CAAC,KAAK;QAChB,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;IACnC,CAAC;IAEM,KAAK,CAAC,KAAK;QAChB,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpC,CAAC;IAEM,KAAK,CAAC,UAAU;QACrB,OAAO,MAAM,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,CAAC;IAC/C,CAAC;IAEM,YAAY;QACjB,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAEM,KAAK,CAAC,YAAY;QACvB,IAAI,UAAU,GAAG,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,eAAe,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;QAElH,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,IAAU,EAAE,EAAU;IAC5D,MAAM,iBAAiB,GAAG,IAAI,iBAAiB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;IAEtD,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"}
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(locator: Locator): ILookupDropdown;
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(locator) {
4
- this._locator = locator;
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 Promise.all([this._locator.click(), this._locator.page().waitForResponse('**/list_**')]);
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._locator.click();
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._locator.page().getByTestId('autocomplete__menu').getByText(optionsToSelectRegex).click();
19
- await this._locator
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._locator.elementHandle());
52
+ .waitForFunction((el) => document.activeElement === el, await this._objects.input().elementHandle());
22
53
  }
23
54
  }
24
- export function createLookupDropdown(locator) {
25
- const dropdown = new LookupDropdown(locator);
26
- return new Proxy(dropdown, {
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 in target) {
29
- return Reflect.get(target, prop, receiver);
30
- }
31
- const value = locator[prop];
32
- if (typeof value === 'function') {
33
- return value.bind(locator);
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 value;
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;AASxD,MAAM,cAAc;IAGlB,YAAY,OAAgB;QAC1B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,cAAsB;QACvC,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAE/F,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACzC,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,gBAAgB,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAEjE,MAAM,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,UAAkB;QACnC,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QAC5B,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAChC,CAAC;IAEO,KAAK,CAAC,MAAM,CAAC,cAAsB;QACzC,MAAM,oBAAoB,GAAG,IAAI,MAAM,CAAC,IAAI,WAAW,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAEjF,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC,KAAK,EAAE,CAAC;QACrG,MAAM,IAAI,CAAC,QAAQ;aAChB,IAAI,EAAE;aACN,eAAe,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,aAAa,KAAK,EAAE,EAAE,MAAM,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC;IACjG,CAAC;CACF;AAED,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC;IAE7C,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE;QACzB,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;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,CAA+B,CAAC;AACnC,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"}
@@ -1,4 +1,5 @@
1
1
  export * from './DateControl.js';
2
2
  export * from './FormComboBox.js';
3
+ export * from './GridColumnControl.js';
3
4
  export * from './InputFieldControl.js';
4
5
  export * from './LookupDropdown.js';
@@ -1,5 +1,6 @@
1
1
  export * from './DateControl.js';
2
2
  export * from './FormComboBox.js';
3
+ export * from './GridColumnControl.js';
3
4
  export * from './InputFieldControl.js';
4
5
  export * from './LookupDropdown.js';
5
6
  //# sourceMappingURL=index.js.map
@@ -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"}
@@ -4,7 +4,7 @@ export declare enum KnownElementTypes {
4
4
  Textarea = "textarea",
5
5
  Checkbox = "checkbox",
6
6
  Lookup = "lookup",
7
- Column = "column_cells",
7
+ Column = "column",
8
8
  ComboBox = "combo_box",
9
9
  DatePicker = "date_picker"
10
10
  }
@@ -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"] = "column_cells";
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,4CAAuB,CAAA;IACvB,2CAAsB,CAAA;IACtB,+CAA0B,CAAA;AAC5B,CAAC,EATW,iBAAiB,KAAjB,iBAAiB,QAS5B"}
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
- return;
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;AAErG,MAAM,OAAO,aAAa;IAA1B;QACS,qBAAgB,GAAW,CAAC,CAAC;QAC7B,iBAAY,GAAiB,IAAI,YAAY,EAAE,CAAC;QAEhD,mBAAc,GAAG,KAAK,IAAmB,EAAE;YAChD,IAAI,IAAI,CAAC,gBAAgB,KAAK,CAAC,EAAE,CAAC;gBAChC,OAAO;YACT,CAAC;YAED,MAAM,OAAO,CAAC,IAAI,CAAC;gBACjB,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;oBAC5B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAC1C,CAAC,CAAC;gBACF,IAAI,OAAO,CAAO,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;oBAC9B,UAAU,CAAC,GAAG,EAAE;wBACd,MAAM,CAAC,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC,CAAC;oBAChE,CAAC,EAAE,OAAO,CAAC,CAAC;gBACd,CAAC,CAAC;aACH,CAAC,CAAC;QACL,CAAC,CAAC;IACJ,CAAC;CAAA"}
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
- private _serviceUrl;
6
- private _metaEndpoint;
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
+ }