@thinkwise/testwise 0.2.20 → 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.
- package/Testwise.ts +2 -0
- package/artifact-builder/SelectorBuilder.ts +2 -2
- package/artifact-builder/SubjectComponentGenerator.ts +21 -12
- package/artifact-builder/SubjectGenerator.ts +24 -8
- package/components/action-bar/ActionBar.ts +7 -7
- package/components/action-bar/CustomActionBar.ts +0 -5
- package/components/cardlist/Cardlist.ts +3 -3
- package/components/chart/Chart.ts +3 -3
- package/components/combined-filter/CombinedFilter.ts +3 -3
- package/components/cube-view-bar/CubeViewBar.ts +3 -3
- package/components/filter/ExcelStyleFilterPopup.ts +29 -0
- package/components/filter/ExcelStyleFilterPopupObjects.ts +20 -0
- package/components/filter/FilterForm.ts +3 -3
- package/components/filter/FilterPopup.ts +187 -0
- package/components/filter/FilterPopupObjects.ts +63 -0
- package/components/filter/ManagePrefilterPopup.ts +44 -0
- package/components/filter/ManagePrefilterPopupObjects.ts +28 -0
- package/components/form/Form.ts +3 -3
- package/components/grid/Grid.ts +15 -119
- package/components/grid/GridObjects.ts +0 -4
- package/components/index.ts +4 -0
- package/components/maps/Maps.ts +3 -3
- package/components/menu/ListBarMenuComponent.ts +11 -0
- package/components/menu/ListBarMenuComponentObjects.ts +6 -0
- package/components/pivot-grid/PivotGrid.ts +3 -3
- package/components/pivot-grid/PivotGridFieldList.ts +3 -3
- package/components/pop-up/AllRowsPopUp.ts +29 -0
- package/components/pop-up/AllRowsPopUpObjects.ts +22 -0
- package/components/prefilter-list/PrefilterList.ts +3 -3
- package/components/preview/Preview.ts +3 -3
- package/components/report-bar/ReportBar.ts +3 -3
- package/components/report-tiles/ReportTiles.ts +3 -3
- package/components/scheduler/Scheduler.ts +3 -3
- package/components/splitter/Splitter.ts +3 -3
- package/components/tab/BaseTab.ts +3 -3
- package/components/tab/DetailTabPage.ts +4 -4
- package/components/tab/Tab.ts +4 -4
- package/components/task/TaskBar.ts +3 -3
- package/components/task/TaskTiles.ts +3 -3
- package/components/topbar/TopBar.ts +2 -0
- package/components/tree-view/TreeView.ts +3 -3
- package/controls/DateControl.ts +6 -6
- package/controls/DateControlObjects.ts +0 -0
- package/controls/FormComboBox.ts +7 -7
- package/controls/FormComboBoxObjects.ts +0 -0
- package/controls/GridColumnControl.ts +68 -0
- package/controls/GridColumnControlObjects.ts +20 -0
- package/controls/InputFieldControl.ts +6 -6
- package/controls/InputFieldControlObjects.ts +0 -0
- package/controls/LookupDropdown.ts +58 -16
- package/controls/index.ts +1 -0
- package/dist/Testwise.d.ts +1 -0
- package/dist/Testwise.js +1 -0
- package/dist/Testwise.js.map +1 -1
- package/dist/artifact-builder/SelectorBuilder.d.ts +1 -1
- package/dist/artifact-builder/SelectorBuilder.js +2 -2
- package/dist/artifact-builder/SelectorBuilder.js.map +1 -1
- package/dist/artifact-builder/SubjectComponentGenerator.js +18 -12
- package/dist/artifact-builder/SubjectComponentGenerator.js.map +1 -1
- package/dist/artifact-builder/SubjectGenerator.d.ts +1 -0
- package/dist/artifact-builder/SubjectGenerator.js +20 -8
- package/dist/artifact-builder/SubjectGenerator.js.map +1 -1
- package/dist/components/action-bar/ActionBar.d.ts +2 -2
- package/dist/components/action-bar/ActionBar.js +7 -7
- package/dist/components/action-bar/ActionBar.js.map +1 -1
- package/dist/components/action-bar/CustomActionBar.d.ts +0 -2
- package/dist/components/action-bar/CustomActionBar.js +0 -3
- package/dist/components/action-bar/CustomActionBar.js.map +1 -1
- package/dist/components/cardlist/Cardlist.d.ts +2 -2
- package/dist/components/cardlist/Cardlist.js +2 -2
- package/dist/components/cardlist/Cardlist.js.map +1 -1
- package/dist/components/chart/Chart.d.ts +2 -2
- package/dist/components/chart/Chart.js +2 -2
- package/dist/components/chart/Chart.js.map +1 -1
- package/dist/components/combined-filter/CombinedFilter.d.ts +2 -2
- package/dist/components/combined-filter/CombinedFilter.js +2 -2
- package/dist/components/combined-filter/CombinedFilter.js.map +1 -1
- package/dist/components/cube-view-bar/CubeViewBar.d.ts +2 -2
- package/dist/components/cube-view-bar/CubeViewBar.js +2 -2
- package/dist/components/cube-view-bar/CubeViewBar.js.map +1 -1
- package/dist/components/filter/ExcelStyleFilterPopup.d.ts +9 -0
- package/dist/components/filter/ExcelStyleFilterPopup.js +22 -0
- package/dist/components/filter/ExcelStyleFilterPopup.js.map +1 -0
- package/dist/components/filter/ExcelStyleFilterPopupObjects.d.ts +9 -0
- package/dist/components/filter/ExcelStyleFilterPopupObjects.js +13 -0
- package/dist/components/filter/ExcelStyleFilterPopupObjects.js.map +1 -0
- package/dist/components/filter/FilterForm.d.ts +2 -2
- package/dist/components/filter/FilterForm.js +2 -2
- package/dist/components/filter/FilterForm.js.map +1 -1
- package/dist/components/filter/FilterPopup.d.ts +41 -0
- package/dist/components/filter/FilterPopup.js +126 -0
- package/dist/components/filter/FilterPopup.js.map +1 -0
- package/dist/components/filter/FilterPopupObjects.d.ts +29 -0
- package/dist/components/filter/FilterPopupObjects.js +30 -0
- package/dist/components/filter/FilterPopupObjects.js.map +1 -0
- package/dist/components/filter/ManagePrefilterPopup.d.ts +14 -0
- package/dist/components/filter/ManagePrefilterPopup.js +33 -0
- package/dist/components/filter/ManagePrefilterPopup.js.map +1 -0
- package/dist/components/filter/ManagePrefilterPopupObjects.d.ts +11 -0
- package/dist/components/filter/ManagePrefilterPopupObjects.js +19 -0
- package/dist/components/filter/ManagePrefilterPopupObjects.js.map +1 -0
- package/dist/components/form/Form.d.ts +2 -2
- package/dist/components/form/Form.js +2 -2
- package/dist/components/form/Form.js.map +1 -1
- package/dist/components/grid/Grid.d.ts +4 -36
- package/dist/components/grid/Grid.js +14 -102
- package/dist/components/grid/Grid.js.map +1 -1
- package/dist/components/grid/GridObjects.d.ts +0 -2
- package/dist/components/grid/GridObjects.js +0 -2
- package/dist/components/grid/GridObjects.js.map +1 -1
- package/dist/components/index.d.ts +4 -0
- package/dist/components/index.js +4 -0
- package/dist/components/index.js.map +1 -1
- package/dist/components/maps/Maps.d.ts +2 -2
- package/dist/components/maps/Maps.js +2 -2
- package/dist/components/maps/Maps.js.map +1 -1
- package/dist/components/menu/ListBarMenuComponent.d.ts +6 -0
- package/dist/components/menu/ListBarMenuComponent.js +10 -0
- package/dist/components/menu/ListBarMenuComponent.js.map +1 -1
- package/dist/components/menu/ListBarMenuComponentObjects.d.ts +2 -0
- package/dist/components/menu/ListBarMenuComponentObjects.js +2 -0
- package/dist/components/menu/ListBarMenuComponentObjects.js.map +1 -1
- package/dist/components/pivot-grid/PivotGrid.d.ts +2 -2
- package/dist/components/pivot-grid/PivotGrid.js +2 -2
- package/dist/components/pivot-grid/PivotGrid.js.map +1 -1
- package/dist/components/pivot-grid/PivotGridFieldList.d.ts +2 -2
- package/dist/components/pivot-grid/PivotGridFieldList.js +2 -2
- package/dist/components/pivot-grid/PivotGridFieldList.js.map +1 -1
- package/dist/components/pop-up/AllRowsPopUp.d.ts +12 -0
- package/dist/components/pop-up/AllRowsPopUp.js +19 -0
- package/dist/components/pop-up/AllRowsPopUp.js.map +1 -0
- package/dist/components/pop-up/AllRowsPopUpObjects.d.ts +11 -0
- package/dist/components/pop-up/AllRowsPopUpObjects.js +13 -0
- package/dist/components/pop-up/AllRowsPopUpObjects.js.map +1 -0
- package/dist/components/prefilter-list/PrefilterList.d.ts +2 -2
- package/dist/components/prefilter-list/PrefilterList.js +2 -2
- package/dist/components/prefilter-list/PrefilterList.js.map +1 -1
- package/dist/components/preview/Preview.d.ts +2 -2
- package/dist/components/preview/Preview.js +2 -2
- package/dist/components/preview/Preview.js.map +1 -1
- package/dist/components/report-bar/ReportBar.d.ts +2 -2
- package/dist/components/report-bar/ReportBar.js +2 -2
- package/dist/components/report-bar/ReportBar.js.map +1 -1
- package/dist/components/report-tiles/ReportTiles.d.ts +2 -2
- package/dist/components/report-tiles/ReportTiles.js +2 -2
- package/dist/components/report-tiles/ReportTiles.js.map +1 -1
- package/dist/components/scheduler/Scheduler.d.ts +2 -2
- package/dist/components/scheduler/Scheduler.js +2 -2
- package/dist/components/scheduler/Scheduler.js.map +1 -1
- package/dist/components/splitter/Splitter.d.ts +2 -2
- package/dist/components/splitter/Splitter.js +2 -2
- package/dist/components/splitter/Splitter.js.map +1 -1
- package/dist/components/tab/BaseTab.d.ts +2 -2
- package/dist/components/tab/BaseTab.js +2 -2
- package/dist/components/tab/BaseTab.js.map +1 -1
- package/dist/components/tab/DetailTabPage.d.ts +2 -2
- package/dist/components/tab/DetailTabPage.js +3 -3
- package/dist/components/tab/DetailTabPage.js.map +1 -1
- package/dist/components/tab/Tab.d.ts +2 -2
- package/dist/components/tab/Tab.js +3 -3
- package/dist/components/tab/Tab.js.map +1 -1
- package/dist/components/task/TaskBar.d.ts +2 -2
- package/dist/components/task/TaskBar.js +2 -2
- package/dist/components/task/TaskBar.js.map +1 -1
- package/dist/components/task/TaskTiles.d.ts +2 -2
- package/dist/components/task/TaskTiles.js +2 -2
- package/dist/components/task/TaskTiles.js.map +1 -1
- package/dist/components/topbar/TopBar.d.ts +1 -0
- package/dist/components/topbar/TopBar.js +1 -0
- package/dist/components/topbar/TopBar.js.map +1 -1
- package/dist/components/tree-view/TreeView.d.ts +2 -2
- package/dist/components/tree-view/TreeView.js +2 -2
- package/dist/components/tree-view/TreeView.js.map +1 -1
- package/dist/controls/DateControl.d.ts +3 -3
- package/dist/controls/DateControl.js +5 -5
- package/dist/controls/DateControl.js.map +1 -1
- package/dist/controls/DateControlObjects.d.ts +1 -0
- package/dist/controls/DateControlObjects.js +2 -0
- package/dist/controls/DateControlObjects.js.map +1 -0
- package/dist/controls/FormComboBox.d.ts +2 -2
- package/dist/controls/FormComboBox.js +6 -6
- package/dist/controls/FormComboBox.js.map +1 -1
- package/dist/controls/FormComboBoxObjects.d.ts +1 -0
- package/dist/controls/FormComboBoxObjects.js +2 -0
- package/dist/controls/FormComboBoxObjects.js.map +1 -0
- package/dist/controls/GridColumnControl.d.ts +10 -0
- package/dist/controls/GridColumnControl.js +43 -0
- package/dist/controls/GridColumnControl.js.map +1 -0
- package/dist/controls/GridColumnControlObjects.d.ts +9 -0
- package/dist/controls/GridColumnControlObjects.js +13 -0
- package/dist/controls/GridColumnControlObjects.js.map +1 -0
- package/dist/controls/InputFieldControl.d.ts +3 -3
- package/dist/controls/InputFieldControl.js +5 -5
- package/dist/controls/InputFieldControl.js.map +1 -1
- package/dist/controls/InputFieldControlObjects.d.ts +1 -0
- package/dist/controls/InputFieldControlObjects.js +2 -0
- package/dist/controls/InputFieldControlObjects.js.map +1 -0
- package/dist/controls/LookupDropdown.d.ts +6 -1
- package/dist/controls/LookupDropdown.js +42 -13
- package/dist/controls/LookupDropdown.js.map +1 -1
- package/dist/controls/index.d.ts +1 -0
- package/dist/controls/index.js +1 -0
- package/dist/controls/index.js.map +1 -1
- package/dist/enums/ElementTypes.d.ts +1 -1
- package/dist/enums/ElementTypes.js +1 -1
- package/dist/enums/ElementTypes.js.map +1 -1
- package/dist/helpers/FlightTracker.d.ts +7 -0
- package/dist/helpers/FlightTracker.js +63 -11
- package/dist/helpers/FlightTracker.js.map +1 -1
- package/dist/helpers/LoginHelper.d.ts +11 -3
- package/dist/helpers/LoginHelper.js +59 -13
- package/dist/helpers/LoginHelper.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/page-extensions/GlobalComponents.d.ts +2 -1
- package/dist/page-extensions/GlobalComponents.js +2 -1
- package/dist/page-extensions/GlobalComponents.js.map +1 -1
- package/dist/page-overrides/ClickOverride.d.ts +1 -0
- package/dist/page-overrides/ClickOverride.js +57 -46
- package/dist/page-overrides/ClickOverride.js.map +1 -1
- package/dist/types/Universal.d.ts +1 -0
- package/enums/ElementTypes.ts +1 -1
- package/helpers/FlightTracker.ts +71 -11
- package/helpers/LoginHelper.ts +79 -21
- package/index.ts +1 -1
- package/package.json +6 -5
- package/page-extensions/GlobalComponents.ts +3 -0
- package/page-overrides/ClickOverride.ts +69 -64
- package/types/Universal.ts +1 -0
package/controls/DateControl.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
2
|
/* biome-ignore-all lint/suspicious/noExplicitAny: reason42 */
|
|
3
|
-
import type { Locator
|
|
3
|
+
import type { Locator } from '@playwright/test';
|
|
4
4
|
|
|
5
5
|
export type IDateControl = Locator & IDateControlCore;
|
|
6
6
|
|
|
@@ -15,8 +15,8 @@ export class DateControl implements IDateControlCore {
|
|
|
15
15
|
private _dateFieldLocator: Locator;
|
|
16
16
|
private _inputLocator: Locator;
|
|
17
17
|
|
|
18
|
-
constructor(
|
|
19
|
-
this._dateFieldLocator =
|
|
18
|
+
constructor(context: Locator, id: string) {
|
|
19
|
+
this._dateFieldLocator = context.getByTestId(`form-field__${id}`);
|
|
20
20
|
this._inputLocator = this._dateFieldLocator.locator('input');
|
|
21
21
|
}
|
|
22
22
|
|
|
@@ -47,9 +47,9 @@ export class DateControl implements IDateControlCore {
|
|
|
47
47
|
}
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
-
export function createDateControl(
|
|
51
|
-
const inputFieldControl = new DateControl(
|
|
52
|
-
const locator =
|
|
50
|
+
export function createDateControl(context: Locator, id: string): IDateControl {
|
|
51
|
+
const inputFieldControl = new DateControl(context, id);
|
|
52
|
+
const locator = context.getByTestId(`form-field__${id}`);
|
|
53
53
|
|
|
54
54
|
return new Proxy(inputFieldControl, {
|
|
55
55
|
get(target, prop, receiver) {
|
|
File without changes
|
package/controls/FormComboBox.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
2
|
/* biome-ignore-all lint/suspicious/noExplicitAny: Reason42 */
|
|
3
|
-
import type { Locator
|
|
3
|
+
import type { Locator } from '@playwright/test';
|
|
4
4
|
|
|
5
5
|
export type IFormComboBox = Locator & IFormComboBoxCore;
|
|
6
6
|
|
|
@@ -16,10 +16,10 @@ class FormComboBox implements IFormComboBoxCore {
|
|
|
16
16
|
private _autoCompleteMenu: Locator;
|
|
17
17
|
private _id: string;
|
|
18
18
|
|
|
19
|
-
constructor(
|
|
19
|
+
constructor(context: Locator, id: string) {
|
|
20
20
|
this._id = id;
|
|
21
|
-
this._formFieldLocator =
|
|
22
|
-
this._autoCompleteMenu =
|
|
21
|
+
this._formFieldLocator = context.getByTestId(`form-field__${id}`);
|
|
22
|
+
this._autoCompleteMenu = context.getByTestId(`form-field__${id}__select__options-list`);
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
async selectOption(optionText: string): Promise<void> {
|
|
@@ -53,9 +53,9 @@ class FormComboBox implements IFormComboBoxCore {
|
|
|
53
53
|
}
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
-
export function createFormComboBox(
|
|
57
|
-
const comboBox = new FormComboBox(
|
|
58
|
-
const locator =
|
|
56
|
+
export function createFormComboBox(context: Locator, id: string): IFormComboBox {
|
|
57
|
+
const comboBox = new FormComboBox(context, id);
|
|
58
|
+
const locator = context.getByTestId(`form-field__${id}`);
|
|
59
59
|
|
|
60
60
|
return new Proxy(comboBox, {
|
|
61
61
|
get(target, prop, receiver) {
|
|
File without changes
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
+
/* biome-ignore-all lint/suspicious/noExplicitAny: Reason42 */
|
|
3
|
+
import type { Locator } from '@playwright/test';
|
|
4
|
+
import { Grid } from '../components/grid/Grid.js';
|
|
5
|
+
import { escapeRegex } from '../index.js';
|
|
6
|
+
import { GridColumnControlObjects } from './GridColumnControlObjects.js';
|
|
7
|
+
|
|
8
|
+
export type IGridColumnControl = Locator & IGridColumnControlCore;
|
|
9
|
+
|
|
10
|
+
export type IGridColumnControlCore = {
|
|
11
|
+
getColumnHeader(): Promise<Locator>;
|
|
12
|
+
getCellByExactValue(value: string): Locator;
|
|
13
|
+
getCellValues(): Promise<string[]>;
|
|
14
|
+
filterByColumnValueExcelStyle(value: string, deselectAll?: boolean): Promise<void>;
|
|
15
|
+
openExcelStyleFilterPopup(): Promise<void>;
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
class GridColumnControl implements IGridColumnControlCore {
|
|
19
|
+
private _grid: Grid;
|
|
20
|
+
private _id: string;
|
|
21
|
+
private _objects: GridColumnControlObjects;
|
|
22
|
+
|
|
23
|
+
constructor(gridContext: Locator, id: string) {
|
|
24
|
+
this._id = id.replace(/-/g, '_');
|
|
25
|
+
this._objects = new GridColumnControlObjects(gridContext, this._id);
|
|
26
|
+
this._grid = new Grid(gridContext);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
public async openExcelStyleFilterPopup(): Promise<void> {
|
|
30
|
+
await this._grid.openExcelStyleFilterPopup(this._id);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
public async getColumnHeader(): Promise<Locator> {
|
|
34
|
+
return await this._objects.columnHeader();
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
public getCellByExactValue(value: string): Locator {
|
|
38
|
+
const valueToFindRegex = new RegExp(`^${escapeRegex(value)}$`);
|
|
39
|
+
return this._objects.cellByValue(valueToFindRegex);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
public async getCellValues(): Promise<string[]> {
|
|
43
|
+
return await this._grid.getCellValuesByColId(this._id);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
public async filterByColumnValueExcelStyle(value: string, deselectAll?: boolean): Promise<void> {
|
|
47
|
+
await this._grid.filterByColumnValueExcelStyle(this._id, value, deselectAll);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export function createGridColumnControl(gridContext: Locator, id: string): IGridColumnControl {
|
|
52
|
+
const columnControl = new GridColumnControl(gridContext, id);
|
|
53
|
+
const locator = gridContext.locator(`[col-id="${id}"]`);
|
|
54
|
+
|
|
55
|
+
return new Proxy(columnControl, {
|
|
56
|
+
get(target, prop, receiver) {
|
|
57
|
+
if (prop in target) {
|
|
58
|
+
return Reflect.get(target, prop, receiver);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
const value = (locator as any)[prop];
|
|
62
|
+
if (typeof value === 'function') {
|
|
63
|
+
return value.bind(locator);
|
|
64
|
+
}
|
|
65
|
+
return value;
|
|
66
|
+
}
|
|
67
|
+
}) as unknown as IGridColumnControl;
|
|
68
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { Locator } from '@playwright/test';
|
|
2
|
+
import { BaseComponentObjects } from '../components/BaseComponentObjects.js';
|
|
3
|
+
|
|
4
|
+
export class GridColumnControlObjects extends BaseComponentObjects {
|
|
5
|
+
private _id: string;
|
|
6
|
+
|
|
7
|
+
constructor(gridContext: Locator, columnId: string) {
|
|
8
|
+
super(gridContext.page(), gridContext);
|
|
9
|
+
this._id = columnId;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
public column = () => this.context.locator(`[col-id="${this._id}"]`);
|
|
13
|
+
|
|
14
|
+
public columnHeader = () => this.column().getByRole('columnheader');
|
|
15
|
+
|
|
16
|
+
public cellByValue = (value: RegExp) =>
|
|
17
|
+
this.column().locator('[role="button"]', {
|
|
18
|
+
hasText: value
|
|
19
|
+
});
|
|
20
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
2
|
/** biome-ignore-all lint/suspicious/noExplicitAny: reason42 */
|
|
3
|
-
import type { Locator
|
|
3
|
+
import type { Locator } from '@playwright/test';
|
|
4
4
|
|
|
5
5
|
export type IInputFieldControl = Locator & ICoreInputFieldControl;
|
|
6
6
|
|
|
@@ -19,9 +19,9 @@ export class InputFieldControl implements ICoreInputFieldControl {
|
|
|
19
19
|
private _inputLocator: Locator;
|
|
20
20
|
private _id: string;
|
|
21
21
|
|
|
22
|
-
constructor(
|
|
22
|
+
constructor(context: Locator, id: string) {
|
|
23
23
|
this._id = id;
|
|
24
|
-
this._formFieldLocator =
|
|
24
|
+
this._formFieldLocator = context.getByTestId(`form-field__${id}`);
|
|
25
25
|
this._inputLocator = this._formFieldLocator.locator('input');
|
|
26
26
|
}
|
|
27
27
|
|
|
@@ -59,9 +59,9 @@ export class InputFieldControl implements ICoreInputFieldControl {
|
|
|
59
59
|
}
|
|
60
60
|
}
|
|
61
61
|
|
|
62
|
-
export function createInputFieldControl(
|
|
63
|
-
const inputFieldControl = new InputFieldControl(
|
|
64
|
-
const locator =
|
|
62
|
+
export function createInputFieldControl(context: Locator, id: string): IInputFieldControl {
|
|
63
|
+
const inputFieldControl = new InputFieldControl(context, id);
|
|
64
|
+
const locator = context.getByTestId(`form-field__${id}`);
|
|
65
65
|
|
|
66
66
|
return new Proxy(inputFieldControl, {
|
|
67
67
|
get(target, prop, receiver) {
|
|
File without changes
|
|
@@ -8,41 +8,83 @@ export type ILookupDropdown = Locator & ILookupDropdownCore;
|
|
|
8
8
|
export type ILookupDropdownCore = {
|
|
9
9
|
lookupSelect(optionToSelect: string): Promise<void>;
|
|
10
10
|
selectOption(optionText: string): Promise<void>;
|
|
11
|
+
fill(value: string): Promise<void>;
|
|
12
|
+
getValidationMessage(): Promise<string>;
|
|
13
|
+
getLabelText(): Promise<string>;
|
|
14
|
+
inputValue(): Promise<string>;
|
|
15
|
+
clear(): Promise<void>;
|
|
11
16
|
};
|
|
12
17
|
|
|
13
18
|
class LookupDropdown implements ILookupDropdownCore {
|
|
14
|
-
private
|
|
19
|
+
private _id: string;
|
|
20
|
+
private _formFieldLocator: Locator;
|
|
21
|
+
private _inputLocator: Locator;
|
|
15
22
|
|
|
16
|
-
constructor(
|
|
17
|
-
this.
|
|
23
|
+
constructor(context: Locator, id: string) {
|
|
24
|
+
this._id = id;
|
|
25
|
+
this._formFieldLocator = context.getByTestId(`form-field__${this._id}`);
|
|
26
|
+
this._inputLocator = this._formFieldLocator.locator('input');
|
|
18
27
|
}
|
|
19
28
|
|
|
20
|
-
async
|
|
21
|
-
await
|
|
29
|
+
public async getLabelText(): Promise<string> {
|
|
30
|
+
let returnText = (await this._formFieldLocator.getByTestId(`form-field__${this._id}__label`).textContent()) || '';
|
|
22
31
|
|
|
23
|
-
|
|
24
|
-
await this._locator.page().waitEventHandler.setCanContinue(true);
|
|
32
|
+
returnText = returnText.replace(/\s+/g, ' ').trim();
|
|
25
33
|
|
|
34
|
+
return returnText;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
public async lookupSelect(optionToSelect: string): Promise<void> {
|
|
38
|
+
await this._inputLocator.fill(optionToSelect);
|
|
26
39
|
await this.select(optionToSelect);
|
|
27
40
|
}
|
|
28
41
|
|
|
29
|
-
async
|
|
30
|
-
await this.
|
|
42
|
+
public async inputValue(): Promise<string> {
|
|
43
|
+
return await this._inputLocator.inputValue();
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
public async clear(): Promise<void> {
|
|
47
|
+
await this._inputLocator.fill('');
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
public async selectOption(optionText: string): Promise<void> {
|
|
51
|
+
await this._inputLocator.click();
|
|
31
52
|
await this.select(optionText);
|
|
32
53
|
}
|
|
33
54
|
|
|
55
|
+
public async getValidationMessage(): Promise<string> {
|
|
56
|
+
await this._formFieldLocator.locator('.TooltipContainer p').waitFor({ state: 'visible' });
|
|
57
|
+
return await this._formFieldLocator.locator('.TooltipContainer p').innerText();
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
public async fill(value: string): Promise<void> {
|
|
61
|
+
await Promise.all([
|
|
62
|
+
this._formFieldLocator
|
|
63
|
+
.page()
|
|
64
|
+
.waitForResponse((response) => response.url().includes('/list_') && response.request().method() === 'GET'),
|
|
65
|
+
this._inputLocator.click()
|
|
66
|
+
]);
|
|
67
|
+
|
|
68
|
+
await Promise.all([
|
|
69
|
+
this._formFieldLocator
|
|
70
|
+
.page()
|
|
71
|
+
.waitForResponse((response) => response.url().includes('/list_') && response.request().method() === 'GET'),
|
|
72
|
+
this._inputLocator.fill(value)
|
|
73
|
+
]);
|
|
74
|
+
}
|
|
75
|
+
|
|
34
76
|
private async select(optionToSelect: string) {
|
|
35
77
|
const optionsToSelectRegex = new RegExp(`^${escapeRegex(optionToSelect)}$`, 'i');
|
|
36
78
|
|
|
37
|
-
await this.
|
|
38
|
-
await this.
|
|
79
|
+
await this._formFieldLocator.page().getByTestId('autocomplete__menu').getByText(optionsToSelectRegex).click();
|
|
80
|
+
await this._formFieldLocator
|
|
39
81
|
.page()
|
|
40
|
-
.waitForFunction((el) => document.activeElement === el, await this.
|
|
82
|
+
.waitForFunction((el) => document.activeElement === el, await this._inputLocator.elementHandle());
|
|
41
83
|
}
|
|
42
84
|
}
|
|
43
85
|
|
|
44
|
-
export function createLookupDropdown(
|
|
45
|
-
const dropdown = new LookupDropdown(
|
|
86
|
+
export function createLookupDropdown(context: Locator, id: string): ILookupDropdown {
|
|
87
|
+
const dropdown = new LookupDropdown(context, id);
|
|
46
88
|
|
|
47
89
|
return new Proxy(dropdown, {
|
|
48
90
|
get(target, prop, receiver) {
|
|
@@ -50,10 +92,10 @@ export function createLookupDropdown(locator: Locator): ILookupDropdown {
|
|
|
50
92
|
return Reflect.get(target, prop, receiver);
|
|
51
93
|
}
|
|
52
94
|
|
|
53
|
-
const value = (
|
|
95
|
+
const value = (dropdown as any)[prop];
|
|
54
96
|
|
|
55
97
|
if (typeof value === 'function') {
|
|
56
|
-
return value.bind(
|
|
98
|
+
return value.bind(dropdown);
|
|
57
99
|
}
|
|
58
100
|
return value;
|
|
59
101
|
}
|
package/controls/index.ts
CHANGED
package/dist/Testwise.d.ts
CHANGED
package/dist/Testwise.js
CHANGED
|
@@ -5,6 +5,7 @@ import { SubjectRegistry } from './page-extensions/SubjectRegistry.js';
|
|
|
5
5
|
import { WaitEventHandler } from './page-extensions/WaitEventHandler.js';
|
|
6
6
|
import { ClickOverride } from './page-overrides/ClickOverride.js';
|
|
7
7
|
import { FillOverride } from './page-overrides/FillOverride.js';
|
|
8
|
+
export * from '@playwright/test';
|
|
8
9
|
function combineExtensions(baseTest, ...extensions) {
|
|
9
10
|
return extensions.reduce((test, Extension) => new Extension(test).test, baseTest);
|
|
10
11
|
}
|
package/dist/Testwise.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Testwise.js","sourceRoot":"","sources":["../Testwise.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,IAAI,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,IAAI,IAAI,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACrG,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAGhE,SAAS,iBAAiB,CAAC,QAAc,EAAE,GAAG,UAAkD;IAC9F,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AACpF,CAAC;AAED,MAAM,UAAU,GAAG;IACjB,mBAAmB;IACnB,aAAa;IACb,YAAY;IAEZ,iBAAiB;IACjB,UAAU;IACV,YAAY;IACZ,aAAa;IACb,cAAc;IACd,gBAAgB;IAChB,eAAe;CAChB,CAAC;AAEF,MAAM,CAAC,MAAM,IAAI,GAAS,iBAAiB,CAAC,IAAI,EAAE,GAAG,UAAU,CAAC,CAAC;AAEjE,MAAM,CAAC,MAAM,OAAO,GAAS,iBAAiB,CAAC,OAAO,EAAE,GAAG,UAAU,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"Testwise.js","sourceRoot":"","sources":["../Testwise.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,IAAI,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,IAAI,IAAI,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACrG,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAGhE,cAAc,kBAAkB,CAAC;AAEjC,SAAS,iBAAiB,CAAC,QAAc,EAAE,GAAG,UAAkD;IAC9F,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AACpF,CAAC;AAED,MAAM,UAAU,GAAG;IACjB,mBAAmB;IACnB,aAAa;IACb,YAAY;IAEZ,iBAAiB;IACjB,UAAU;IACV,YAAY;IACZ,aAAa;IACb,cAAc;IACd,gBAAgB;IAChB,eAAe;CAChB,CAAC;AAEF,MAAM,CAAC,MAAM,IAAI,GAAS,iBAAiB,CAAC,IAAI,EAAE,GAAG,UAAU,CAAC,CAAC;AAEjE,MAAM,CAAC,MAAM,OAAO,GAAS,iBAAiB,CAAC,OAAO,EAAE,GAAG,UAAU,CAAC,CAAC"}
|
|
@@ -7,7 +7,7 @@ export declare class SelectorBuilder {
|
|
|
7
7
|
private getDefaultPrefix;
|
|
8
8
|
private getDefaultSuffix;
|
|
9
9
|
getElementId(property: string, componentName: SubjectComponents): string;
|
|
10
|
-
|
|
10
|
+
getLocatorString(property: string, componentName: SubjectComponents): string;
|
|
11
11
|
private getLocatorType;
|
|
12
12
|
getPageContext(subject: ISubject): string;
|
|
13
13
|
}
|
|
@@ -45,14 +45,14 @@ export class SelectorBuilder {
|
|
|
45
45
|
getElementId(property, componentName) {
|
|
46
46
|
return this._namingHandler.getIdFromElementName(property, componentName, this._namingHandler.getElementTypeFromElementName(property));
|
|
47
47
|
}
|
|
48
|
-
|
|
48
|
+
getLocatorString(property, componentName) {
|
|
49
49
|
let elementId = this.getElementId(property, componentName);
|
|
50
50
|
if (componentName === 'Grid')
|
|
51
51
|
elementId = elementId.replace(/-/g, '_');
|
|
52
52
|
const selectorPrefix = this.getDefaultPrefix(componentName);
|
|
53
53
|
const defaultSuffix = this.getDefaultSuffix(componentName);
|
|
54
54
|
const selectorSuffix = this.determineSelectorSuffix(property, componentName) || defaultSuffix;
|
|
55
|
-
return `
|
|
55
|
+
return `this._context.${this.getLocatorType(componentName)}('${selectorPrefix}${elementId}${selectorSuffix}')`;
|
|
56
56
|
}
|
|
57
57
|
getLocatorType(componentName) {
|
|
58
58
|
if (componentName === 'Form') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectorBuilder.js","sourceRoot":"","sources":["../../artifact-builder/SelectorBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAG7D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,MAAM,OAAO,eAAe;IAG1B;QACE,IAAI,CAAC,cAAc,GAAG,IAAI,aAAa,EAAE,CAAC;IAC5C,CAAC;IAEO,uBAAuB,CAAC,QAAgB,EAAE,aAAgC;QAChF,IAAI,cAAc,GAAG,IAAI,CAAC;QAE1B,IAAI,aAAa,KAAK,MAAM,EAAE,CAAC;YAC7B,IAAI,IAAI,CAAC,cAAc,CAAC,6BAA6B,CAAC,QAAQ,CAAC,KAAK,iBAAiB,CAAC,MAAM,EAAE,CAAC;gBAC7F,cAAc,GAAG,kBAAkB,CAAC;YACtC,CAAC;iBAAM,IAAI,IAAI,CAAC,cAAc,CAAC,6BAA6B,CAAC,QAAQ,CAAC,KAAK,iBAAiB,CAAC,QAAQ,EAAE,CAAC;gBACtG,cAAc,GAAG,iBAAiB,CAAC;YACrC,CAAC;QACH,CAAC;QAED,OAAO,cAAc,CAAC;IACxB,CAAC;IAEO,gBAAgB,CAAC,aAAgC;QACvD,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,IAAI,aAAa,KAAK,MAAM,EAAE,CAAC;YAC7B,MAAM,GAAG,WAAW,CAAC;QACvB,CAAC;aAAM,IAAI,aAAa,KAAK,MAAM,EAAE,CAAC;YACpC,MAAM,GAAG,cAAc,CAAC;QAC1B,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,+BAA+B,aAAa,EAAE,CAAC,CAAC;QAClE,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,gBAAgB,CAAC,aAAgC;QACvD,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,IAAI,aAAa,KAAK,MAAM,EAAE,CAAC;YAC7B,MAAM,GAAG,IAAI,CAAC;QAChB,CAAC;aAAM,IAAI,aAAa,KAAK,MAAM,EAAE,CAAC;YACpC,MAAM,GAAG,SAAS,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,+BAA+B,aAAa,EAAE,CAAC,CAAC;QAClE,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAEM,YAAY,CAAC,QAAgB,EAAE,aAAgC;QACpE,OAAO,IAAI,CAAC,cAAc,CAAC,oBAAoB,CAC7C,QAAQ,EACR,aAAa,EACb,IAAI,CAAC,cAAc,CAAC,6BAA6B,CAAC,QAAQ,CAAC,CAC5D,CAAC;IACJ,CAAC;IAEM,
|
|
1
|
+
{"version":3,"file":"SelectorBuilder.js","sourceRoot":"","sources":["../../artifact-builder/SelectorBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -85,9 +85,12 @@ export class SubjectComponentGenerator {
|
|
|
85
85
|
}
|
|
86
86
|
const classBody = componentName === 'Grid'
|
|
87
87
|
? `\nexport class ${mainInterface}Component extends ${componentName} implements ${mainInterface} {\n\n` +
|
|
88
|
-
`
|
|
89
|
-
|
|
90
|
-
|
|
88
|
+
` private _context: Locator;\n\n` +
|
|
89
|
+
` constructor(context: Locator) {\n super(context);\n this._context = context;\n }\n\n${gridGetters}}\n`
|
|
90
|
+
: `\nexport class ${mainInterface}Component extends ${componentName} implements ${mainInterface} {\n\n` +
|
|
91
|
+
` private _context: Locator;\n` +
|
|
92
|
+
`${propertyDeclarations}\n\n` +
|
|
93
|
+
` constructor(context: Locator) {\n super(context);\n this._context = context;\n${assignments}\n }\n}\n`;
|
|
91
94
|
componentFile.content += classBody;
|
|
92
95
|
}
|
|
93
96
|
const subjectMatch = componentDirPath.match(/subjects[/](\w+)[/]/);
|
|
@@ -107,7 +110,7 @@ export class SubjectComponentGenerator {
|
|
|
107
110
|
transformGridInterface(componentFile) {
|
|
108
111
|
const interfaceRegex = /export interface \w+ extends Grid \{([\s\S]*?)\}/g;
|
|
109
112
|
componentFile.content = componentFile.content.replace(interfaceRegex, (match, body) => {
|
|
110
|
-
const transformedBody = body.replace(/(\w+)\s*:\s*Locator(?:\[\])?;/g, 'readonly $1:
|
|
113
|
+
const transformedBody = body.replace(/(\w+)\s*:\s*Locator(?:\[\])?;/g, 'readonly $1: IGridColumnControl;');
|
|
111
114
|
return match.replace(body, transformedBody);
|
|
112
115
|
});
|
|
113
116
|
}
|
|
@@ -115,8 +118,8 @@ export class SubjectComponentGenerator {
|
|
|
115
118
|
return propertyLines
|
|
116
119
|
.map((line) => {
|
|
117
120
|
const property = line.replace('readonly', '').split(':')[0].trim();
|
|
118
|
-
const
|
|
119
|
-
return ` get ${property}():
|
|
121
|
+
const columnId = this._selectorBuilder.getElementId(property, componentName);
|
|
122
|
+
return ` public get ${property}(): IGridColumnControl {\n return createGridColumnControl(this._context, '${columnId}');\n }\n`;
|
|
120
123
|
})
|
|
121
124
|
.join('\n');
|
|
122
125
|
}
|
|
@@ -132,16 +135,16 @@ export class SubjectComponentGenerator {
|
|
|
132
135
|
return propertyLines
|
|
133
136
|
.map((line) => {
|
|
134
137
|
const property = line.split(':')[0].replace(/\?$/, '').trim();
|
|
135
|
-
const pageLocatorString = this._selectorBuilder.
|
|
138
|
+
const pageLocatorString = this._selectorBuilder.getLocatorString(property, componentName);
|
|
136
139
|
if (componentName === 'Form') {
|
|
137
140
|
if (property.endsWith('Lookup'))
|
|
138
|
-
return ` this.${property} = createLookupDropdown(${
|
|
141
|
+
return ` this.${property} = createLookupDropdown(this._context, '${this._selectorBuilder.getElementId(property, componentName)}');`;
|
|
139
142
|
if (property.endsWith('DatePicker'))
|
|
140
|
-
return ` this.${property} = createDateControl(
|
|
143
|
+
return ` this.${property} = createDateControl(this._context, '${this._selectorBuilder.getElementId(property, componentName)}');`;
|
|
141
144
|
if (property.endsWith('ComboBox'))
|
|
142
|
-
return ` this.${property} = createFormComboBox(
|
|
145
|
+
return ` this.${property} = createFormComboBox(this._context, '${this._selectorBuilder.getElementId(property, componentName)}');`;
|
|
143
146
|
if (property.endsWith('Field'))
|
|
144
|
-
return ` this.${property} = createInputFieldControl(
|
|
147
|
+
return ` this.${property} = createInputFieldControl(this._context, '${this._selectorBuilder.getElementId(property, componentName)}');`;
|
|
145
148
|
}
|
|
146
149
|
return ` this.${property} = ${pageLocatorString};`;
|
|
147
150
|
})
|
|
@@ -220,7 +223,10 @@ export class SubjectComponentGenerator {
|
|
|
220
223
|
}
|
|
221
224
|
addComponentImports(componentFile, componentName) {
|
|
222
225
|
// biome-ignore lint/style/useTemplate: reason 42
|
|
223
|
-
componentFile.content = `import type { Locator
|
|
226
|
+
componentFile.content = `import type { Locator } from '@playwright/test';\n\n` + componentFile.content;
|
|
227
|
+
if (componentName === 'Grid') {
|
|
228
|
+
componentFile.content = `import { createGridColumnControl, type IGridColumnControl } from '../../../../controls/GridColumnControl.js';\n${componentFile.content}`;
|
|
229
|
+
}
|
|
224
230
|
componentFile.content = `import { ${componentName} } from '../../../../components/index.js';\n${componentFile.content}`;
|
|
225
231
|
}
|
|
226
232
|
removeLocatorInterface(componentFile) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SubjectComponentGenerator.js","sourceRoot":"","sources":["../../artifact-builder/SubjectComponentGenerator.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"SubjectComponentGenerator.js","sourceRoot":"","sources":["../../artifact-builder/SubjectComponentGenerator.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,6 +11,7 @@ export declare class SubjectGenerator {
|
|
|
11
11
|
private getAllSubjectFolders;
|
|
12
12
|
private indexGeneratedSubjects;
|
|
13
13
|
private createSubjectClass;
|
|
14
|
+
private addGoToMethod;
|
|
14
15
|
private getAllComponentsFromInterface;
|
|
15
16
|
private generateComponentContextLocatorString;
|
|
16
17
|
private verifyDirectoryExists;
|
|
@@ -66,10 +66,17 @@ export class SubjectGenerator {
|
|
|
66
66
|
this.addClassExport(subjectClass, screenInterfaceName);
|
|
67
67
|
this.addComponentDeclarations(subjectClass, componentDictionary, subjectFolderName);
|
|
68
68
|
this.addConstructor(subjectClass, componentDictionary, subjectFolderName, subject);
|
|
69
|
+
this.addGoToMethod(subjectClass, subject);
|
|
69
70
|
this.addSubjectClassLineEndings(subjectClass);
|
|
70
71
|
this.verifyDirectoryExists(subjectFolderPath);
|
|
71
72
|
fs.writeFileSync(path.join(subjectFolderPath, `${subjectClass.name}.ts`), subjectClass.content, 'utf-8');
|
|
72
73
|
}
|
|
74
|
+
addGoToMethod(subjectClass, subject) {
|
|
75
|
+
let url = `subject=${subject.subject}`;
|
|
76
|
+
if (subject.variant !== '')
|
|
77
|
+
url = `${url}/subjectVariant=${subject.variant}`;
|
|
78
|
+
subjectClass.content += `\n public async goTo() {\n await this._subjectPage.goToDeepLink(\`${url}\`);\n await this._subjectPage.waitForLoadState('networkidle');\n }\n`;
|
|
79
|
+
}
|
|
73
80
|
getAllComponentsFromInterface(screenFileContent, screenInterfaceName, subject) {
|
|
74
81
|
let componentDictionary = [];
|
|
75
82
|
const interfaceMatches = screenFileContent.match(new RegExp(`export interface ${screenInterfaceName} {([\\s\\S]*?)}`));
|
|
@@ -180,6 +187,7 @@ export class SubjectGenerator {
|
|
|
180
187
|
const componentType = `${subjectFolderName}${component.type}`;
|
|
181
188
|
subjectClass.content += ` ${propertyName}: ${componentType};\n`;
|
|
182
189
|
});
|
|
190
|
+
subjectClass.content += ` private _subjectPage: Page;\n`;
|
|
183
191
|
}
|
|
184
192
|
addConstructor(subjectClass, componentDictionary, subjectFolderName, subject) {
|
|
185
193
|
const rootContextSelector = this._selectorBuilder.getPageContext(subject);
|
|
@@ -189,20 +197,22 @@ export class SubjectGenerator {
|
|
|
189
197
|
if (!screenComponents.includes(component.type))
|
|
190
198
|
return;
|
|
191
199
|
if (coreComponents.includes(component.type)) {
|
|
192
|
-
|
|
200
|
+
const componentId = this._namingHandler.toPascalCase(propertyName);
|
|
201
|
+
subjectClass.content += ` this.${propertyName} = ${this.getComponentInitializer(component, componentId)};\n`;
|
|
193
202
|
return;
|
|
194
203
|
}
|
|
195
204
|
const componentName = component.type;
|
|
196
|
-
subjectClass.content += ` this.${propertyName} = new ${subjectFolderName}${componentName}Component(
|
|
205
|
+
subjectClass.content += ` this.${propertyName} = new ${subjectFolderName}${componentName}Component(${component.context});\n`;
|
|
197
206
|
});
|
|
207
|
+
subjectClass.content += ` this._subjectPage = this.context.page();\n`;
|
|
208
|
+
subjectClass.content += ` }\n`;
|
|
198
209
|
}
|
|
199
|
-
getComponentInitializer(component) {
|
|
210
|
+
getComponentInitializer(component, componentId) {
|
|
200
211
|
const componentNamePascal = this._namingHandler.toPascalCase(component.type);
|
|
201
212
|
switch (component.type) {
|
|
202
213
|
case 'Cardlist':
|
|
203
214
|
case 'TaskTiles':
|
|
204
215
|
case 'PrefilterList':
|
|
205
|
-
case 'TaskBar':
|
|
206
216
|
case 'Chart':
|
|
207
217
|
case 'CubeViewBar':
|
|
208
218
|
case 'PivotGrid':
|
|
@@ -211,7 +221,7 @@ export class SubjectGenerator {
|
|
|
211
221
|
case 'ReportBar':
|
|
212
222
|
case 'ReportTiles':
|
|
213
223
|
case 'Preview':
|
|
214
|
-
return `new ${component.type}(
|
|
224
|
+
return `new ${component.type}(this.context.locator('.${component.type}.${componentNamePascal}'))`;
|
|
215
225
|
case 'CombinedFilter':
|
|
216
226
|
case 'CustomActionBar':
|
|
217
227
|
case 'ActionBar':
|
|
@@ -220,15 +230,17 @@ export class SubjectGenerator {
|
|
|
220
230
|
case 'Tab':
|
|
221
231
|
case 'FilterForm':
|
|
222
232
|
case 'Scheduler':
|
|
223
|
-
return `new ${component.type}(
|
|
233
|
+
return `new ${component.type}(${component.context})`;
|
|
224
234
|
case 'TreeView':
|
|
225
|
-
return `new ${component.type}(
|
|
235
|
+
return `new ${component.type}(this.context.locator('.Tree.${componentNamePascal}'))`;
|
|
236
|
+
case 'TaskBar':
|
|
237
|
+
return `new ${component.type}(this.context.locator('.ActionBar.${componentId}'))`;
|
|
226
238
|
default:
|
|
227
239
|
throw new Error(`Unknown core component type: ${component.type}`);
|
|
228
240
|
}
|
|
229
241
|
}
|
|
230
242
|
addSubjectClassLineEndings(subjectClass) {
|
|
231
|
-
subjectClass.content += `
|
|
243
|
+
subjectClass.content += `}\n`;
|
|
232
244
|
}
|
|
233
245
|
}
|
|
234
246
|
SubjectGenerator.SUBJECTS_RELATIVE_PATH = 'test-artifacts/subjects';
|