@thinkwise/testwise 0.0.2-alpha.2

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 (152) hide show
  1. package/.ci/azure-pipelines.yaml +80 -0
  2. package/.eslintcache +1 -0
  3. package/.gitattributes +3 -0
  4. package/.gitconfig +2 -0
  5. package/.vscode/settings.json +18 -0
  6. package/Testwise.ts +22 -0
  7. package/components/BaseComponent.ts +95 -0
  8. package/components/BaseComponentObjects.ts +10 -0
  9. package/components/IComponentObjects.ts +5 -0
  10. package/components/Splitter.ts +11 -0
  11. package/components/TSFComponent.ts +8 -0
  12. package/components/actionbar/Actionbar.ts +57 -0
  13. package/components/actionbar/ActionbarObjects.ts +67 -0
  14. package/components/export/ExportComponent.ts +70 -0
  15. package/components/export/ExportComponentObjects.ts +23 -0
  16. package/components/filter/FilterForm.ts +11 -0
  17. package/components/filter/FindForm.ts +11 -0
  18. package/components/form/Form.ts +31 -0
  19. package/components/grid/Grid.ts +221 -0
  20. package/components/grid/GridObjects.ts +45 -0
  21. package/components/index.ts +6 -0
  22. package/components/pop-up/PopUpComponent.ts +14 -0
  23. package/components/pop-up/PopUpComponentModels.ts +13 -0
  24. package/components/tab/Tab.ts +29 -0
  25. package/components/task/TaskBar.ts +11 -0
  26. package/components/task/TaskTiles.ts +11 -0
  27. package/config.json +10 -0
  28. package/dist/Testwise.d.ts +2 -0
  29. package/dist/Testwise.js +14 -0
  30. package/dist/Testwise.js.map +1 -0
  31. package/dist/components/BaseComponent.d.ts +29 -0
  32. package/dist/components/BaseComponent.js +67 -0
  33. package/dist/components/BaseComponent.js.map +1 -0
  34. package/dist/components/BaseComponentObjects.d.ts +6 -0
  35. package/dist/components/BaseComponentObjects.js +6 -0
  36. package/dist/components/BaseComponentObjects.js.map +1 -0
  37. package/dist/components/IComponentObjects.d.ts +4 -0
  38. package/dist/components/IComponentObjects.js +2 -0
  39. package/dist/components/IComponentObjects.js.map +1 -0
  40. package/dist/components/Splitter.d.ts +5 -0
  41. package/dist/components/Splitter.js +10 -0
  42. package/dist/components/Splitter.js.map +1 -0
  43. package/dist/components/TSFComponent.d.ts +6 -0
  44. package/dist/components/TSFComponent.js +2 -0
  45. package/dist/components/TSFComponent.js.map +1 -0
  46. package/dist/components/actionbar/Actionbar.d.ts +27 -0
  47. package/dist/components/actionbar/Actionbar.js +35 -0
  48. package/dist/components/actionbar/Actionbar.js.map +1 -0
  49. package/dist/components/actionbar/ActionbarObjects.d.ts +24 -0
  50. package/dist/components/actionbar/ActionbarObjects.js +30 -0
  51. package/dist/components/actionbar/ActionbarObjects.js.map +1 -0
  52. package/dist/components/export/ExportComponent.d.ts +12 -0
  53. package/dist/components/export/ExportComponent.js +55 -0
  54. package/dist/components/export/ExportComponent.js.map +1 -0
  55. package/dist/components/export/ExportComponentObjects.d.ts +11 -0
  56. package/dist/components/export/ExportComponentObjects.js +12 -0
  57. package/dist/components/export/ExportComponentObjects.js.map +1 -0
  58. package/dist/components/form/Form.d.ts +7 -0
  59. package/dist/components/form/Form.js +31 -0
  60. package/dist/components/form/Form.js.map +1 -0
  61. package/dist/components/grid/Grid.d.ts +93 -0
  62. package/dist/components/grid/Grid.js +183 -0
  63. package/dist/components/grid/Grid.js.map +1 -0
  64. package/dist/components/grid/GridObjects.d.ts +20 -0
  65. package/dist/components/grid/GridObjects.js +25 -0
  66. package/dist/components/grid/GridObjects.js.map +1 -0
  67. package/dist/components/index.d.ts +6 -0
  68. package/dist/components/index.js +7 -0
  69. package/dist/components/index.js.map +1 -0
  70. package/dist/components/pop-up/PopUpComponent.d.ts +7 -0
  71. package/dist/components/pop-up/PopUpComponent.js +9 -0
  72. package/dist/components/pop-up/PopUpComponent.js.map +1 -0
  73. package/dist/components/pop-up/PopUpComponentModels.d.ts +7 -0
  74. package/dist/components/pop-up/PopUpComponentModels.js +8 -0
  75. package/dist/components/pop-up/PopUpComponentModels.js.map +1 -0
  76. package/dist/config.json +10 -0
  77. package/dist/enums/ActionbarRegions.d.ts +5 -0
  78. package/dist/enums/ActionbarRegions.js +7 -0
  79. package/dist/enums/ActionbarRegions.js.map +1 -0
  80. package/dist/enums/ButtonEnums.d.ts +24 -0
  81. package/dist/enums/ButtonEnums.js +29 -0
  82. package/dist/enums/ButtonEnums.js.map +1 -0
  83. package/dist/enums/ExportFormat.d.ts +5 -0
  84. package/dist/enums/ExportFormat.js +7 -0
  85. package/dist/enums/ExportFormat.js.map +1 -0
  86. package/dist/enums/LogLevel.d.ts +8 -0
  87. package/dist/enums/LogLevel.js +11 -0
  88. package/dist/enums/LogLevel.js.map +1 -0
  89. package/dist/example-code/TestifyService.d.ts +22 -0
  90. package/dist/example-code/TestifyService.js +191 -0
  91. package/dist/example-code/TestifyService.js.map +1 -0
  92. package/dist/helpers/InflightRequestTracker.d.ts +10 -0
  93. package/dist/helpers/InflightRequestTracker.js +26 -0
  94. package/dist/helpers/InflightRequestTracker.js.map +1 -0
  95. package/dist/helpers/LoginHelper.d.ts +38 -0
  96. package/dist/helpers/LoginHelper.js +112 -0
  97. package/dist/helpers/LoginHelper.js.map +1 -0
  98. package/dist/helpers/UserSimulationHelper.d.ts +20 -0
  99. package/dist/helpers/UserSimulationHelper.js +62 -0
  100. package/dist/helpers/UserSimulationHelper.js.map +1 -0
  101. package/dist/index.d.ts +34 -0
  102. package/dist/index.js +26 -0
  103. package/dist/index.js.map +1 -0
  104. package/dist/page-extensions/GoToDeepLink.d.ts +11 -0
  105. package/dist/page-extensions/GoToDeepLink.js +17 -0
  106. package/dist/page-extensions/GoToDeepLink.js.map +1 -0
  107. package/dist/page-extensions/LoginFeatures.d.ts +16 -0
  108. package/dist/page-extensions/LoginFeatures.js +30 -0
  109. package/dist/page-extensions/LoginFeatures.js.map +1 -0
  110. package/dist/page-extensions/UserSimulation.d.ts +15 -0
  111. package/dist/page-extensions/UserSimulation.js +30 -0
  112. package/dist/page-extensions/UserSimulation.js.map +1 -0
  113. package/dist/page-overrides/ClickOverride.d.ts +6 -0
  114. package/dist/page-overrides/ClickOverride.js +73 -0
  115. package/dist/page-overrides/ClickOverride.js.map +1 -0
  116. package/dist/services/ConfigBuilder.d.ts +12 -0
  117. package/dist/services/ConfigBuilder.js +30 -0
  118. package/dist/services/ConfigBuilder.js.map +1 -0
  119. package/dist/services/Logger.d.ts +8 -0
  120. package/dist/services/Logger.js +106 -0
  121. package/dist/services/Logger.js.map +1 -0
  122. package/dist/services/ReportingService.d.ts +8 -0
  123. package/dist/services/ReportingService.js +29 -0
  124. package/dist/services/ReportingService.js.map +1 -0
  125. package/dist/types/CoreTypes.d.ts +2 -0
  126. package/dist/types/CoreTypes.js +2 -0
  127. package/dist/types/CoreTypes.js.map +1 -0
  128. package/dist/types/universal.d.ts +25 -0
  129. package/dist/types/universal.js +2 -0
  130. package/dist/types/universal.js.map +1 -0
  131. package/enums/ActionbarRegions.ts +5 -0
  132. package/enums/ButtonEnums.ts +28 -0
  133. package/enums/ExportFormat.ts +5 -0
  134. package/enums/LogLevel.ts +9 -0
  135. package/example-code/TestifyService.ts +201 -0
  136. package/helpers/InflightRequestTracker.ts +33 -0
  137. package/helpers/LoginHelper.ts +140 -0
  138. package/helpers/UserSimulationHelper.ts +72 -0
  139. package/index.ts +28 -0
  140. package/package.json +40 -0
  141. package/page-extensions/GoToDeepLink.ts +29 -0
  142. package/page-extensions/LoginFeatures.ts +50 -0
  143. package/page-extensions/UserSimulation.ts +49 -0
  144. package/page-overrides/ClickOverride.ts +89 -0
  145. package/promptCredentials.js +113 -0
  146. package/scripts/Testwise.template.json +19 -0
  147. package/scripts/add-config.js +23 -0
  148. package/services/ConfigBuilder.ts +40 -0
  149. package/services/Logger.ts +125 -0
  150. package/services/ReportingService.ts +41 -0
  151. package/types/CoreTypes.ts +9 -0
  152. package/types/universal.ts +26 -0
@@ -0,0 +1,24 @@
1
+ import type { Locator, Page } from '@playwright/test';
2
+ import { BaseComponentObjects } from '../BaseComponentObjects.js';
3
+ export declare class ActionbarObjects extends BaseComponentObjects {
4
+ private _page;
5
+ constructor(page: Page, context?: Locator | null);
6
+ addButton: () => Locator;
7
+ cancelButton: () => Locator;
8
+ copyButton: () => Locator;
9
+ deleteButton: () => Locator;
10
+ refreshButton: () => Locator;
11
+ saveButton: () => Locator;
12
+ updateButton: () => Locator;
13
+ overflowMenuButton: () => Locator;
14
+ exportButton: () => Locator;
15
+ importButton: () => Locator;
16
+ exportImmediatelyButton: () => Locator;
17
+ massUpdateButton: () => Locator;
18
+ quickFilterButton: () => Locator;
19
+ filterButton: () => Locator;
20
+ clearAllFiltersButton: () => Locator;
21
+ restoreSortOrderButton: () => Locator;
22
+ sortButton: () => Locator;
23
+ searchInput: () => Locator;
24
+ }
@@ -0,0 +1,30 @@
1
+ import { BaseComponentObjects } from '../BaseComponentObjects.js';
2
+ export class ActionbarObjects extends BaseComponentObjects {
3
+ constructor(page, context = null) {
4
+ super(page, context);
5
+ // CRUD Buttons
6
+ this.addButton = () => this.context.locator('[data-testid="actionbar__add"]');
7
+ this.cancelButton = () => this.context.locator(' [data-testid="actionbar__cancel"]');
8
+ this.copyButton = () => this.context.locator(' [data-testid="actionbar__copy"]');
9
+ this.deleteButton = () => this.context.locator(' [data-testid="actionbar__delete"]');
10
+ this.refreshButton = () => this.context.locator(' [data-testid="actionbar__refresh"]');
11
+ this.saveButton = () => this.context.locator(' [data-testid="actionbar__save"]');
12
+ this.updateButton = () => this.context.locator(' [data-testid="actionbar__update"]');
13
+ // Overflow Menu Button
14
+ this.overflowMenuButton = () => this.context.locator(' [data-testid="actionbar__overflow-menu__button"]');
15
+ // Overflow Menu Items
16
+ this.exportButton = () => this._page.locator('[data-testid="actionbar__overflow-menu__context"] [data-testid="actionbar__export"]');
17
+ this.importButton = () => this._page.locator('[data-testid="actionbar__overflow-menu__context"] [data-testid="actionbar__import"]');
18
+ this.exportImmediatelyButton = () => this._page.locator('[data-testid="actionbar__overflow-menu__context"] [data-testid="actionbar__export-immediately"]');
19
+ this.massUpdateButton = () => this._page.locator('[data-testid="actionbar__overflow-menu__context"] [data-testid="actionbar__mass-update"]');
20
+ this.quickFilterButton = () => this._page.locator('[data-testid="actionbar__overflow-menu__context"] [data-testid="actionbar__quick-filter"]');
21
+ this.filterButton = () => this._page.locator('[data-testid="actionbar__overflow-menu__context"] [data-testid="actionbar__filter"]');
22
+ this.clearAllFiltersButton = () => this._page.locator('[data-testid="actionbar__overflow-menu__context"] [data-testid="actionbar__clear-all-filters"]');
23
+ this.restoreSortOrderButton = () => this._page.locator('[data-testid="actionbar__overflow-menu__context"] [data-testid="actionbar__restore-sort-order"]');
24
+ this.sortButton = () => this._page.locator('[data-testid="actionbar__overflow-menu__context"] [data-testid="actionbar__sort"]');
25
+ // Other Elements
26
+ this.searchInput = () => this.context.locator(' [data-testid="actionbar__search__input"] input');
27
+ this._page = page;
28
+ }
29
+ }
30
+ //# sourceMappingURL=ActionbarObjects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ActionbarObjects.js","sourceRoot":"","sources":["../../../components/actionbar/ActionbarObjects.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAElE,MAAM,OAAO,gBAAiB,SAAQ,oBAAoB;IAGxD,YAAY,IAAU,EAAE,UAA0B,IAAI;QACpD,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAIvB,eAAe;QACR,cAAS,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,gCAAgC,CAAC,CAAC;QAEzE,iBAAY,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC;QAEhF,eAAU,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAC;QAE5E,iBAAY,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC;QAEhF,kBAAa,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC;QAElF,eAAU,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAC;QAE5E,iBAAY,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC;QAEvF,uBAAuB;QAChB,uBAAkB,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,mDAAmD,CAAC,CAAC;QAE5G,sBAAsB;QAEf,iBAAY,GAAG,GAAG,EAAE,CACzB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,qFAAqF,CAAC,CAAC;QAErG,iBAAY,GAAG,GAAG,EAAE,CACzB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,qFAAqF,CAAC,CAAC;QAErG,4BAAuB,GAAG,GAAG,EAAE,CACpC,IAAI,CAAC,KAAK,CAAC,OAAO,CAChB,iGAAiG,CAClG,CAAC;QAEG,qBAAgB,GAAG,GAAG,EAAE,CAC7B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,0FAA0F,CAAC,CAAC;QAE1G,sBAAiB,GAAG,GAAG,EAAE,CAC9B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,2FAA2F,CAAC,CAAC;QAE3G,iBAAY,GAAG,GAAG,EAAE,CACzB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,qFAAqF,CAAC,CAAC;QAErG,0BAAqB,GAAG,GAAG,EAAE,CAClC,IAAI,CAAC,KAAK,CAAC,OAAO,CAChB,gGAAgG,CACjG,CAAC;QAEG,2BAAsB,GAAG,GAAG,EAAE,CACnC,IAAI,CAAC,KAAK,CAAC,OAAO,CAChB,iGAAiG,CAClG,CAAC;QAEG,eAAU,GAAG,GAAG,EAAE,CACvB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,mFAAmF,CAAC,CAAC;QAE1G,iBAAiB;QACV,gBAAW,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,iDAAiD,CAAC,CAAC;QAzDjG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;CAyDF"}
@@ -0,0 +1,12 @@
1
+ import type { Page } from '@playwright/test';
2
+ import type { ExportFormat } from '../../enums/ExportFormat.js';
3
+ export declare class ExportComponent {
4
+ private _page;
5
+ private _objects;
6
+ constructor(page: Page);
7
+ exportAllRows(): Promise<void>;
8
+ nextStep(): Promise<void>;
9
+ selectColumns(columns: string[]): Promise<void>;
10
+ selectExportFormat(format: ExportFormat): Promise<void>;
11
+ completeExport(): Promise<Record<string, string>[]>;
12
+ }
@@ -0,0 +1,55 @@
1
+ import { parse } from 'csv-parse/sync';
2
+ import { ExportComponentObjects } from './ExportComponentObjects.js';
3
+ // ToDo: Expand on the selectColumns to select by columnId/testId, or what makes sense to empower the end-user
4
+ // ToDo: Make changes to completeExport be able to parse based on the data type selected
5
+ export class ExportComponent {
6
+ constructor(page) {
7
+ this._page = page;
8
+ this._objects = new ExportComponentObjects(page);
9
+ }
10
+ async exportAllRows() {
11
+ await this._objects.exportAllRowsRadioButton().click();
12
+ await this.nextStep();
13
+ }
14
+ async nextStep() {
15
+ await this._objects.nextButton().click();
16
+ }
17
+ async selectColumns(columns) {
18
+ for (const column of columns) {
19
+ const checkbox = this._objects.selectColumnsCheckbox(column);
20
+ await checkbox.check();
21
+ }
22
+ }
23
+ async selectExportFormat(format) {
24
+ await this._objects.exportFormatDropdown().click();
25
+ await this._objects.exportFormatOption(format).click();
26
+ }
27
+ async completeExport() {
28
+ const [download] = await Promise.all([this._page.waitForEvent('download'), this._objects.completeButton().click()]);
29
+ const readableStream = await download.createReadStream();
30
+ const chunks = [];
31
+ if (!readableStream) {
32
+ throw new Error('Failed to create a readable stream for the download.');
33
+ }
34
+ for await (const chunk of readableStream) {
35
+ chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
36
+ }
37
+ const csvContent = Buffer.concat(chunks).toString('utf-8');
38
+ const records = parse(csvContent, {
39
+ columns: true,
40
+ skip_empty_lines: true,
41
+ delimiter: ',',
42
+ onRecord: (record) => {
43
+ const trimmed = {};
44
+ for (const [key, value] of Object.entries(record)) {
45
+ const trimmedKey = key.trim();
46
+ const trimmedValue = typeof value === 'string' ? value.trim() : '';
47
+ trimmed[trimmedKey] = trimmedValue;
48
+ }
49
+ return trimmed;
50
+ }
51
+ });
52
+ return records;
53
+ }
54
+ }
55
+ //# sourceMappingURL=ExportComponent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExportComponent.js","sourceRoot":"","sources":["../../../components/export/ExportComponent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { Locator, Page } from '@playwright/test';
2
+ export declare class ExportComponentObjects {
3
+ private _page;
4
+ constructor(page: Page);
5
+ exportAllRowsRadioButton: () => Locator;
6
+ nextButton: () => Locator;
7
+ selectColumnsCheckbox: (columnName: string) => Locator;
8
+ exportFormatDropdown: () => Locator;
9
+ exportFormatOption: (format: string) => Locator;
10
+ completeButton: () => Locator;
11
+ }
@@ -0,0 +1,12 @@
1
+ export class ExportComponentObjects {
2
+ constructor(page) {
3
+ this.exportAllRowsRadioButton = () => this._page.getByTestId('radio-button-option__export-all-rows-in-the-grid__title');
4
+ this.nextButton = () => this._page.getByTestId('stepper-next-button');
5
+ this.selectColumnsCheckbox = (columnName) => this._page.locator('.ag-cell', { hasText: columnName }).locator('input[type="checkbox"]');
6
+ this.exportFormatDropdown = () => this._page.getByTestId('export-format-select');
7
+ this.exportFormatOption = (format) => this._page.getByTestId(`export-format-select__${format}`);
8
+ this.completeButton = () => this._page.getByTestId('stepper-complete-button');
9
+ this._page = page;
10
+ }
11
+ }
12
+ //# sourceMappingURL=ExportComponentObjects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExportComponentObjects.js","sourceRoot":"","sources":["../../../components/export/ExportComponentObjects.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,sBAAsB;IAGjC,YAAY,IAAU;QAIf,6BAAwB,GAAG,GAAY,EAAE,CAC9C,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,yDAAyD,CAAC,CAAC;QAE7E,eAAU,GAAG,GAAY,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC;QAE1E,0BAAqB,GAAG,CAAC,UAAkB,EAAW,EAAE,CAC7D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;QAErF,yBAAoB,GAAG,GAAY,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;QAErF,uBAAkB,GAAG,CAAC,MAAc,EAAW,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,yBAAyB,MAAM,EAAE,CAAC,CAAC;QAE5G,mBAAc,GAAG,GAAY,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,yBAAyB,CAAC,CAAC;QAfvF,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;CAeF"}
@@ -0,0 +1,7 @@
1
+ import type { Locator } from '@playwright/test';
2
+ import { BaseComponent } from '../BaseComponent.js';
3
+ export declare class Form extends BaseComponent {
4
+ getLocator(context?: Locator): Promise<Locator>;
5
+ getFieldByColId: (colId: string) => Locator;
6
+ getFieldByValue: (value: string) => Locator;
7
+ }
@@ -0,0 +1,31 @@
1
+ import { BaseComponent } from '../BaseComponent.js';
2
+ export class Form extends BaseComponent {
3
+ constructor() {
4
+ super(...arguments);
5
+ this.getFieldByColId = (colId) => {
6
+ this.getComponent().then((component) => {
7
+ if (component) {
8
+ return component.getByTestId(`form-field__${colId}`);
9
+ }
10
+ });
11
+ // Fallback to page locator if component is not found
12
+ return this.page.getByTestId(`form-field__${colId}`);
13
+ };
14
+ this.getFieldByValue = (value) => {
15
+ this.getComponent().then((component) => {
16
+ if (component) {
17
+ return component.locator('[data-form="field"]', { hasText: value });
18
+ }
19
+ });
20
+ // Fallback to page locator if component is not found
21
+ return this.page.locator('[data-form="field"]', { hasText: value });
22
+ };
23
+ }
24
+ async getLocator(context) {
25
+ if (context) {
26
+ return context.getByTestId(this.id);
27
+ }
28
+ return this.page.getByTestId(this.id);
29
+ }
30
+ }
31
+ //# sourceMappingURL=Form.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Form.js","sourceRoot":"","sources":["../../../components/form/Form.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,MAAM,OAAO,IAAK,SAAQ,aAAa;IAAvC;;QAQS,oBAAe,GAAG,CAAC,KAAa,EAAW,EAAE;YAClD,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE;gBACrC,IAAI,SAAS,EAAE,CAAC;oBACd,OAAO,SAAS,CAAC,WAAW,CAAC,eAAe,KAAK,EAAE,CAAC,CAAC;gBACvD,CAAC;YACH,CAAC,CAAC,CAAC;YACH,qDAAqD;YACrD,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,KAAK,EAAE,CAAC,CAAC;QACvD,CAAC,CAAC;QAEK,oBAAe,GAAG,CAAC,KAAa,EAAW,EAAE;YAClD,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE;gBACrC,IAAI,SAAS,EAAE,CAAC;oBACd,OAAO,SAAS,CAAC,OAAO,CAAC,qBAAqB,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;gBACtE,CAAC;YACH,CAAC,CAAC,CAAC;YACH,qDAAqD;YACrD,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QACtE,CAAC,CAAC;IACJ,CAAC;IA1BQ,KAAK,CAAC,UAAU,CAAC,OAAiB;QACvC,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxC,CAAC;CAqBF"}
@@ -0,0 +1,93 @@
1
+ import type { Locator, Page } from '@playwright/test';
2
+ export declare class Grid {
3
+ private _gridObjects;
4
+ private _page;
5
+ constructor(page: Page, gridContext?: Locator | null);
6
+ /**
7
+ * Retrieves a column header element by its text content.
8
+ * @param text
9
+ * @returns
10
+ */
11
+ getColumnHeaderByText: (text: string) => Locator;
12
+ /**
13
+ * Retrieves a row element by its index.
14
+ * @param rowIndex - The index of the row to retrieve.
15
+ * @returns A Locator for the specified row.
16
+ */
17
+ getRowByIndex: (rowIndex: number) => Locator;
18
+ /**
19
+ * Retrieves a cell element by its exact text value.
20
+ * @param value - The exact text value of the cell to retrieve.
21
+ * @returns A Locator for the cell containing the specified value.
22
+ */
23
+ getCellByExactValue: (value: string) => Locator;
24
+ /**
25
+ * Opens the Excel-style filter popup for the specified grid column.
26
+ *
27
+ * This method locates the column header using its accessible name,
28
+ * then clicks the overflow menu icon within it to open the filter popup.
29
+ *
30
+ * @param columnName - The name of the column for which to open the filter popup.
31
+ * @returns A promise that resolves when the filter popup is opened.
32
+ */
33
+ openExcelStyleFilterPopup: (columnName: string) => Promise<void>;
34
+ /**
35
+ * Retrieves all rows in the grid that match a specific column value.
36
+ * @param colIdToMatchOn
37
+ * @param valueToMatch
38
+ * @returns A promise that resolves to an array of Locators for the matching rows.
39
+ */
40
+ getRowsByColValue(colIdToMatchOn: string, valueToMatch: string): Promise<Locator[]>;
41
+ /**
42
+ * Scrolls through the vertical grid viewport to ensure that all rows are loaded.
43
+ *
44
+ * This method scrolls the grid's vertical scrollbar in increments equal to the visible height of the viewport
45
+ * until no further scrolling is possible. It optionally executes a callback after each scroll step, which can
46
+ * be used to process loaded content (e.g., extract cell values).
47
+ *
48
+ * @param {Locator} scrollbar - Locator pointing to the grid's vertical scrollbar container.
49
+ * @param {() => Promise<void>} onScrollStep - Optional async callback invoked after each scroll step.
50
+ * @returns {Promise<void>} A promise that resolves once the scrolling is complete.
51
+ */
52
+ private scrollGridToLoadAllRows;
53
+ /**
54
+ * Retrieves all unique cell values from a specific column in the grid,
55
+ * including values that are only loaded upon scrolling.
56
+ *
57
+ * Internally uses vertical scrolling to ensure that all rows are loaded,
58
+ * and collects cell text content from the specified column.
59
+ *
60
+ * @param {string} colId - The ID of the column to extract values from.
61
+ * @returns {Promise<string[]>} A promise that resolves to an array of unique values from the column.
62
+ */
63
+ getCellValuesByColId(colId: string): Promise<string[]>;
64
+ /**
65
+ * Scrolls through the horizontal grid viewport to ensure all columns are loaded.
66
+ *
67
+ * This method scrolls the grid's horizontal scrollbar in increments equal to the visible width
68
+ * of the viewport until no further scrolling is possible. It optionally executes a callback
69
+ * after each scroll step, useful for collecting or processing visible column headers.
70
+ *
71
+ * @param {Locator} scrollbar - Locator pointing to the horizontal scrollbar container.
72
+ * @param {() => Promise<void>} onScrollStep - Optional async callback executed after each scroll step.
73
+ * @returns {Promise<void>} A promise that resolves when horizontal scrolling is complete.
74
+ */
75
+ private scrollGridHorizontallyToLoadAllColumns;
76
+ /**
77
+ * Retrieves all column header values from the grid, including those that require horizontal scrolling to load.
78
+ *
79
+ * This method scrolls through the grid horizontally to ensure all columns are rendered,
80
+ * collects the text content of each header, and returns a unique list of trimmed, non-empty values.
81
+ *
82
+ * @returns {Promise<string[]>} A promise that resolves to an array of unique column header values.
83
+ */
84
+ getColumnHeaderValues(): Promise<string[]>;
85
+ /**
86
+ * Filters a column in an Excel-style grid by selecting a specific value.
87
+ *
88
+ * @param columnName - The name of the column to filter.
89
+ * @param valueToSelect - The value to select in the filter dropdown.
90
+ * @returns A promise that resolves when the filtering operation is complete.
91
+ */
92
+ filterByColumnValueExcelStyle(columnName: string, valueToSelect: string): Promise<void>;
93
+ }
@@ -0,0 +1,183 @@
1
+ import { GridObjects } from './GridObjects.js';
2
+ export class Grid {
3
+ constructor(page, gridContext = null) {
4
+ /**
5
+ * Retrieves a column header element by its text content.
6
+ * @param text
7
+ * @returns
8
+ */
9
+ this.getColumnHeaderByText = (text) => this._gridObjects.columnHeaderByText(text);
10
+ /**
11
+ * Retrieves a row element by its index.
12
+ * @param rowIndex - The index of the row to retrieve.
13
+ * @returns A Locator for the specified row.
14
+ */
15
+ this.getRowByIndex = (rowIndex) => this._gridObjects.rowByIndex(rowIndex);
16
+ /**
17
+ * Retrieves a cell element by its exact text value.
18
+ * @param value - The exact text value of the cell to retrieve.
19
+ * @returns A Locator for the cell containing the specified value.
20
+ */
21
+ this.getCellByExactValue = (value) => this._gridObjects.cellByValue(value);
22
+ /**
23
+ * Opens the Excel-style filter popup for the specified grid column.
24
+ *
25
+ * This method locates the column header using its accessible name,
26
+ * then clicks the overflow menu icon within it to open the filter popup.
27
+ *
28
+ * @param columnName - The name of the column for which to open the filter popup.
29
+ * @returns A promise that resolves when the filter popup is opened.
30
+ */
31
+ this.openExcelStyleFilterPopup = async (columnName) => await this._gridObjects.menuIconByColumnHeaderName(columnName).click();
32
+ this._gridObjects = new GridObjects(page, gridContext);
33
+ this._page = page;
34
+ }
35
+ /**
36
+ * Retrieves all rows in the grid that match a specific column value.
37
+ * @param colIdToMatchOn
38
+ * @param valueToMatch
39
+ * @returns A promise that resolves to an array of Locators for the matching rows.
40
+ */
41
+ async getRowsByColValue(colIdToMatchOn, valueToMatch) {
42
+ const allRows = await this._gridObjects.rows().all();
43
+ const filteredRows = await Promise.all(allRows.map(async (row) => {
44
+ const text = await row.locator(`[col-id="${colIdToMatchOn}"]`).textContent();
45
+ return text === valueToMatch ? row : null;
46
+ }));
47
+ return filteredRows.filter((row) => row !== null);
48
+ }
49
+ /**
50
+ * Scrolls through the vertical grid viewport to ensure that all rows are loaded.
51
+ *
52
+ * This method scrolls the grid's vertical scrollbar in increments equal to the visible height of the viewport
53
+ * until no further scrolling is possible. It optionally executes a callback after each scroll step, which can
54
+ * be used to process loaded content (e.g., extract cell values).
55
+ *
56
+ * @param {Locator} scrollbar - Locator pointing to the grid's vertical scrollbar container.
57
+ * @param {() => Promise<void>} onScrollStep - Optional async callback invoked after each scroll step.
58
+ * @returns {Promise<void>} A promise that resolves once the scrolling is complete.
59
+ */
60
+ async scrollGridToLoadAllRows(scrollbar, onScrollStep) {
61
+ // Reset scroll to the top to start from the beginning
62
+ await scrollbar.evaluate((el) => {
63
+ el.scrollTop = 0;
64
+ });
65
+ let lastScrollTop = -1;
66
+ while (true) {
67
+ // Get the current vertical scroll position
68
+ const scrollTop = await scrollbar.evaluate((el) => el.scrollTop);
69
+ // Stop if the scroll position hasn’t changed — end of scroll reached
70
+ if (scrollTop === lastScrollTop)
71
+ break;
72
+ lastScrollTop = scrollTop;
73
+ // Scroll one viewport height down
74
+ await scrollbar.evaluate((el) => {
75
+ el.scrollBy({ top: el.clientHeight, behavior: 'instant' });
76
+ });
77
+ // Optional callback to collect or act on content loaded during this scroll step
78
+ if (onScrollStep) {
79
+ await onScrollStep();
80
+ }
81
+ // Wait briefly for the new rows to render
82
+ await this._page.waitForTimeout(100);
83
+ }
84
+ }
85
+ /**
86
+ * Retrieves all unique cell values from a specific column in the grid,
87
+ * including values that are only loaded upon scrolling.
88
+ *
89
+ * Internally uses vertical scrolling to ensure that all rows are loaded,
90
+ * and collects cell text content from the specified column.
91
+ *
92
+ * @param {string} colId - The ID of the column to extract values from.
93
+ * @returns {Promise<string[]>} A promise that resolves to an array of unique values from the column.
94
+ */
95
+ async getCellValuesByColId(colId) {
96
+ // Locator for vertical scrollbar used to scroll through grid rows
97
+ const scrollbar = this._gridObjects.verticalScrollbar();
98
+ // Locator for cells in the specified column using AG Grid col-id
99
+ const cellsLocator = this._gridObjects.cellsByColumnId(colId);
100
+ // Use a Set to ensure uniqueness of values
101
+ const collected = new Set();
102
+ // Scroll the grid and collect visible cell values after each scroll step
103
+ await this.scrollGridToLoadAllRows(scrollbar, async () => {
104
+ const visibleValues = await cellsLocator.allTextContents();
105
+ for (const value of visibleValues.map((value) => value.trim()).filter(Boolean)) {
106
+ collected.add(value);
107
+ }
108
+ });
109
+ // Return unique values as an array
110
+ return Array.from(collected);
111
+ }
112
+ /**
113
+ * Scrolls through the horizontal grid viewport to ensure all columns are loaded.
114
+ *
115
+ * This method scrolls the grid's horizontal scrollbar in increments equal to the visible width
116
+ * of the viewport until no further scrolling is possible. It optionally executes a callback
117
+ * after each scroll step, useful for collecting or processing visible column headers.
118
+ *
119
+ * @param {Locator} scrollbar - Locator pointing to the horizontal scrollbar container.
120
+ * @param {() => Promise<void>} onScrollStep - Optional async callback executed after each scroll step.
121
+ * @returns {Promise<void>} A promise that resolves when horizontal scrolling is complete.
122
+ */
123
+ async scrollGridHorizontallyToLoadAllColumns(scrollbar, onScrollStep) {
124
+ // Reset scroll to the far left
125
+ await scrollbar.evaluate((el) => {
126
+ el.scrollLeft = 0;
127
+ });
128
+ let lastScrollLeft = -1;
129
+ while (true) {
130
+ const scrollLeft = await scrollbar.evaluate((el) => el.scrollLeft);
131
+ // Exit loop if no further horizontal scroll is possible
132
+ if (scrollLeft === lastScrollLeft)
133
+ break;
134
+ lastScrollLeft = scrollLeft;
135
+ // Scroll one viewport width to the right
136
+ await scrollbar.evaluate((el) => {
137
+ el.scrollBy({ left: el.clientWidth, behavior: 'instant' });
138
+ });
139
+ if (onScrollStep) {
140
+ await onScrollStep();
141
+ }
142
+ await this._page.waitForTimeout(100); // Allow time for rendering
143
+ }
144
+ }
145
+ /**
146
+ * Retrieves all column header values from the grid, including those that require horizontal scrolling to load.
147
+ *
148
+ * This method scrolls through the grid horizontally to ensure all columns are rendered,
149
+ * collects the text content of each header, and returns a unique list of trimmed, non-empty values.
150
+ *
151
+ * @returns {Promise<string[]>} A promise that resolves to an array of unique column header values.
152
+ */
153
+ async getColumnHeaderValues() {
154
+ const scrollbar = this._gridObjects.horizontalScrollbar();
155
+ const headersLocator = this._gridObjects.columnHeaders();
156
+ const collected = new Set();
157
+ await this.scrollGridHorizontallyToLoadAllColumns(scrollbar, async () => {
158
+ const visibleHeaders = await headersLocator.allTextContents();
159
+ for (const header of visibleHeaders.map((header) => header.trim()).filter(Boolean)) {
160
+ collected.add(header);
161
+ }
162
+ });
163
+ return Array.from(collected);
164
+ }
165
+ /**
166
+ * Filters a column in an Excel-style grid by selecting a specific value.
167
+ *
168
+ * @param columnName - The name of the column to filter.
169
+ * @param valueToSelect - The value to select in the filter dropdown.
170
+ * @returns A promise that resolves when the filtering operation is complete.
171
+ */
172
+ async filterByColumnValueExcelStyle(columnName, valueToSelect) {
173
+ await this.openExcelStyleFilterPopup(columnName);
174
+ const popup = this._gridObjects.excelStyleFilterPopup();
175
+ await popup.waitFor({ state: 'visible' });
176
+ const checkbox = this._gridObjects.excelStyleFilterPopupOptionByText(valueToSelect);
177
+ await checkbox.check();
178
+ // Click outside the popup to close it
179
+ await this._gridObjects.gridCell().first().click();
180
+ await popup.waitFor({ state: 'detached' });
181
+ }
182
+ }
183
+ //# sourceMappingURL=Grid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Grid.js","sourceRoot":"","sources":["../../../components/grid/Grid.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { Locator, Page } from '@playwright/test';
2
+ import { BaseComponentObjects } from '../BaseComponentObjects.js';
3
+ export declare class GridObjects extends BaseComponentObjects {
4
+ private _page;
5
+ constructor(page: Page, context?: Locator | null);
6
+ columnHeaderByText: (text: string) => Locator;
7
+ columnHeaders: () => Locator;
8
+ columnHeaderByName: (columnName: string) => Locator;
9
+ menuIconByColumnHeaderName: (columnName: string) => Locator;
10
+ rowByIndex: (row: number) => Locator;
11
+ cellByValue: (value: string) => Locator;
12
+ rows: () => Locator;
13
+ verticalScrollbar: () => Locator;
14
+ horizontalScrollbar: () => Locator;
15
+ cellsByColumnId: (colId: string) => Locator;
16
+ columnByRowLocator: (rowLocator: Locator) => Locator;
17
+ excelStyleFilterPopup: () => Locator;
18
+ excelStyleFilterPopupOptionByText: (optionText: string) => Locator;
19
+ gridCell: () => Locator;
20
+ }
@@ -0,0 +1,25 @@
1
+ import { BaseComponentObjects } from '../BaseComponentObjects.js';
2
+ export class GridObjects extends BaseComponentObjects {
3
+ constructor(page, context = null) {
4
+ super(page, context);
5
+ this.columnHeaderByText = (text) => this.context.locator('[role="columnheader"]', { hasText: text });
6
+ this.columnHeaders = () => this.context.locator('[role="columnheader"]');
7
+ this.columnHeaderByName = (columnName) => this.context.getByRole('columnheader', { name: columnName });
8
+ this.menuIconByColumnHeaderName = (columnName) => this.columnHeaderByName(columnName).getByTestId('grid__custom__menu__icon');
9
+ this.rowByIndex = (row) => this.context.locator(`[role="row"][row-index="${row}"]`);
10
+ this.cellByValue = (value) => this.context.locator('[role="button"]', { hasText: new RegExp(`^${value}$`) });
11
+ this.rows = () => this.context.locator('[role="row"]');
12
+ this.verticalScrollbar = () => this.context.locator('.ag-body-vertical-scroll-viewport');
13
+ this.horizontalScrollbar = () => this.context.locator('.ag-body-horizontal-scroll-viewport');
14
+ this.cellsByColumnId = (colId) => this.context.locator(`[col-id="${colId}"] .value-renderer`);
15
+ this.columnByRowLocator = (rowLocator) => rowLocator.locator('.ag-cell');
16
+ this.excelStyleFilterPopup = () => this._page.locator('.ag-popup-child[role="dialog"]');
17
+ this.excelStyleFilterPopupOptionByText = (optionText) => this.excelStyleFilterPopup()
18
+ .locator('[data-testid$="list-option-name"]', { hasText: optionText })
19
+ .locator('xpath=..')
20
+ .locator('input[type="checkbox"]');
21
+ this.gridCell = () => this.context.locator('[role="gridcell"]');
22
+ this._page = page;
23
+ }
24
+ }
25
+ //# sourceMappingURL=GridObjects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GridObjects.js","sourceRoot":"","sources":["../../../components/grid/GridObjects.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAElE,MAAM,OAAO,WAAY,SAAQ,oBAAoB;IAGnD,YAAY,IAAU,EAAE,UAA0B,IAAI;QACpD,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAIhB,uBAAkB,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,uBAAuB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAExG,kBAAa,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;QAEpE,uBAAkB,GAAG,CAAC,UAAkB,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;QAE1G,+BAA0B,GAAG,CAAC,UAAkB,EAAE,EAAE,CACzD,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,0BAA0B,CAAC,CAAC;QAEvE,eAAU,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,2BAA2B,GAAG,IAAI,CAAC,CAAC;QAEvF,gBAAW,GAAG,CAAC,KAAa,EAAE,EAAE,CACrC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,OAAO,EAAE,IAAI,MAAM,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC;QAE1E,SAAI,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAElD,sBAAiB,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,mCAAmC,CAAC,CAAC;QAEpF,wBAAmB,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC;QAExF,oBAAe,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,KAAK,oBAAoB,CAAC,CAAC;QAEjG,uBAAkB,GAAG,CAAC,UAAmB,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAE7E,0BAAqB,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,gCAAgC,CAAC,CAAC;QAEnF,sCAAiC,GAAG,CAAC,UAAkB,EAAE,EAAE,CAChE,IAAI,CAAC,qBAAqB,EAAE;aACzB,OAAO,CAAC,mCAAmC,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;aACrE,OAAO,CAAC,UAAU,CAAC;aACnB,OAAO,CAAC,wBAAwB,CAAC,CAAC;QAEhC,aAAQ,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;QAnChE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;CAmCF"}
@@ -0,0 +1,6 @@
1
+ export * from './form/Form.js';
2
+ export * from './grid/Grid.js';
3
+ export * from './Splitter.js';
4
+ export * from './actionbar/Actionbar.js';
5
+ export * from './export/ExportComponent.js';
6
+ export * from './pop-up/PopUpComponent.js';
@@ -0,0 +1,7 @@
1
+ export * from './form/Form.js';
2
+ export * from './grid/Grid.js';
3
+ export * from './Splitter.js';
4
+ export * from './actionbar/Actionbar.js';
5
+ export * from './export/ExportComponent.js';
6
+ export * from './pop-up/PopUpComponent.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../components/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,0BAA0B,CAAC;AACzC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { Page } from '@playwright/test';
2
+ export declare class PopUpComponent {
3
+ private _objects;
4
+ constructor(page: Page);
5
+ confirmYes: () => Promise<void>;
6
+ confirmNo: () => Promise<void>;
7
+ }
@@ -0,0 +1,9 @@
1
+ import { PopUpComponentObjects } from './PopUpComponentModels.js';
2
+ export class PopUpComponent {
3
+ constructor(page) {
4
+ this.confirmYes = async () => await this._objects.actionYesButton().click();
5
+ this.confirmNo = async () => await this._objects.actionNoButton().click();
6
+ this._objects = new PopUpComponentObjects(page);
7
+ }
8
+ }
9
+ //# sourceMappingURL=PopUpComponent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PopUpComponent.js","sourceRoot":"","sources":["../../../components/pop-up/PopUpComponent.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAElE,MAAM,OAAO,cAAc;IAGzB,YAAY,IAAU;QAIf,eAAU,GAAG,KAAK,IAAI,EAAE,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC,KAAK,EAAE,CAAC;QAEvE,cAAS,GAAG,KAAK,IAAI,EAAE,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE,CAAC;QAL1E,IAAI,CAAC,QAAQ,GAAG,IAAI,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC;CAKF"}
@@ -0,0 +1,7 @@
1
+ import type { Page } from '@playwright/test';
2
+ export declare class PopUpComponentObjects {
3
+ private _page;
4
+ constructor(page: Page);
5
+ actionNoButton: () => import("@playwright/test").Locator;
6
+ actionYesButton: () => import("@playwright/test").Locator;
7
+ }
@@ -0,0 +1,8 @@
1
+ export class PopUpComponentObjects {
2
+ constructor(page) {
3
+ this.actionNoButton = () => this._page.getByTestId('popup__translatemessage__actions__no');
4
+ this.actionYesButton = () => this._page.getByTestId('popup__translatemessage__actions__yes');
5
+ this._page = page;
6
+ }
7
+ }
8
+ //# sourceMappingURL=PopUpComponentModels.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PopUpComponentModels.js","sourceRoot":"","sources":["../../../components/pop-up/PopUpComponentModels.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,qBAAqB;IAGhC,YAAY,IAAU;QAIf,mBAAc,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,sCAAsC,CAAC,CAAC;QAEtF,oBAAe,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,uCAAuC,CAAC,CAAC;QAL7F,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;CAKF"}
@@ -0,0 +1,10 @@
1
+ {
2
+ "defaultApplication": "",
3
+ "defaultPlatform": 3,
4
+ "loginOptionsDisabled": false,
5
+ "loginOptionsHidden": false,
6
+ "installNotificationDisabled": true,
7
+ "installNotificationExpirationInDays": 30,
8
+ "useServiceWorker": false,
9
+ "useFormFieldBackgroundColor": true
10
+ }