@thinkwise/testwise 0.2.21 → 0.2.67
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Testwise.ts +2 -0
- package/artifact-builder/SelectorBuilder.ts +2 -2
- package/artifact-builder/SubjectComponentGenerator.ts +21 -12
- package/artifact-builder/SubjectGenerator.ts +20 -6
- package/components/action-bar/ActionBar.ts +7 -7
- package/components/action-bar/CustomActionBar.ts +0 -5
- package/components/cardlist/Cardlist.ts +3 -3
- package/components/chart/Chart.ts +3 -3
- package/components/combined-filter/CombinedFilter.ts +3 -3
- package/components/cube-view-bar/CubeViewBar.ts +3 -3
- package/components/filter/ExcelStyleFilterPopup.ts +69 -0
- package/components/filter/ExcelStyleFilterPopupObjects.ts +46 -0
- package/components/filter/FilterForm.ts +3 -3
- package/components/filter/FilterPopup.ts +187 -0
- package/components/filter/FilterPopupObjects.ts +63 -0
- package/components/filter/ManagePrefilterPopup.ts +44 -0
- package/components/filter/ManagePrefilterPopupObjects.ts +28 -0
- package/components/form/Form.ts +3 -3
- package/components/grid/Grid.ts +48 -133
- package/components/grid/GridObjects.ts +0 -19
- package/components/index.ts +4 -0
- package/components/maps/Maps.ts +3 -3
- package/components/menu/ListBarMenuComponent.ts +11 -0
- package/components/menu/ListBarMenuComponentObjects.ts +6 -0
- package/components/pivot-grid/PivotGrid.ts +3 -3
- package/components/pivot-grid/PivotGridFieldList.ts +3 -3
- package/components/pop-up/AllRowsPopUp.ts +29 -0
- package/components/pop-up/AllRowsPopUpObjects.ts +22 -0
- package/components/prefilter-list/PrefilterList.ts +3 -3
- package/components/preview/Preview.ts +3 -3
- package/components/report-bar/ReportBar.ts +3 -3
- package/components/report-tiles/ReportTiles.ts +3 -3
- package/components/scheduler/Scheduler.ts +3 -3
- package/components/splitter/Splitter.ts +3 -3
- package/components/tab/BaseTab.ts +3 -3
- package/components/tab/DetailTabPage.ts +4 -4
- package/components/tab/Tab.ts +4 -4
- package/components/task/TaskBar.ts +3 -3
- package/components/task/TaskTiles.ts +3 -3
- package/components/topbar/TopBar.ts +2 -0
- package/components/tree-view/TreeView.ts +3 -3
- package/controls/DateControl.ts +13 -14
- package/controls/DateControlObjects.ts +15 -0
- package/controls/FormComboBox.ts +17 -30
- package/controls/FormComboBoxObjects.ts +27 -0
- package/controls/GridColumnControl.ts +68 -0
- package/controls/GridColumnControlObjects.ts +20 -0
- package/controls/InputFieldControl.ts +17 -20
- package/controls/InputFieldControlObjects.ts +19 -0
- package/controls/LookupDropdown.ts +65 -24
- package/controls/LookupDropdownObjects.ts +19 -0
- package/controls/index.ts +1 -0
- package/dist/Testwise.d.ts +1 -0
- package/dist/Testwise.js +1 -0
- package/dist/Testwise.js.map +1 -1
- package/dist/artifact-builder/SelectorBuilder.d.ts +1 -1
- package/dist/artifact-builder/SelectorBuilder.js +2 -2
- package/dist/artifact-builder/SelectorBuilder.js.map +1 -1
- package/dist/artifact-builder/SubjectComponentGenerator.js +18 -12
- package/dist/artifact-builder/SubjectComponentGenerator.js.map +1 -1
- package/dist/artifact-builder/SubjectGenerator.d.ts +1 -0
- package/dist/artifact-builder/SubjectGenerator.js +16 -6
- package/dist/artifact-builder/SubjectGenerator.js.map +1 -1
- package/dist/components/action-bar/ActionBar.d.ts +2 -2
- package/dist/components/action-bar/ActionBar.js +7 -7
- package/dist/components/action-bar/ActionBar.js.map +1 -1
- package/dist/components/action-bar/CustomActionBar.d.ts +0 -2
- package/dist/components/action-bar/CustomActionBar.js +0 -3
- package/dist/components/action-bar/CustomActionBar.js.map +1 -1
- package/dist/components/cardlist/Cardlist.d.ts +2 -2
- package/dist/components/cardlist/Cardlist.js +2 -2
- package/dist/components/cardlist/Cardlist.js.map +1 -1
- package/dist/components/chart/Chart.d.ts +2 -2
- package/dist/components/chart/Chart.js +2 -2
- package/dist/components/chart/Chart.js.map +1 -1
- package/dist/components/combined-filter/CombinedFilter.d.ts +2 -2
- package/dist/components/combined-filter/CombinedFilter.js +2 -2
- package/dist/components/combined-filter/CombinedFilter.js.map +1 -1
- package/dist/components/cube-view-bar/CubeViewBar.d.ts +2 -2
- package/dist/components/cube-view-bar/CubeViewBar.js +2 -2
- package/dist/components/cube-view-bar/CubeViewBar.js.map +1 -1
- package/dist/components/filter/ExcelStyleFilterPopup.d.ts +19 -0
- package/dist/components/filter/ExcelStyleFilterPopup.js +64 -0
- package/dist/components/filter/ExcelStyleFilterPopup.js.map +1 -0
- package/dist/components/filter/ExcelStyleFilterPopupObjects.d.ts +16 -0
- package/dist/components/filter/ExcelStyleFilterPopupObjects.js +26 -0
- package/dist/components/filter/ExcelStyleFilterPopupObjects.js.map +1 -0
- package/dist/components/filter/FilterForm.d.ts +2 -2
- package/dist/components/filter/FilterForm.js +2 -2
- package/dist/components/filter/FilterForm.js.map +1 -1
- package/dist/components/filter/FilterPopup.d.ts +41 -0
- package/dist/components/filter/FilterPopup.js +126 -0
- package/dist/components/filter/FilterPopup.js.map +1 -0
- package/dist/components/filter/FilterPopupObjects.d.ts +29 -0
- package/dist/components/filter/FilterPopupObjects.js +30 -0
- package/dist/components/filter/FilterPopupObjects.js.map +1 -0
- package/dist/components/filter/ManagePrefilterPopup.d.ts +14 -0
- package/dist/components/filter/ManagePrefilterPopup.js +33 -0
- package/dist/components/filter/ManagePrefilterPopup.js.map +1 -0
- package/dist/components/filter/ManagePrefilterPopupObjects.d.ts +11 -0
- package/dist/components/filter/ManagePrefilterPopupObjects.js +19 -0
- package/dist/components/filter/ManagePrefilterPopupObjects.js.map +1 -0
- package/dist/components/form/Form.d.ts +2 -2
- package/dist/components/form/Form.js +2 -2
- package/dist/components/form/Form.js.map +1 -1
- package/dist/components/grid/Grid.d.ts +7 -37
- package/dist/components/grid/Grid.js +32 -127
- package/dist/components/grid/Grid.js.map +1 -1
- package/dist/components/grid/GridObjects.d.ts +0 -6
- package/dist/components/grid/GridObjects.js +0 -8
- package/dist/components/grid/GridObjects.js.map +1 -1
- package/dist/components/index.d.ts +4 -0
- package/dist/components/index.js +4 -0
- package/dist/components/index.js.map +1 -1
- package/dist/components/maps/Maps.d.ts +2 -2
- package/dist/components/maps/Maps.js +2 -2
- package/dist/components/maps/Maps.js.map +1 -1
- package/dist/components/menu/ListBarMenuComponent.d.ts +6 -0
- package/dist/components/menu/ListBarMenuComponent.js +10 -0
- package/dist/components/menu/ListBarMenuComponent.js.map +1 -1
- package/dist/components/menu/ListBarMenuComponentObjects.d.ts +2 -0
- package/dist/components/menu/ListBarMenuComponentObjects.js +2 -0
- package/dist/components/menu/ListBarMenuComponentObjects.js.map +1 -1
- package/dist/components/pivot-grid/PivotGrid.d.ts +2 -2
- package/dist/components/pivot-grid/PivotGrid.js +2 -2
- package/dist/components/pivot-grid/PivotGrid.js.map +1 -1
- package/dist/components/pivot-grid/PivotGridFieldList.d.ts +2 -2
- package/dist/components/pivot-grid/PivotGridFieldList.js +2 -2
- package/dist/components/pivot-grid/PivotGridFieldList.js.map +1 -1
- package/dist/components/pop-up/AllRowsPopUp.d.ts +12 -0
- package/dist/components/pop-up/AllRowsPopUp.js +19 -0
- package/dist/components/pop-up/AllRowsPopUp.js.map +1 -0
- package/dist/components/pop-up/AllRowsPopUpObjects.d.ts +11 -0
- package/dist/components/pop-up/AllRowsPopUpObjects.js +13 -0
- package/dist/components/pop-up/AllRowsPopUpObjects.js.map +1 -0
- package/dist/components/prefilter-list/PrefilterList.d.ts +2 -2
- package/dist/components/prefilter-list/PrefilterList.js +2 -2
- package/dist/components/prefilter-list/PrefilterList.js.map +1 -1
- package/dist/components/preview/Preview.d.ts +2 -2
- package/dist/components/preview/Preview.js +2 -2
- package/dist/components/preview/Preview.js.map +1 -1
- package/dist/components/report-bar/ReportBar.d.ts +2 -2
- package/dist/components/report-bar/ReportBar.js +2 -2
- package/dist/components/report-bar/ReportBar.js.map +1 -1
- package/dist/components/report-tiles/ReportTiles.d.ts +2 -2
- package/dist/components/report-tiles/ReportTiles.js +2 -2
- package/dist/components/report-tiles/ReportTiles.js.map +1 -1
- package/dist/components/scheduler/Scheduler.d.ts +2 -2
- package/dist/components/scheduler/Scheduler.js +2 -2
- package/dist/components/scheduler/Scheduler.js.map +1 -1
- package/dist/components/splitter/Splitter.d.ts +2 -2
- package/dist/components/splitter/Splitter.js +2 -2
- package/dist/components/splitter/Splitter.js.map +1 -1
- package/dist/components/tab/BaseTab.d.ts +2 -2
- package/dist/components/tab/BaseTab.js +2 -2
- package/dist/components/tab/BaseTab.js.map +1 -1
- package/dist/components/tab/DetailTabPage.d.ts +2 -2
- package/dist/components/tab/DetailTabPage.js +3 -3
- package/dist/components/tab/DetailTabPage.js.map +1 -1
- package/dist/components/tab/Tab.d.ts +2 -2
- package/dist/components/tab/Tab.js +3 -3
- package/dist/components/tab/Tab.js.map +1 -1
- package/dist/components/task/TaskBar.d.ts +2 -2
- package/dist/components/task/TaskBar.js +2 -2
- package/dist/components/task/TaskBar.js.map +1 -1
- package/dist/components/task/TaskTiles.d.ts +2 -2
- package/dist/components/task/TaskTiles.js +2 -2
- package/dist/components/task/TaskTiles.js.map +1 -1
- package/dist/components/topbar/TopBar.d.ts +1 -0
- package/dist/components/topbar/TopBar.js +1 -0
- package/dist/components/topbar/TopBar.js.map +1 -1
- package/dist/components/tree-view/TreeView.d.ts +2 -2
- package/dist/components/tree-view/TreeView.js +2 -2
- package/dist/components/tree-view/TreeView.js.map +1 -1
- package/dist/controls/DateControl.d.ts +4 -5
- package/dist/controls/DateControl.js +11 -11
- package/dist/controls/DateControl.js.map +1 -1
- package/dist/controls/DateControlObjects.d.ts +8 -0
- package/dist/controls/DateControlObjects.js +9 -0
- package/dist/controls/DateControlObjects.js.map +1 -0
- package/dist/controls/FormComboBox.d.ts +2 -2
- package/dist/controls/FormComboBox.js +15 -20
- package/dist/controls/FormComboBox.js.map +1 -1
- package/dist/controls/FormComboBoxObjects.d.ts +12 -0
- package/dist/controls/FormComboBoxObjects.js +16 -0
- package/dist/controls/FormComboBoxObjects.js.map +1 -0
- package/dist/controls/GridColumnControl.d.ts +10 -0
- package/dist/controls/GridColumnControl.js +43 -0
- package/dist/controls/GridColumnControl.js.map +1 -0
- package/dist/controls/GridColumnControlObjects.d.ts +9 -0
- package/dist/controls/GridColumnControlObjects.js +13 -0
- package/dist/controls/GridColumnControlObjects.js.map +1 -0
- package/dist/controls/InputFieldControl.d.ts +4 -6
- package/dist/controls/InputFieldControl.js +14 -15
- package/dist/controls/InputFieldControl.js.map +1 -1
- package/dist/controls/InputFieldControlObjects.d.ts +10 -0
- package/dist/controls/InputFieldControlObjects.js +11 -0
- package/dist/controls/InputFieldControlObjects.js.map +1 -0
- package/dist/controls/LookupDropdown.d.ts +6 -1
- package/dist/controls/LookupDropdown.js +51 -19
- package/dist/controls/LookupDropdown.js.map +1 -1
- package/dist/controls/LookupDropdownObjects.d.ts +10 -0
- package/dist/controls/LookupDropdownObjects.js +11 -0
- package/dist/controls/LookupDropdownObjects.js.map +1 -0
- package/dist/controls/index.d.ts +1 -0
- package/dist/controls/index.js +1 -0
- package/dist/controls/index.js.map +1 -1
- package/dist/enums/ElementTypes.d.ts +1 -1
- package/dist/enums/ElementTypes.js +1 -1
- package/dist/enums/ElementTypes.js.map +1 -1
- package/dist/helpers/FlightTracker.d.ts +7 -0
- package/dist/helpers/FlightTracker.js +63 -11
- package/dist/helpers/FlightTracker.js.map +1 -1
- package/dist/helpers/LoginHelper.d.ts +11 -3
- package/dist/helpers/LoginHelper.js +59 -13
- package/dist/helpers/LoginHelper.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/page-extensions/GlobalComponents.d.ts +2 -1
- package/dist/page-extensions/GlobalComponents.js +2 -1
- package/dist/page-extensions/GlobalComponents.js.map +1 -1
- package/dist/page-overrides/ClickOverride.d.ts +1 -0
- package/dist/page-overrides/ClickOverride.js +57 -46
- package/dist/page-overrides/ClickOverride.js.map +1 -1
- package/dist/types/Universal.d.ts +1 -0
- package/enums/ElementTypes.ts +1 -1
- package/helpers/FlightTracker.ts +71 -11
- package/helpers/LoginHelper.ts +79 -21
- package/index.ts +1 -1
- package/package.json +6 -5
- package/page-extensions/GlobalComponents.ts +3 -0
- package/page-overrides/ClickOverride.ts +69 -64
- package/types/Universal.ts +1 -0
|
@@ -3,17 +3,17 @@ import path from 'node:path';
|
|
|
3
3
|
import { fileURLToPath } from 'node:url';
|
|
4
4
|
import { testwiseConfig } from '../services/ConfigBuilder.js';
|
|
5
5
|
import { pollUntil } from './Poll.js';
|
|
6
|
-
const
|
|
7
|
-
const configFixture = JSON.parse(fs.readFileSync(path.resolve(
|
|
6
|
+
const dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
7
|
+
const configFixture = JSON.parse(fs.readFileSync(path.resolve(dirname, '../../config.json'), 'utf-8'));
|
|
8
8
|
export class LoginHelper {
|
|
9
9
|
constructor(page) {
|
|
10
|
+
this.serviceUrl = String(testwiseConfig().get('environmentSettings.serviceUrl'));
|
|
11
|
+
this.metaEndpoint = String(testwiseConfig().get('environmentSettings.metaEndpoint'));
|
|
12
|
+
if (!this.serviceUrl || this.serviceUrl === 'undefined')
|
|
13
|
+
throw new Error('Service URL not found');
|
|
14
|
+
if (!this.metaEndpoint || this.metaEndpoint === 'undefined')
|
|
15
|
+
throw new Error('Meta endpoint not found');
|
|
10
16
|
this._page = page;
|
|
11
|
-
const serviceUrl = testwiseConfig().get('environmentSettings.serviceUrl');
|
|
12
|
-
const metaEndpoint = testwiseConfig().get('environmentSettings.metaEndpoint');
|
|
13
|
-
if (!serviceUrl || !metaEndpoint)
|
|
14
|
-
throw new Error('Either environmentSettings.serviceUrl or environmentSettings.metaEndpoint is not defined in the configuration.');
|
|
15
|
-
this._serviceUrl = serviceUrl;
|
|
16
|
-
this._metaEndpoint = metaEndpoint;
|
|
17
17
|
}
|
|
18
18
|
/**
|
|
19
19
|
* Log in and go to a specified application
|
|
@@ -76,10 +76,10 @@ export class LoginHelper {
|
|
|
76
76
|
throw new Error('Username and password are required for login.');
|
|
77
77
|
}
|
|
78
78
|
if (serviceUrl && metaEndpoint) {
|
|
79
|
-
this.
|
|
80
|
-
this.
|
|
79
|
+
this.serviceUrl = serviceUrl;
|
|
80
|
+
this.metaEndpoint = metaEndpoint;
|
|
81
81
|
}
|
|
82
|
-
const response = await this._page.request.post(`${this.
|
|
82
|
+
const response = await this._page.request.post(`${this.serviceUrl}/account/api/login`, {
|
|
83
83
|
form: {
|
|
84
84
|
UserName: username,
|
|
85
85
|
Password: password
|
|
@@ -88,6 +88,26 @@ export class LoginHelper {
|
|
|
88
88
|
if (response.status() !== 204) {
|
|
89
89
|
throw new Error(`Login failed with status code: ${response.status()}`);
|
|
90
90
|
}
|
|
91
|
+
if (password === username && /^Worker_\d+$/.test(username)) {
|
|
92
|
+
const userPreferences = new UserPreferences(this._page, this.serviceUrl, this.metaEndpoint);
|
|
93
|
+
if (!options.userPreference) {
|
|
94
|
+
console.info(`No user preference configuration ID provided for worker account ${username}. User preferences will be disabled to prevent unexpected test behavior.`);
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
console.info(`User preference configuration ID ${options.userPreference} provided for worker account ${username}. Attempting to disable user preferences before re-enabling with provided configuration.`);
|
|
98
|
+
}
|
|
99
|
+
try {
|
|
100
|
+
await userPreferences.disable();
|
|
101
|
+
console.info(`Successfully disabled user preferences for worker account ${username}.`);
|
|
102
|
+
if (options.userPreference) {
|
|
103
|
+
await userPreferences.run(options.userPreference);
|
|
104
|
+
console.info(`Successfully re-enabled user preferences for worker account ${username} with configuration ID ${options.userPreference}.`);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
console.warn(`User preferences may not be properly configured for worker account ${username}. Tests may be unstable. Error details: ${error}`);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
91
111
|
// Set the navigator.language property
|
|
92
112
|
await this._page.route('**/*', (route, request) => {
|
|
93
113
|
route.continue({
|
|
@@ -111,18 +131,44 @@ export class LoginHelper {
|
|
|
111
131
|
contentType: 'application/json',
|
|
112
132
|
body: JSON.stringify({
|
|
113
133
|
...configFixture,
|
|
114
|
-
serviceUrl: `${this.
|
|
134
|
+
serviceUrl: `${this.serviceUrl}/iam/${this.metaEndpoint}`,
|
|
115
135
|
...options
|
|
116
136
|
})
|
|
117
137
|
});
|
|
118
138
|
});
|
|
119
139
|
}
|
|
120
140
|
async logOut() {
|
|
121
|
-
const response = await this._page.request.post(`${this.
|
|
141
|
+
const response = await this._page.request.post(`${this.serviceUrl}/account/api/logout`);
|
|
122
142
|
if (![204, 401].includes(response.status())) {
|
|
123
143
|
throw new Error(`Logout failed with status code: ${response.status()}`);
|
|
124
144
|
}
|
|
125
145
|
await this._page.context().clearCookies();
|
|
126
146
|
}
|
|
127
147
|
}
|
|
148
|
+
export class UserPreferences {
|
|
149
|
+
constructor(requestContext, serviceUrl, metaEndpoint) {
|
|
150
|
+
this.guiApplAlias = String(testwiseConfig().get('environmentSettings.guiApplAlias'));
|
|
151
|
+
this._page = requestContext;
|
|
152
|
+
serviceUrl = serviceUrl ?? testwiseConfig().get('environmentSettings.serviceUrl');
|
|
153
|
+
metaEndpoint = metaEndpoint ?? testwiseConfig().get('environmentSettings.metaEndpoint');
|
|
154
|
+
if (!serviceUrl)
|
|
155
|
+
throw new Error('Service URL not found or is empty');
|
|
156
|
+
if (!metaEndpoint)
|
|
157
|
+
throw new Error('Meta endpoint not found or is empty');
|
|
158
|
+
if (!this.guiApplAlias)
|
|
159
|
+
throw new Error('GUI application alias not found or is empty');
|
|
160
|
+
this.url = `${serviceUrl}/${metaEndpoint}/${this.guiApplAlias}`;
|
|
161
|
+
}
|
|
162
|
+
async run(upConfigurationId) {
|
|
163
|
+
const fullUrl = `${this.url}/set_up_configuration`;
|
|
164
|
+
const data = {
|
|
165
|
+
up_configuration_id: upConfigurationId
|
|
166
|
+
};
|
|
167
|
+
await this._page.request.post(fullUrl, { headers: { 'Content-Type': 'application/json; charset=utf-8' }, data });
|
|
168
|
+
}
|
|
169
|
+
async disable() {
|
|
170
|
+
const fullUrl = `${this.url}/disable_up`;
|
|
171
|
+
return await this._page.request.post(fullUrl, { headers: { 'Content-Type': 'application/json; charset=utf-8' } });
|
|
172
|
+
}
|
|
173
|
+
}
|
|
128
174
|
//# sourceMappingURL=LoginHelper.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LoginHelper.js","sourceRoot":"","sources":["../../helpers/LoginHelper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9D,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,
|
|
1
|
+
{"version":3,"file":"LoginHelper.js","sourceRoot":"","sources":["../../helpers/LoginHelper.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -18,7 +18,6 @@ declare const originalDebug: {
|
|
|
18
18
|
(...data: any[]): void;
|
|
19
19
|
(message?: any, ...optionalParams: any[]): void;
|
|
20
20
|
};
|
|
21
|
-
export { originalLog, originalInfo, originalWarn, originalError, originalDebug };
|
|
22
21
|
export * from './artifact-builder/index.js';
|
|
23
22
|
export * from './components/index.js';
|
|
24
23
|
export * from './controls/index.js';
|
|
@@ -29,3 +28,4 @@ export * from './page-overrides/index.js';
|
|
|
29
28
|
export * from './services/index.js';
|
|
30
29
|
export * from './Testwise.js';
|
|
31
30
|
export * from './types/index.js';
|
|
31
|
+
export { originalDebug, originalError, originalInfo, originalLog, originalWarn };
|
package/dist/index.js
CHANGED
|
@@ -9,7 +9,6 @@ console.info = (...args) => logger.info(args.join(' '));
|
|
|
9
9
|
console.warn = (...args) => logger.warn(args.join(' '));
|
|
10
10
|
console.error = (...args) => logger.error(args.join(' '));
|
|
11
11
|
console.debug = (...args) => logger.debug(args.join(' '));
|
|
12
|
-
export { originalLog, originalInfo, originalWarn, originalError, originalDebug };
|
|
13
12
|
export * from './artifact-builder/index.js';
|
|
14
13
|
export * from './components/index.js';
|
|
15
14
|
export * from './controls/index.js';
|
|
@@ -20,4 +19,5 @@ export * from './page-overrides/index.js';
|
|
|
20
19
|
export * from './services/index.js';
|
|
21
20
|
export * from './Testwise.js';
|
|
22
21
|
export * from './types/index.js';
|
|
22
|
+
export { originalDebug, originalError, originalInfo, originalLog, originalWarn };
|
|
23
23
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC;AAChC,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;AAClC,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;AAClC,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC;AACpC,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC;AAEpC,OAAO,CAAC,GAAG,GAAG,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACjE,OAAO,CAAC,IAAI,GAAG,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACnE,OAAO,CAAC,IAAI,GAAG,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACnE,OAAO,CAAC,KAAK,GAAG,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACrE,OAAO,CAAC,KAAK,GAAG,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAErE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC;AAChC,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;AAClC,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;AAClC,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC;AACpC,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC;AAEpC,OAAO,CAAC,GAAG,GAAG,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACjE,OAAO,CAAC,IAAI,GAAG,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACnE,OAAO,CAAC,IAAI,GAAG,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACnE,OAAO,CAAC,KAAK,GAAG,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACrE,OAAO,CAAC,KAAK,GAAG,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAErE,cAAc,6BAA6B,CAAC;AAC5C,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Page } from '@playwright/test';
|
|
2
|
-
import { ExportComponent, ListBarMenuComponent, PopUpComponent, SnackBarComponent, TopBarComponent } from '../components/index.js';
|
|
2
|
+
import { ExportComponent, ListBarMenuComponent, ManagePrefilterPopup, PopUpComponent, SnackBarComponent, TopBarComponent } from '../components/index.js';
|
|
3
3
|
import type { Test } from '../types/Test.js';
|
|
4
4
|
declare class GlobalComponents {
|
|
5
5
|
popUp: PopUpComponent;
|
|
@@ -7,6 +7,7 @@ declare class GlobalComponents {
|
|
|
7
7
|
snackBar: SnackBarComponent;
|
|
8
8
|
topBar: TopBarComponent;
|
|
9
9
|
listBarMenu: ListBarMenuComponent;
|
|
10
|
+
managePrefilterPopup: ManagePrefilterPopup;
|
|
10
11
|
constructor(page: Page);
|
|
11
12
|
}
|
|
12
13
|
declare module '@playwright/test' {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ExportComponent, ListBarMenuComponent, PopUpComponent, SnackBarComponent, TopBarComponent } from '../components/index.js';
|
|
1
|
+
import { ExportComponent, ListBarMenuComponent, ManagePrefilterPopup, PopUpComponent, SnackBarComponent, TopBarComponent } from '../components/index.js';
|
|
2
2
|
class GlobalComponents {
|
|
3
3
|
constructor(page) {
|
|
4
4
|
this.popUp = new PopUpComponent(page);
|
|
@@ -6,6 +6,7 @@ class GlobalComponents {
|
|
|
6
6
|
this.snackBar = new SnackBarComponent(page);
|
|
7
7
|
this.topBar = new TopBarComponent(page);
|
|
8
8
|
this.listBarMenu = new ListBarMenuComponent(page);
|
|
9
|
+
this.managePrefilterPopup = new ManagePrefilterPopup(page);
|
|
9
10
|
}
|
|
10
11
|
}
|
|
11
12
|
export class Components {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GlobalComponents.js","sourceRoot":"","sources":["../../page-extensions/GlobalComponents.ts"],"names":[],"mappings":"AACA,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,cAAc,EACd,iBAAiB,EACjB,eAAe,EAChB,MAAM,wBAAwB,CAAC;AAGhC,MAAM,gBAAgB;
|
|
1
|
+
{"version":3,"file":"GlobalComponents.js","sourceRoot":"","sources":["../../page-extensions/GlobalComponents.ts"],"names":[],"mappings":"AACA,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,oBAAoB,EACpB,cAAc,EACd,iBAAiB,EACjB,eAAe,EAChB,MAAM,wBAAwB,CAAC;AAGhC,MAAM,gBAAgB;IAQpB,YAAY,IAAU;QACpB,IAAI,CAAC,KAAK,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,CAAC,QAAQ,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,CAAC,WAAW,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,CAAC,oBAAoB,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAC7D,CAAC;CACF;AAQD,MAAM,OAAO,UAAU;IAGrB,YAAY,IAAU;QACpB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;YACvB,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;gBAC5B,IAAI,CAAC,UAAU,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC;gBAE7C,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;CACF"}
|
|
@@ -4,18 +4,29 @@ const waitForRequestsToComplete = testwiseConfig().get('featureSettings.Inflight
|
|
|
4
4
|
const continueOnError = testwiseConfig().get('featureSettings.InflightRequests.continueOnError') ?? true;
|
|
5
5
|
export class ClickOverride {
|
|
6
6
|
constructor(test) {
|
|
7
|
+
this._page = null;
|
|
7
8
|
this.flightTracker = new FlightTracker();
|
|
8
9
|
this._test = test.extend({
|
|
9
10
|
page: async ({ page }, use) => {
|
|
11
|
+
this._page = page;
|
|
12
|
+
const isTrackable = (url, resourceType) => {
|
|
13
|
+
const lowerUrl = url.toLowerCase();
|
|
14
|
+
return (resourceType === 'xhr' &&
|
|
15
|
+
!lowerUrl.includes('/detect_change(') &&
|
|
16
|
+
!lowerUrl.includes('/set_gui_start_use_log_session') &&
|
|
17
|
+
!lowerUrl.includes('download_icon') &&
|
|
18
|
+
!lowerUrl.includes('download_list_bar_grp_icon') &&
|
|
19
|
+
!lowerUrl.includes('/badge()'));
|
|
20
|
+
};
|
|
10
21
|
const overrideClickMethod = (locator) => {
|
|
11
22
|
const originalClickMethod = locator.click.bind(locator);
|
|
12
23
|
page.on('request', (request) => {
|
|
13
|
-
if (request.
|
|
24
|
+
if (isTrackable(request.url(), request.resourceType())) {
|
|
14
25
|
this.flightTracker.requestsInFlight++;
|
|
15
26
|
}
|
|
16
27
|
});
|
|
17
28
|
page.on('response', (response) => {
|
|
18
|
-
if (response.request().
|
|
29
|
+
if (isTrackable(response.request().url(), response.request().resourceType())) {
|
|
19
30
|
if (this.flightTracker.requestsInFlight > 0) {
|
|
20
31
|
this.flightTracker.requestsInFlight--;
|
|
21
32
|
}
|
|
@@ -32,57 +43,57 @@ export class ClickOverride {
|
|
|
32
43
|
}
|
|
33
44
|
catch (error) {
|
|
34
45
|
console.warn('Exception while waiting for inflight requests to finish:', error);
|
|
46
|
+
if (this._page) {
|
|
47
|
+
const inflightRequests = await this._page.evaluate(() => {
|
|
48
|
+
return performance
|
|
49
|
+
.getEntriesByType('resource')
|
|
50
|
+
.filter((entry) => {
|
|
51
|
+
const res = entry;
|
|
52
|
+
return (res.initiatorType === 'xmlhttprequest' &&
|
|
53
|
+
!res.name.includes('/detect_change(') &&
|
|
54
|
+
!res.name.includes('/set_gui_start_use_log_session'));
|
|
55
|
+
})
|
|
56
|
+
.map((entry) => entry.name);
|
|
57
|
+
});
|
|
58
|
+
console.debug('Current inflight XHR requests:', inflightRequests);
|
|
59
|
+
}
|
|
35
60
|
if (!continueOnError)
|
|
36
61
|
throw error;
|
|
37
62
|
}
|
|
38
63
|
}
|
|
64
|
+
return;
|
|
39
65
|
};
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
locator.getByRole = (...args) => overrideClickMethod(originalGetByRoleMethod(...args));
|
|
56
|
-
const originalGetByPlaceholderMethod = locator.getByPlaceholder.bind(locator);
|
|
57
|
-
locator.getByPlaceholder = (...args) => overrideClickMethod(originalGetByPlaceholderMethod(...args));
|
|
58
|
-
const originalGetByTitleMethod = locator.getByTitle.bind(locator);
|
|
59
|
-
locator.getByTitle = (...args) => overrideClickMethod(originalGetByTitleMethod(...args));
|
|
66
|
+
const locatorMethods = [
|
|
67
|
+
'locator',
|
|
68
|
+
'filter',
|
|
69
|
+
'getByText',
|
|
70
|
+
'getByTestId',
|
|
71
|
+
'getByAltText',
|
|
72
|
+
'getByLabel',
|
|
73
|
+
'getByRole',
|
|
74
|
+
'getByPlaceholder',
|
|
75
|
+
'getByTitle'
|
|
76
|
+
];
|
|
77
|
+
for (const method of locatorMethods) {
|
|
78
|
+
const original = locator[method].bind(locator);
|
|
79
|
+
locator[method] = (...args) => overrideClickMethod(original(...args));
|
|
80
|
+
}
|
|
60
81
|
return locator;
|
|
61
82
|
};
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
const
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
page.getByRole = (...args) => overrideClickMethod(originalGetByRole(...args));
|
|
77
|
-
// Override the getByPlaceholder.click method
|
|
78
|
-
const originalGetByPlaceholder = page.getByPlaceholder.bind(page);
|
|
79
|
-
page.getByPlaceholder = (...args) => overrideClickMethod(originalGetByPlaceholder(...args));
|
|
80
|
-
// Override the getByText.click method
|
|
81
|
-
const originalGetByText = page.getByText.bind(page);
|
|
82
|
-
page.getByText = (...args) => overrideClickMethod(originalGetByText(...args));
|
|
83
|
-
// Override the getByTitle.click method
|
|
84
|
-
const originalGetByTitle = page.getByTitle.bind(page);
|
|
85
|
-
page.getByTitle = (...args) => overrideClickMethod(originalGetByTitle(...args));
|
|
83
|
+
const rootMethods = [
|
|
84
|
+
'locator',
|
|
85
|
+
'getByTestId',
|
|
86
|
+
'getByAltText',
|
|
87
|
+
'getByLabel',
|
|
88
|
+
'getByRole',
|
|
89
|
+
'getByPlaceholder',
|
|
90
|
+
'getByText',
|
|
91
|
+
'getByTitle'
|
|
92
|
+
];
|
|
93
|
+
for (const method of rootMethods) {
|
|
94
|
+
const original = page[method].bind(page);
|
|
95
|
+
page[method] = (...args) => overrideClickMethod(original(...args));
|
|
96
|
+
}
|
|
86
97
|
await use(page);
|
|
87
98
|
}
|
|
88
99
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClickOverride.js","sourceRoot":"","sources":["../../page-overrides/ClickOverride.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAG9D,MAAM,yBAAyB,GAC7B,cAAc,EAAE,CAAC,GAAG,CAAU,4DAA4D,CAAC,IAAI,IAAI,CAAC;AACtG,MAAM,eAAe,GAAG,cAAc,EAAE,CAAC,GAAG,CAAU,kDAAkD,CAAC,IAAI,IAAI,CAAC;AAElH,MAAM,OAAO,aAAa;
|
|
1
|
+
{"version":3,"file":"ClickOverride.js","sourceRoot":"","sources":["../../page-overrides/ClickOverride.ts"],"names":[],"mappings":"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"}
|
package/enums/ElementTypes.ts
CHANGED
package/helpers/FlightTracker.ts
CHANGED
|
@@ -2,25 +2,85 @@ import { EventEmitter } from 'node:events';
|
|
|
2
2
|
import { testwiseConfig } from '../services/ConfigBuilder.js';
|
|
3
3
|
|
|
4
4
|
const timeout = testwiseConfig().get<number>('featureSettings.InflightRequests.waitTimeout') ?? 5000;
|
|
5
|
+
const stabilityTime = 150;
|
|
5
6
|
|
|
6
7
|
export class FlightTracker {
|
|
7
8
|
public requestsInFlight: number = 0;
|
|
9
|
+
private activeRequests = new Set<string>();
|
|
8
10
|
public eventEmitter: EventEmitter = new EventEmitter();
|
|
9
11
|
|
|
12
|
+
/**
|
|
13
|
+
* Filters out non-functional "noise" requests that shouldn't block test execution.
|
|
14
|
+
*/
|
|
15
|
+
public isEssentialRequest(url: string): boolean {
|
|
16
|
+
const noisePatterns = [
|
|
17
|
+
'.download_icon',
|
|
18
|
+
'.download_list_bar_grp_icon',
|
|
19
|
+
'.download_form_next_grp_icon',
|
|
20
|
+
'/badge()',
|
|
21
|
+
'universal_background_picture',
|
|
22
|
+
'i_ui_theme'
|
|
23
|
+
];
|
|
24
|
+
|
|
25
|
+
return !noisePatterns.some((pattern) => url.includes(pattern));
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
public handleRequestStarted = (url: string) => {
|
|
29
|
+
if (this.isEssentialRequest(url)) {
|
|
30
|
+
this.activeRequests.add(url);
|
|
31
|
+
this.requestsInFlight = this.activeRequests.size;
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
public handleRequestFinished = (url: string) => {
|
|
36
|
+
if (this.isEssentialRequest(url)) {
|
|
37
|
+
this.activeRequests.delete(url);
|
|
38
|
+
this.requestsInFlight = this.activeRequests.size;
|
|
39
|
+
if (this.requestsInFlight === 0) {
|
|
40
|
+
this.eventEmitter.emit('idle');
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
|
|
10
45
|
public waitToContinue = async (): Promise<void> => {
|
|
11
46
|
if (this.requestsInFlight === 0) {
|
|
12
|
-
|
|
47
|
+
await new Promise((res) => setTimeout(res, stabilityTime));
|
|
48
|
+
if (this.requestsInFlight === 0) return;
|
|
13
49
|
}
|
|
14
50
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
51
|
+
let timeoutId: NodeJS.Timeout;
|
|
52
|
+
|
|
53
|
+
const idlePromise = new Promise<void>((resolve) => {
|
|
54
|
+
const checkIdle = () => {
|
|
55
|
+
if (this.requestsInFlight === 0) {
|
|
56
|
+
setTimeout(() => {
|
|
57
|
+
if (this.requestsInFlight === 0) {
|
|
58
|
+
this.eventEmitter.off('idle', checkIdle);
|
|
59
|
+
resolve();
|
|
60
|
+
}
|
|
61
|
+
}, stabilityTime);
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
this.eventEmitter.on('idle', checkIdle);
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
const timeoutPromise = new Promise<void>((_, reject) => {
|
|
68
|
+
timeoutId = setTimeout(() => {
|
|
69
|
+
const pending = Array.from(this.activeRequests).join('\n -> ');
|
|
70
|
+
reject(
|
|
71
|
+
new Error(
|
|
72
|
+
`Timeout waiting for ${this.requestsInFlight} requests to complete (${timeout}ms).\nPending Essential Requests:\n -> ${pending}`
|
|
73
|
+
)
|
|
74
|
+
);
|
|
75
|
+
}, timeout);
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
try {
|
|
79
|
+
await Promise.race([idlePromise, timeoutPromise]);
|
|
80
|
+
} finally {
|
|
81
|
+
// biome-ignore lint/style/noNonNullAssertion: should be defined if we reach here
|
|
82
|
+
if (timeoutId!) clearTimeout(timeoutId);
|
|
83
|
+
this.eventEmitter.removeAllListeners('idle');
|
|
84
|
+
}
|
|
25
85
|
};
|
|
26
86
|
}
|