@thinkwise/testwise 0.2.21 → 0.2.62

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 (230) 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 +29 -0
  12. package/components/filter/ExcelStyleFilterPopupObjects.ts +20 -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 +15 -119
  20. package/components/grid/GridObjects.ts +0 -4
  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 +6 -6
  43. package/controls/DateControlObjects.ts +0 -0
  44. package/controls/FormComboBox.ts +7 -7
  45. package/controls/FormComboBoxObjects.ts +0 -0
  46. package/controls/GridColumnControl.ts +68 -0
  47. package/controls/GridColumnControlObjects.ts +20 -0
  48. package/controls/InputFieldControl.ts +6 -6
  49. package/controls/InputFieldControlObjects.ts +0 -0
  50. package/controls/LookupDropdown.ts +58 -16
  51. package/controls/index.ts +1 -0
  52. package/dist/Testwise.d.ts +1 -0
  53. package/dist/Testwise.js +1 -0
  54. package/dist/Testwise.js.map +1 -1
  55. package/dist/artifact-builder/SelectorBuilder.d.ts +1 -1
  56. package/dist/artifact-builder/SelectorBuilder.js +2 -2
  57. package/dist/artifact-builder/SelectorBuilder.js.map +1 -1
  58. package/dist/artifact-builder/SubjectComponentGenerator.js +18 -12
  59. package/dist/artifact-builder/SubjectComponentGenerator.js.map +1 -1
  60. package/dist/artifact-builder/SubjectGenerator.d.ts +1 -0
  61. package/dist/artifact-builder/SubjectGenerator.js +16 -6
  62. package/dist/artifact-builder/SubjectGenerator.js.map +1 -1
  63. package/dist/components/action-bar/ActionBar.d.ts +2 -2
  64. package/dist/components/action-bar/ActionBar.js +7 -7
  65. package/dist/components/action-bar/ActionBar.js.map +1 -1
  66. package/dist/components/action-bar/CustomActionBar.d.ts +0 -2
  67. package/dist/components/action-bar/CustomActionBar.js +0 -3
  68. package/dist/components/action-bar/CustomActionBar.js.map +1 -1
  69. package/dist/components/cardlist/Cardlist.d.ts +2 -2
  70. package/dist/components/cardlist/Cardlist.js +2 -2
  71. package/dist/components/cardlist/Cardlist.js.map +1 -1
  72. package/dist/components/chart/Chart.d.ts +2 -2
  73. package/dist/components/chart/Chart.js +2 -2
  74. package/dist/components/chart/Chart.js.map +1 -1
  75. package/dist/components/combined-filter/CombinedFilter.d.ts +2 -2
  76. package/dist/components/combined-filter/CombinedFilter.js +2 -2
  77. package/dist/components/combined-filter/CombinedFilter.js.map +1 -1
  78. package/dist/components/cube-view-bar/CubeViewBar.d.ts +2 -2
  79. package/dist/components/cube-view-bar/CubeViewBar.js +2 -2
  80. package/dist/components/cube-view-bar/CubeViewBar.js.map +1 -1
  81. package/dist/components/filter/ExcelStyleFilterPopup.d.ts +9 -0
  82. package/dist/components/filter/ExcelStyleFilterPopup.js +22 -0
  83. package/dist/components/filter/ExcelStyleFilterPopup.js.map +1 -0
  84. package/dist/components/filter/ExcelStyleFilterPopupObjects.d.ts +9 -0
  85. package/dist/components/filter/ExcelStyleFilterPopupObjects.js +13 -0
  86. package/dist/components/filter/ExcelStyleFilterPopupObjects.js.map +1 -0
  87. package/dist/components/filter/FilterForm.d.ts +2 -2
  88. package/dist/components/filter/FilterForm.js +2 -2
  89. package/dist/components/filter/FilterForm.js.map +1 -1
  90. package/dist/components/filter/FilterPopup.d.ts +41 -0
  91. package/dist/components/filter/FilterPopup.js +126 -0
  92. package/dist/components/filter/FilterPopup.js.map +1 -0
  93. package/dist/components/filter/FilterPopupObjects.d.ts +29 -0
  94. package/dist/components/filter/FilterPopupObjects.js +30 -0
  95. package/dist/components/filter/FilterPopupObjects.js.map +1 -0
  96. package/dist/components/filter/ManagePrefilterPopup.d.ts +14 -0
  97. package/dist/components/filter/ManagePrefilterPopup.js +33 -0
  98. package/dist/components/filter/ManagePrefilterPopup.js.map +1 -0
  99. package/dist/components/filter/ManagePrefilterPopupObjects.d.ts +11 -0
  100. package/dist/components/filter/ManagePrefilterPopupObjects.js +19 -0
  101. package/dist/components/filter/ManagePrefilterPopupObjects.js.map +1 -0
  102. package/dist/components/form/Form.d.ts +2 -2
  103. package/dist/components/form/Form.js +2 -2
  104. package/dist/components/form/Form.js.map +1 -1
  105. package/dist/components/grid/Grid.d.ts +4 -36
  106. package/dist/components/grid/Grid.js +14 -102
  107. package/dist/components/grid/Grid.js.map +1 -1
  108. package/dist/components/grid/GridObjects.d.ts +0 -2
  109. package/dist/components/grid/GridObjects.js +0 -2
  110. package/dist/components/grid/GridObjects.js.map +1 -1
  111. package/dist/components/index.d.ts +4 -0
  112. package/dist/components/index.js +4 -0
  113. package/dist/components/index.js.map +1 -1
  114. package/dist/components/maps/Maps.d.ts +2 -2
  115. package/dist/components/maps/Maps.js +2 -2
  116. package/dist/components/maps/Maps.js.map +1 -1
  117. package/dist/components/menu/ListBarMenuComponent.d.ts +6 -0
  118. package/dist/components/menu/ListBarMenuComponent.js +10 -0
  119. package/dist/components/menu/ListBarMenuComponent.js.map +1 -1
  120. package/dist/components/menu/ListBarMenuComponentObjects.d.ts +2 -0
  121. package/dist/components/menu/ListBarMenuComponentObjects.js +2 -0
  122. package/dist/components/menu/ListBarMenuComponentObjects.js.map +1 -1
  123. package/dist/components/pivot-grid/PivotGrid.d.ts +2 -2
  124. package/dist/components/pivot-grid/PivotGrid.js +2 -2
  125. package/dist/components/pivot-grid/PivotGrid.js.map +1 -1
  126. package/dist/components/pivot-grid/PivotGridFieldList.d.ts +2 -2
  127. package/dist/components/pivot-grid/PivotGridFieldList.js +2 -2
  128. package/dist/components/pivot-grid/PivotGridFieldList.js.map +1 -1
  129. package/dist/components/pop-up/AllRowsPopUp.d.ts +12 -0
  130. package/dist/components/pop-up/AllRowsPopUp.js +19 -0
  131. package/dist/components/pop-up/AllRowsPopUp.js.map +1 -0
  132. package/dist/components/pop-up/AllRowsPopUpObjects.d.ts +11 -0
  133. package/dist/components/pop-up/AllRowsPopUpObjects.js +13 -0
  134. package/dist/components/pop-up/AllRowsPopUpObjects.js.map +1 -0
  135. package/dist/components/prefilter-list/PrefilterList.d.ts +2 -2
  136. package/dist/components/prefilter-list/PrefilterList.js +2 -2
  137. package/dist/components/prefilter-list/PrefilterList.js.map +1 -1
  138. package/dist/components/preview/Preview.d.ts +2 -2
  139. package/dist/components/preview/Preview.js +2 -2
  140. package/dist/components/preview/Preview.js.map +1 -1
  141. package/dist/components/report-bar/ReportBar.d.ts +2 -2
  142. package/dist/components/report-bar/ReportBar.js +2 -2
  143. package/dist/components/report-bar/ReportBar.js.map +1 -1
  144. package/dist/components/report-tiles/ReportTiles.d.ts +2 -2
  145. package/dist/components/report-tiles/ReportTiles.js +2 -2
  146. package/dist/components/report-tiles/ReportTiles.js.map +1 -1
  147. package/dist/components/scheduler/Scheduler.d.ts +2 -2
  148. package/dist/components/scheduler/Scheduler.js +2 -2
  149. package/dist/components/scheduler/Scheduler.js.map +1 -1
  150. package/dist/components/splitter/Splitter.d.ts +2 -2
  151. package/dist/components/splitter/Splitter.js +2 -2
  152. package/dist/components/splitter/Splitter.js.map +1 -1
  153. package/dist/components/tab/BaseTab.d.ts +2 -2
  154. package/dist/components/tab/BaseTab.js +2 -2
  155. package/dist/components/tab/BaseTab.js.map +1 -1
  156. package/dist/components/tab/DetailTabPage.d.ts +2 -2
  157. package/dist/components/tab/DetailTabPage.js +3 -3
  158. package/dist/components/tab/DetailTabPage.js.map +1 -1
  159. package/dist/components/tab/Tab.d.ts +2 -2
  160. package/dist/components/tab/Tab.js +3 -3
  161. package/dist/components/tab/Tab.js.map +1 -1
  162. package/dist/components/task/TaskBar.d.ts +2 -2
  163. package/dist/components/task/TaskBar.js +2 -2
  164. package/dist/components/task/TaskBar.js.map +1 -1
  165. package/dist/components/task/TaskTiles.d.ts +2 -2
  166. package/dist/components/task/TaskTiles.js +2 -2
  167. package/dist/components/task/TaskTiles.js.map +1 -1
  168. package/dist/components/topbar/TopBar.d.ts +1 -0
  169. package/dist/components/topbar/TopBar.js +1 -0
  170. package/dist/components/topbar/TopBar.js.map +1 -1
  171. package/dist/components/tree-view/TreeView.d.ts +2 -2
  172. package/dist/components/tree-view/TreeView.js +2 -2
  173. package/dist/components/tree-view/TreeView.js.map +1 -1
  174. package/dist/controls/DateControl.d.ts +3 -3
  175. package/dist/controls/DateControl.js +5 -5
  176. package/dist/controls/DateControl.js.map +1 -1
  177. package/dist/controls/DateControlObjects.d.ts +1 -0
  178. package/dist/controls/DateControlObjects.js +2 -0
  179. package/dist/controls/DateControlObjects.js.map +1 -0
  180. package/dist/controls/FormComboBox.d.ts +2 -2
  181. package/dist/controls/FormComboBox.js +6 -6
  182. package/dist/controls/FormComboBox.js.map +1 -1
  183. package/dist/controls/FormComboBoxObjects.d.ts +1 -0
  184. package/dist/controls/FormComboBoxObjects.js +2 -0
  185. package/dist/controls/FormComboBoxObjects.js.map +1 -0
  186. package/dist/controls/GridColumnControl.d.ts +10 -0
  187. package/dist/controls/GridColumnControl.js +43 -0
  188. package/dist/controls/GridColumnControl.js.map +1 -0
  189. package/dist/controls/GridColumnControlObjects.d.ts +9 -0
  190. package/dist/controls/GridColumnControlObjects.js +13 -0
  191. package/dist/controls/GridColumnControlObjects.js.map +1 -0
  192. package/dist/controls/InputFieldControl.d.ts +3 -3
  193. package/dist/controls/InputFieldControl.js +5 -5
  194. package/dist/controls/InputFieldControl.js.map +1 -1
  195. package/dist/controls/InputFieldControlObjects.d.ts +1 -0
  196. package/dist/controls/InputFieldControlObjects.js +2 -0
  197. package/dist/controls/InputFieldControlObjects.js.map +1 -0
  198. package/dist/controls/LookupDropdown.d.ts +6 -1
  199. package/dist/controls/LookupDropdown.js +42 -13
  200. package/dist/controls/LookupDropdown.js.map +1 -1
  201. package/dist/controls/index.d.ts +1 -0
  202. package/dist/controls/index.js +1 -0
  203. package/dist/controls/index.js.map +1 -1
  204. package/dist/enums/ElementTypes.d.ts +1 -1
  205. package/dist/enums/ElementTypes.js +1 -1
  206. package/dist/enums/ElementTypes.js.map +1 -1
  207. package/dist/helpers/FlightTracker.d.ts +7 -0
  208. package/dist/helpers/FlightTracker.js +63 -11
  209. package/dist/helpers/FlightTracker.js.map +1 -1
  210. package/dist/helpers/LoginHelper.d.ts +11 -3
  211. package/dist/helpers/LoginHelper.js +59 -13
  212. package/dist/helpers/LoginHelper.js.map +1 -1
  213. package/dist/index.d.ts +1 -1
  214. package/dist/index.js +1 -1
  215. package/dist/index.js.map +1 -1
  216. package/dist/page-extensions/GlobalComponents.d.ts +2 -1
  217. package/dist/page-extensions/GlobalComponents.js +2 -1
  218. package/dist/page-extensions/GlobalComponents.js.map +1 -1
  219. package/dist/page-overrides/ClickOverride.d.ts +1 -0
  220. package/dist/page-overrides/ClickOverride.js +57 -46
  221. package/dist/page-overrides/ClickOverride.js.map +1 -1
  222. package/dist/types/Universal.d.ts +1 -0
  223. package/enums/ElementTypes.ts +1 -1
  224. package/helpers/FlightTracker.ts +71 -11
  225. package/helpers/LoginHelper.ts +79 -21
  226. package/index.ts +1 -1
  227. package/package.json +6 -5
  228. package/page-extensions/GlobalComponents.ts +3 -0
  229. package/page-overrides/ClickOverride.ts +69 -64
  230. package/types/Universal.ts +1 -0
@@ -1,4 +1,4 @@
1
- import type { Locator } from '@playwright/test';
1
+ import type { Locator, Page } from '@playwright/test';
2
2
  import { FlightTracker } from '../helpers/FlightTracker.js';
3
3
  import { testwiseConfig } from '../services/ConfigBuilder.js';
4
4
  import type { Test } from '../types/Test.js';
@@ -9,26 +9,41 @@ const continueOnError = testwiseConfig().get<boolean>('featureSettings.InflightR
9
9
 
10
10
  export class ClickOverride {
11
11
  private _test: Test;
12
+ private _page: Page | null = null;
12
13
  private flightTracker: FlightTracker = new FlightTracker();
13
14
 
14
15
  constructor(test: Test) {
15
16
  this._test = test.extend({
16
17
  page: async ({ page }, use) => {
18
+ this._page = page;
19
+
20
+ const isTrackable = (url: string, resourceType: string) => {
21
+ const lowerUrl = url.toLowerCase();
22
+
23
+ return (
24
+ resourceType === 'xhr' &&
25
+ !lowerUrl.includes('/detect_change(') &&
26
+ !lowerUrl.includes('/set_gui_start_use_log_session') &&
27
+ !lowerUrl.includes('download_icon') &&
28
+ !lowerUrl.includes('download_list_bar_grp_icon') &&
29
+ !lowerUrl.includes('/badge()')
30
+ );
31
+ };
32
+
17
33
  const overrideClickMethod = (locator: Locator): Locator => {
18
34
  const originalClickMethod = locator.click.bind(locator);
19
35
 
20
36
  page.on('request', (request) => {
21
- if (request.resourceType() === 'xhr') {
37
+ if (isTrackable(request.url(), request.resourceType())) {
22
38
  this.flightTracker.requestsInFlight++;
23
39
  }
24
40
  });
25
41
 
26
42
  page.on('response', (response) => {
27
- if (response.request().resourceType() === 'xhr') {
43
+ if (isTrackable(response.request().url(), response.request().resourceType())) {
28
44
  if (this.flightTracker.requestsInFlight > 0) {
29
45
  this.flightTracker.requestsInFlight--;
30
46
  }
31
-
32
47
  if (this.flightTracker.requestsInFlight === 0) {
33
48
  this.flightTracker.eventEmitter.emit('idle');
34
49
  }
@@ -42,75 +57,65 @@ export class ClickOverride {
42
57
  await this.flightTracker.waitToContinue();
43
58
  } catch (error) {
44
59
  console.warn('Exception while waiting for inflight requests to finish:', error);
45
-
60
+ if (this._page) {
61
+ const inflightRequests = await this._page.evaluate(() => {
62
+ return performance
63
+ .getEntriesByType('resource')
64
+ .filter((entry) => {
65
+ const res = entry as PerformanceResourceTiming;
66
+ return (
67
+ res.initiatorType === 'xmlhttprequest' &&
68
+ !res.name.includes('/detect_change(') &&
69
+ !res.name.includes('/set_gui_start_use_log_session')
70
+ );
71
+ })
72
+ .map((entry) => (entry as PerformanceResourceTiming).name);
73
+ });
74
+ console.debug('Current inflight XHR requests:', inflightRequests);
75
+ }
46
76
  if (!continueOnError) throw error;
47
77
  }
48
78
  }
79
+ return;
49
80
  };
50
81
 
51
- // Ensure chaining works by overriding methods that return new Locators
52
- const originalLocatorMethod = locator.locator.bind(locator);
53
- locator.locator = (...args) => overrideClickMethod(originalLocatorMethod(...args));
54
-
55
- // Override the filter method so returned locators also have custom click logic
56
- const originalFilterMethod = locator.filter?.bind(locator);
57
- locator.filter = (...args) => overrideClickMethod(originalFilterMethod(...args));
58
-
59
- const originalGetByTextMethod = locator.getByText.bind(locator);
60
- locator.getByText = (...args) => overrideClickMethod(originalGetByTextMethod(...args));
61
-
62
- const originalGetByTestIdMethod = locator.getByTestId.bind(locator);
63
- locator.getByTestId = (...args) => overrideClickMethod(originalGetByTestIdMethod(...args));
64
-
65
- const originalGetByAltTextMethod = locator.getByAltText.bind(locator);
66
- locator.getByAltText = (...args) => overrideClickMethod(originalGetByAltTextMethod(...args));
67
-
68
- const originalGetByLabelMethod = locator.getByLabel.bind(locator);
69
- locator.getByLabel = (...args) => overrideClickMethod(originalGetByLabelMethod(...args));
70
-
71
- const originalGetByRoleMethod = locator.getByRole.bind(locator);
72
- locator.getByRole = (...args) => overrideClickMethod(originalGetByRoleMethod(...args));
73
-
74
- const originalGetByPlaceholderMethod = locator.getByPlaceholder.bind(locator);
75
- locator.getByPlaceholder = (...args) => overrideClickMethod(originalGetByPlaceholderMethod(...args));
76
-
77
- const originalGetByTitleMethod = locator.getByTitle.bind(locator);
78
- locator.getByTitle = (...args) => overrideClickMethod(originalGetByTitleMethod(...args));
82
+ const locatorMethods = [
83
+ 'locator',
84
+ 'filter',
85
+ 'getByText',
86
+ 'getByTestId',
87
+ 'getByAltText',
88
+ 'getByLabel',
89
+ 'getByRole',
90
+ 'getByPlaceholder',
91
+ 'getByTitle'
92
+ ] as const;
93
+
94
+ for (const method of locatorMethods) {
95
+ const original = (locator[method] as (...args: unknown[]) => Locator).bind(locator);
96
+ (locator as unknown as Record<string, (...args: unknown[]) => Locator>)[method] = (...args: unknown[]) =>
97
+ overrideClickMethod(original(...args));
98
+ }
79
99
 
80
100
  return locator;
81
101
  };
82
102
 
83
- // Override the getByTestId.click method
84
- const originalGetByTestId = page.getByTestId.bind(page);
85
- page.getByTestId = (...args) => overrideClickMethod(originalGetByTestId(...args));
86
-
87
- // Override the locator.click method
88
- const originalLocator = page.locator.bind(page);
89
- page.locator = (...args) => overrideClickMethod(originalLocator(...args));
90
-
91
- // Override the getByAltText.click method
92
- const originalGetByAltText = page.getByAltText.bind(page);
93
- page.getByAltText = (...args) => overrideClickMethod(originalGetByAltText(...args));
94
-
95
- // Override the getByLabel.click method
96
- const originalGetByLabel = page.getByLabel.bind(page);
97
- page.getByLabel = (...args) => overrideClickMethod(originalGetByLabel(...args));
98
-
99
- // Override the getByRole.click method
100
- const originalGetByRole = page.getByRole.bind(page);
101
- page.getByRole = (...args) => overrideClickMethod(originalGetByRole(...args));
102
-
103
- // Override the getByPlaceholder.click method
104
- const originalGetByPlaceholder = page.getByPlaceholder.bind(page);
105
- page.getByPlaceholder = (...args) => overrideClickMethod(originalGetByPlaceholder(...args));
106
-
107
- // Override the getByText.click method
108
- const originalGetByText = page.getByText.bind(page);
109
- page.getByText = (...args) => overrideClickMethod(originalGetByText(...args));
110
-
111
- // Override the getByTitle.click method
112
- const originalGetByTitle = page.getByTitle.bind(page);
113
- page.getByTitle = (...args) => overrideClickMethod(originalGetByTitle(...args));
103
+ const rootMethods = [
104
+ 'locator',
105
+ 'getByTestId',
106
+ 'getByAltText',
107
+ 'getByLabel',
108
+ 'getByRole',
109
+ 'getByPlaceholder',
110
+ 'getByText',
111
+ 'getByTitle'
112
+ ] as const;
113
+
114
+ for (const method of rootMethods) {
115
+ const original = (page[method] as (...args: unknown[]) => Locator).bind(page);
116
+ (page as unknown as Record<string, (...args: unknown[]) => Locator>)[method] = (...args: unknown[]) =>
117
+ overrideClickMethod(original(...args));
118
+ }
114
119
 
115
120
  await use(page);
116
121
  }
@@ -23,4 +23,5 @@ export type UniversalLoginOptions = {
23
23
  serviceUrl?: string;
24
24
  metaEndpoint?: string;
25
25
  config?: UniversalConfigOptions;
26
+ userPreference?: number;
26
27
  };