@smartbit4all/playwright-qa 0.1.6 → 0.1.8
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/README.md +87 -15
- package/dist/screenshot/highlight.d.ts +4 -3
- package/dist/screenshot/highlight.d.ts.map +1 -1
- package/dist/screenshot/highlight.js +10 -4
- package/dist/screenshot/highlight.js.map +1 -1
- package/dist/screenshot/index.d.ts +4 -3
- package/dist/screenshot/index.d.ts.map +1 -1
- package/dist/screenshot/index.js +9 -9
- package/dist/screenshot/index.js.map +1 -1
- package/dist/steps/dialog.steps.d.ts +1 -1
- package/dist/steps/dialog.steps.d.ts.map +1 -1
- package/dist/steps/dialog.steps.js +3 -2
- package/dist/steps/dialog.steps.js.map +1 -1
- package/dist/steps/forms.d.ts +69 -0
- package/dist/steps/forms.d.ts.map +1 -0
- package/dist/steps/forms.js +298 -0
- package/dist/steps/forms.js.map +1 -0
- package/dist/steps/grid.steps.d.ts.map +1 -1
- package/dist/steps/grid.steps.js +3 -2
- package/dist/steps/grid.steps.js.map +1 -1
- package/dist/steps/index.d.ts +2 -0
- package/dist/steps/index.d.ts.map +1 -1
- package/dist/steps/index.js +19 -1
- package/dist/steps/index.js.map +1 -1
- package/dist/steps/locators.d.ts +16 -0
- package/dist/steps/locators.d.ts.map +1 -0
- package/dist/steps/locators.js +30 -0
- package/dist/steps/locators.js.map +1 -0
- package/dist/steps/navigation.steps.d.ts.map +1 -1
- package/dist/steps/navigation.steps.js +3 -2
- package/dist/steps/navigation.steps.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -90,18 +90,20 @@ await screenshot(page, 'page-name');
|
|
|
90
90
|
await screenshot(page, 'category/page-name'); // name path = subdirectory
|
|
91
91
|
await screenshot(page, 'page-name', { fullPage: true });
|
|
92
92
|
|
|
93
|
-
// Full page with highlighted element
|
|
93
|
+
// Full page with highlighted element — accepts CSS selector or Locator
|
|
94
94
|
await screenshotHighlight(page, 'name', '#selector');
|
|
95
95
|
await screenshotHighlight(page, 'name', '#selector', { style: 'subtle' });
|
|
96
|
+
await screenshotHighlight(page, 'name', findMenuItem(page, 'Új mappa')); // Locator
|
|
96
97
|
|
|
97
|
-
// Region screenshot (single element)
|
|
98
|
+
// Region screenshot (single element) — accepts CSS selector or Locator
|
|
98
99
|
await screenshotRegion(page, 'name', '#region-selector');
|
|
99
100
|
|
|
100
|
-
// Region with highlighted element inside
|
|
101
|
+
// Region with highlighted element inside — both accept CSS selector or Locator
|
|
101
102
|
await screenshotRegionHighlight(page, 'name', '#region', '#highlight');
|
|
103
|
+
await screenshotRegionHighlight(page, 'name', findPopupMenu(page), findMenuItem(page, 'Új mappa'));
|
|
102
104
|
```
|
|
103
105
|
|
|
104
|
-
All screenshot functions return `Promise<string | null>`. They return `null` when no screenshot directory has been configured (see [Suite Setup](#suite-setup)).
|
|
106
|
+
All screenshot functions return `Promise<string | null>`. They return `null` when no screenshot directory has been configured (see [Suite Setup](#suite-setup)). Highlight and region parameters accept both CSS selectors (string) and Playwright Locators.
|
|
105
107
|
|
|
106
108
|
### Datapool
|
|
107
109
|
|
|
@@ -132,6 +134,59 @@ The package ships reusable TestSteps for common smartbit4all UI patterns (grid,
|
|
|
132
134
|
import { selectGridRow, navigateInTree } from '@smartbit4all/playwright-qa/steps';
|
|
133
135
|
```
|
|
134
136
|
|
|
137
|
+
### Forms
|
|
138
|
+
|
|
139
|
+
```typescript
|
|
140
|
+
import {
|
|
141
|
+
fillField, fillDate, fillDateTime,
|
|
142
|
+
selectOption, selectMultiple, selectRadio,
|
|
143
|
+
setCheckbox, setCheckboxGroup, setToggle,
|
|
144
|
+
addChip, removeChip, setChips,
|
|
145
|
+
uploadFile,
|
|
146
|
+
} from '@smartbit4all/playwright-qa/steps';
|
|
147
|
+
|
|
148
|
+
// Fill a text input or textarea — by data-testid (preferred) or label text (fallback)
|
|
149
|
+
await fillField(dialog, 'data.name', 'Teszt mappa'); // data-testid
|
|
150
|
+
await fillField(page, 'dossierContentData.name', 'Teszt dosszié'); // data-testid
|
|
151
|
+
await fillField(page, 'Megjegyzés', 'Ez egy megjegyzés'); // label fallback
|
|
152
|
+
|
|
153
|
+
// Date picker (ISO format YYYY-MM-DD)
|
|
154
|
+
await fillDate(dialog, 'dataSheet.startDate', '2026-04-15');
|
|
155
|
+
|
|
156
|
+
// Date-time picker (date + time)
|
|
157
|
+
await fillDateTime(dialog, 'data.deadline', '2026-04-15', '14:30');
|
|
158
|
+
|
|
159
|
+
// Select from a dropdown (mat-select / p-dropdown) — by data-testid or label
|
|
160
|
+
await selectOption(page, 'selectedDocumentTypeCategory', 'Ügyintézés'); // data-testid
|
|
161
|
+
await selectOption(dialog, 'Kategória', 'Ügyintézés'); // label fallback
|
|
162
|
+
|
|
163
|
+
// Multi-select dropdown
|
|
164
|
+
await selectMultiple(dialog, 'data.skills', ['Angular', 'React', 'Vue']);
|
|
165
|
+
|
|
166
|
+
// Select a radio button — by data-testid on the radio group or label
|
|
167
|
+
await selectRadio(dialog, 'data.canIncludeFiles', 'Nem'); // data-testid
|
|
168
|
+
await selectRadio(dialog, 'Tartalmazhat almappákat', 'Igen'); // label fallback
|
|
169
|
+
|
|
170
|
+
// Set a checkbox — by data-testid or label
|
|
171
|
+
await setCheckbox(dialog, 'Aktív', true);
|
|
172
|
+
|
|
173
|
+
// Checkbox group (CHECK_BOX_2) — set multiple checkboxes at once
|
|
174
|
+
await setCheckboxGroup(dialog, 'permissions', { 'Olvasás': true, 'Írás': true, 'Törlés': false });
|
|
175
|
+
|
|
176
|
+
// Toggle switch
|
|
177
|
+
await setToggle(dialog, 'data.isActive', true);
|
|
178
|
+
|
|
179
|
+
// Chips — add, remove, or set declaratively
|
|
180
|
+
await addChip(dialog, 'data.tags', 'urgent');
|
|
181
|
+
await removeChip(dialog, 'data.tags', 'draft');
|
|
182
|
+
await setChips(dialog, 'data.tags', ['urgent', 'review']);
|
|
183
|
+
|
|
184
|
+
// File upload
|
|
185
|
+
await uploadFile(dialog, 'data.attachment', '/path/to/file.pdf');
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
All form utilities accept a `data-testid` value or a visible label text as identifier. When a `data-testid` match is found on the element, it takes priority; otherwise the function falls back to label text matching (`.smart-form-widget-label`, `h3`, `h4`, or `label`). They work with both Angular Material and PrimeNG components, and accept any `Locator` or `Page` as container — use `topDialog(page)` to scope to a dialog.
|
|
189
|
+
|
|
135
190
|
### Grid
|
|
136
191
|
|
|
137
192
|
```typescript
|
|
@@ -177,21 +232,11 @@ await navigateInTree(page, ['Ügyek']);
|
|
|
177
232
|
await navigateInTree(page, ['Dokumentumok', 'Tender']);
|
|
178
233
|
|
|
179
234
|
// Open the last node's context menu (hamburger button) and click an action
|
|
180
|
-
await navigateInTree(page, ['Dokumentumok', 'Bejövő
|
|
235
|
+
await navigateInTree(page, ['Dokumentumok', 'Bejövő e-mail'], 'Új mappa');
|
|
181
236
|
|
|
182
237
|
// Open context menu only (for screenshots) — pass true, then close with Escape
|
|
183
238
|
await navigateInTree(page, ['Dokumentumok', 'Bejövő e-mail'], true);
|
|
184
239
|
await screenshot(page, 'context-menu-open');
|
|
185
|
-
|
|
186
|
-
// Full page screenshot with a menu item highlighted
|
|
187
|
-
await screenshotHighlight(page, 'context-menu-highlight',
|
|
188
|
-
'.mat-mdc-menu-panel button.mat-mdc-menu-item:has-text("Új mappa")');
|
|
189
|
-
|
|
190
|
-
// Only the popup menu with a menu item highlighted
|
|
191
|
-
await screenshotRegionHighlight(page, 'context-menu-region',
|
|
192
|
-
'.mat-mdc-menu-panel',
|
|
193
|
-
'.mat-mdc-menu-panel button.mat-mdc-menu-item:has-text("Új mappa")');
|
|
194
|
-
|
|
195
240
|
await page.keyboard.press('Escape');
|
|
196
241
|
```
|
|
197
242
|
|
|
@@ -227,6 +272,33 @@ await waitForAngularIdle(page);
|
|
|
227
272
|
|
|
228
273
|
`waitForAngularIdle` is also available for project-specific steps that need the same wait pattern.
|
|
229
274
|
|
|
275
|
+
### Locators
|
|
276
|
+
|
|
277
|
+
```typescript
|
|
278
|
+
import { findButton, findPopupMenu, findMenuItem } from '@smartbit4all/playwright-qa/steps';
|
|
279
|
+
|
|
280
|
+
// Find a button by data-testid (preferred) or visible text (fallback)
|
|
281
|
+
await findButton(page, 'REFRESH').click(); // matches data-testid="REFRESH"
|
|
282
|
+
await findButton(page, 'Mentés').click(); // matches button text "Mentés"
|
|
283
|
+
|
|
284
|
+
// Works inside a container (e.g., dialog)
|
|
285
|
+
await findButton(topDialog(page), 'Mentés').click();
|
|
286
|
+
|
|
287
|
+
// Find the currently visible popup menu (Angular Material or PrimeNG)
|
|
288
|
+
const menu = findPopupMenu(page);
|
|
289
|
+
|
|
290
|
+
// Find a menu item by data-testid or text
|
|
291
|
+
await findMenuItem(page, 'Szerkesztés').click();
|
|
292
|
+
await findMenuItem(page, 'DELETE_ACTION').click(); // matches data-testid="DELETE_ACTION"
|
|
293
|
+
|
|
294
|
+
// Combine with screenshot functions for highlighting
|
|
295
|
+
await screenshotHighlight(page, 'menu-highlight', findMenuItem(page, 'Új mappa'));
|
|
296
|
+
await screenshotRegionHighlight(page, 'menu-region',
|
|
297
|
+
findPopupMenu(page), findMenuItem(page, 'Új mappa'));
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
All built-in steps (`clickInDialog`, `selectGridRow`, `navigateInTree`) use these locators internally, so they automatically support `data-testid` values alongside text matching.
|
|
301
|
+
|
|
230
302
|
## Developer Guide — Writing TestSteps
|
|
231
303
|
|
|
232
304
|
TestSteps are simple async functions that implement one atomic UI operation.
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import type { Page } from '@playwright/test';
|
|
1
|
+
import type { Page, Locator } from '@playwright/test';
|
|
2
2
|
import { type HighlightStyle } from '../config';
|
|
3
|
+
export type SelectorOrLocator = string | Locator;
|
|
3
4
|
interface SavedStyle {
|
|
4
5
|
outline: string;
|
|
5
6
|
backgroundColor: string;
|
|
6
7
|
}
|
|
7
|
-
export declare function applyHighlight(page: Page,
|
|
8
|
-
export declare function removeHighlight(page: Page,
|
|
8
|
+
export declare function applyHighlight(page: Page, target: SelectorOrLocator, style?: HighlightStyle): Promise<SavedStyle>;
|
|
9
|
+
export declare function removeHighlight(page: Page, target: SelectorOrLocator, savedStyle: SavedStyle): Promise<void>;
|
|
9
10
|
export {};
|
|
10
11
|
//# sourceMappingURL=highlight.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"highlight.d.ts","sourceRoot":"","sources":["../../src/screenshot/highlight.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"highlight.d.ts","sourceRoot":"","sources":["../../src/screenshot/highlight.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAqB,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC;AAEnE,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,OAAO,CAAC;AAEjD,UAAU,UAAU;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;CACzB;AASD,wBAAsB,cAAc,CAClC,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,iBAAiB,EACzB,KAAK,CAAC,EAAE,cAAc,GACrB,OAAO,CAAC,UAAU,CAAC,CAuBrB;AAED,wBAAsB,eAAe,CACnC,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,iBAAiB,EACzB,UAAU,EAAE,UAAU,GACrB,OAAO,CAAC,IAAI,CAAC,CAcf"}
|
|
@@ -3,9 +3,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.applyHighlight = applyHighlight;
|
|
4
4
|
exports.removeHighlight = removeHighlight;
|
|
5
5
|
const config_1 = require("../config");
|
|
6
|
-
|
|
6
|
+
function resolveLocator(page, target) {
|
|
7
|
+
if (typeof target === 'string') {
|
|
8
|
+
return page.locator(target).first();
|
|
9
|
+
}
|
|
10
|
+
return target;
|
|
11
|
+
}
|
|
12
|
+
async function applyHighlight(page, target, style) {
|
|
7
13
|
const highlightStyle = style ?? (0, config_1.getHighlightStyle)('default');
|
|
8
|
-
const locator = page
|
|
14
|
+
const locator = resolveLocator(page, target);
|
|
9
15
|
await locator.waitFor({ state: 'visible' });
|
|
10
16
|
const savedStyle = await locator.evaluate((el, hl) => {
|
|
11
17
|
const htmlEl = el;
|
|
@@ -20,9 +26,9 @@ async function applyHighlight(page, selector, style) {
|
|
|
20
26
|
await page.evaluate(() => new Promise((resolve) => requestAnimationFrame(resolve)));
|
|
21
27
|
return savedStyle;
|
|
22
28
|
}
|
|
23
|
-
async function removeHighlight(page,
|
|
29
|
+
async function removeHighlight(page, target, savedStyle) {
|
|
24
30
|
try {
|
|
25
|
-
const locator = page
|
|
31
|
+
const locator = resolveLocator(page, target);
|
|
26
32
|
await locator.evaluate((el, saved) => {
|
|
27
33
|
const htmlEl = el;
|
|
28
34
|
htmlEl.style.outline = saved.outline;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"highlight.js","sourceRoot":"","sources":["../../src/screenshot/highlight.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"highlight.js","sourceRoot":"","sources":["../../src/screenshot/highlight.ts"],"names":[],"mappings":";;AAiBA,wCA2BC;AAED,0CAkBC;AA/DD,sCAAmE;AASnE,SAAS,cAAc,CAAC,IAAU,EAAE,MAAyB;IAC3D,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;IACtC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAEM,KAAK,UAAU,cAAc,CAClC,IAAU,EACV,MAAyB,EACzB,KAAsB;IAEtB,MAAM,cAAc,GAAG,KAAK,IAAI,IAAA,0BAAiB,EAAC,SAAS,CAAC,CAAC;IAE7D,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC7C,MAAM,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IAE5C,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,QAAQ,CACvC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE;QACT,MAAM,MAAM,GAAG,EAAiB,CAAC;QACjC,MAAM,KAAK,GAAG;YACZ,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO;YAC7B,eAAe,EAAE,MAAM,CAAC,KAAK,CAAC,eAAe;SAC9C,CAAC;QACF,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC;QAClC,MAAM,CAAC,KAAK,CAAC,eAAe,GAAG,EAAE,CAAC,eAAe,CAAC;QAClD,OAAO,KAAK,CAAC;IACf,CAAC,EACD,cAAc,CACf,CAAC;IAEF,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAEpF,OAAO,UAAU,CAAC;AACpB,CAAC;AAEM,KAAK,UAAU,eAAe,CACnC,IAAU,EACV,MAAyB,EACzB,UAAsB;IAEtB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC7C,MAAM,OAAO,CAAC,QAAQ,CACpB,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE;YACZ,MAAM,MAAM,GAAG,EAAiB,CAAC;YACjC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;YACrC,MAAM,CAAC,KAAK,CAAC,eAAe,GAAG,KAAK,CAAC,eAAe,CAAC;QACvD,CAAC,EACD,UAAU,CACX,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,kEAAkE;IACpE,CAAC;AACH,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Page } from '@playwright/test';
|
|
2
|
+
import { type SelectorOrLocator } from './highlight';
|
|
2
3
|
export { initScreenshotDir, resetScreenshotDir, setScreenshotDir, isScreenshotEnabled, getScreenshotBaseDir, setAutoPrefix, resetScreenshotCounter, setScreenshotCounter, setOnCounterChange } from './directory';
|
|
3
4
|
export interface ScreenshotOptions {
|
|
4
5
|
fullPage?: boolean;
|
|
@@ -6,7 +7,7 @@ export interface ScreenshotOptions {
|
|
|
6
7
|
style?: string;
|
|
7
8
|
}
|
|
8
9
|
export declare function screenshot(page: Page, name: string, options?: ScreenshotOptions): Promise<string | null>;
|
|
9
|
-
export declare function screenshotHighlight(page: Page, name: string,
|
|
10
|
-
export declare function screenshotRegion(page: Page, name: string,
|
|
11
|
-
export declare function screenshotRegionHighlight(page: Page, name: string,
|
|
10
|
+
export declare function screenshotHighlight(page: Page, name: string, highlight: SelectorOrLocator, options?: ScreenshotOptions): Promise<string | null>;
|
|
11
|
+
export declare function screenshotRegion(page: Page, name: string, region: SelectorOrLocator, options?: ScreenshotOptions): Promise<string | null>;
|
|
12
|
+
export declare function screenshotRegionHighlight(page: Page, name: string, region: SelectorOrLocator, highlight: SelectorOrLocator, options?: ScreenshotOptions): Promise<string | null>;
|
|
12
13
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/screenshot/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/screenshot/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAW,MAAM,kBAAkB,CAAC;AAEtD,OAAO,EAAmC,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGtF,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,aAAa,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAElN,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,UAAU,CAC9B,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAMxB;AAED,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,iBAAiB,EAC5B,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAWxB;AAED,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,iBAAiB,EACzB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAOxB;AAED,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,iBAAiB,EACzB,SAAS,EAAE,iBAAiB,EAC5B,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAYxB"}
|
package/dist/screenshot/index.js
CHANGED
|
@@ -25,33 +25,33 @@ async function screenshot(page, name, options = {}) {
|
|
|
25
25
|
await page.screenshot({ path: filePath, fullPage: options.fullPage ?? false });
|
|
26
26
|
return filePath;
|
|
27
27
|
}
|
|
28
|
-
async function screenshotHighlight(page, name,
|
|
28
|
+
async function screenshotHighlight(page, name, highlight, options = {}) {
|
|
29
29
|
if (!(0, directory_1.isScreenshotEnabled)())
|
|
30
30
|
return null;
|
|
31
31
|
const style = options.style ? (0, config_1.getHighlightStyle)(options.style) : undefined;
|
|
32
|
-
const savedStyle = await (0, highlight_1.applyHighlight)(page,
|
|
32
|
+
const savedStyle = await (0, highlight_1.applyHighlight)(page, highlight, style);
|
|
33
33
|
const filePath = (0, directory_1.resolveScreenshotPath)(name, options.subdirectory);
|
|
34
34
|
await page.screenshot({ path: filePath, fullPage: options.fullPage ?? false });
|
|
35
|
-
await (0, highlight_1.removeHighlight)(page,
|
|
35
|
+
await (0, highlight_1.removeHighlight)(page, highlight, savedStyle);
|
|
36
36
|
return filePath;
|
|
37
37
|
}
|
|
38
|
-
async function screenshotRegion(page, name,
|
|
38
|
+
async function screenshotRegion(page, name, region, options = {}) {
|
|
39
39
|
if (!(0, directory_1.isScreenshotEnabled)())
|
|
40
40
|
return null;
|
|
41
41
|
const filePath = (0, directory_1.resolveScreenshotPath)(name, options.subdirectory);
|
|
42
|
-
const element = page.locator(
|
|
42
|
+
const element = typeof region === 'string' ? page.locator(region) : region;
|
|
43
43
|
await element.screenshot({ path: filePath });
|
|
44
44
|
return filePath;
|
|
45
45
|
}
|
|
46
|
-
async function screenshotRegionHighlight(page, name,
|
|
46
|
+
async function screenshotRegionHighlight(page, name, region, highlight, options = {}) {
|
|
47
47
|
if (!(0, directory_1.isScreenshotEnabled)())
|
|
48
48
|
return null;
|
|
49
49
|
const style = options.style ? (0, config_1.getHighlightStyle)(options.style) : undefined;
|
|
50
|
-
const savedStyle = await (0, highlight_1.applyHighlight)(page,
|
|
50
|
+
const savedStyle = await (0, highlight_1.applyHighlight)(page, highlight, style);
|
|
51
51
|
const filePath = (0, directory_1.resolveScreenshotPath)(name, options.subdirectory);
|
|
52
|
-
const element = page.locator(
|
|
52
|
+
const element = typeof region === 'string' ? page.locator(region) : region;
|
|
53
53
|
await element.screenshot({ path: filePath });
|
|
54
|
-
await (0, highlight_1.removeHighlight)(page,
|
|
54
|
+
await (0, highlight_1.removeHighlight)(page, highlight, savedStyle);
|
|
55
55
|
return filePath;
|
|
56
56
|
}
|
|
57
57
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/screenshot/index.ts"],"names":[],"mappings":";;;AAaA,gCAUC;AAED,kDAgBC;AAED,4CAYC;AAED,8DAkBC;AA1ED,2CAAyE;AACzE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/screenshot/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ import type { Page, Locator } from '@playwright/test';
|
|
|
4
4
|
*/
|
|
5
5
|
export declare function topDialog(page: Page): Locator;
|
|
6
6
|
/**
|
|
7
|
-
* Clicks a button inside the topmost dialog by
|
|
7
|
+
* Clicks a button inside the topmost dialog by data-testid or visible text.
|
|
8
8
|
*/
|
|
9
9
|
export declare function clickInDialog(page: Page, buttonText: string): Promise<void>;
|
|
10
10
|
//# sourceMappingURL=dialog.steps.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dialog.steps.d.ts","sourceRoot":"","sources":["../../src/steps/dialog.steps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"dialog.steps.d.ts","sourceRoot":"","sources":["../../src/steps/dialog.steps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAMtD;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAE7C;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIjF"}
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.topDialog = topDialog;
|
|
4
4
|
exports.clickInDialog = clickInDialog;
|
|
5
5
|
const wait_1 = require("./wait");
|
|
6
|
+
const locators_1 = require("./locators");
|
|
6
7
|
const DIALOG_SELECTOR = 'mat-dialog-container, .p-dialog';
|
|
7
8
|
/**
|
|
8
9
|
* Returns the topmost (last) open dialog (Angular Material or PrimeNG).
|
|
@@ -11,11 +12,11 @@ function topDialog(page) {
|
|
|
11
12
|
return page.locator(DIALOG_SELECTOR).last();
|
|
12
13
|
}
|
|
13
14
|
/**
|
|
14
|
-
* Clicks a button inside the topmost dialog by
|
|
15
|
+
* Clicks a button inside the topmost dialog by data-testid or visible text.
|
|
15
16
|
*/
|
|
16
17
|
async function clickInDialog(page, buttonText) {
|
|
17
18
|
const dialog = topDialog(page);
|
|
18
|
-
await
|
|
19
|
+
await (0, locators_1.findButton)(dialog, buttonText).click();
|
|
19
20
|
await (0, wait_1.waitForAngularIdle)(page);
|
|
20
21
|
}
|
|
21
22
|
//# sourceMappingURL=dialog.steps.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dialog.steps.js","sourceRoot":"","sources":["../../src/steps/dialog.steps.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"dialog.steps.js","sourceRoot":"","sources":["../../src/steps/dialog.steps.ts"],"names":[],"mappings":";;AASA,8BAEC;AAKD,sCAIC;AAnBD,iCAA4C;AAC5C,yCAAwC;AAExC,MAAM,eAAe,GAAG,iCAAiC,CAAC;AAE1D;;GAEG;AACH,SAAgB,SAAS,CAAC,IAAU;IAClC,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,IAAI,EAAE,CAAC;AAC9C,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,aAAa,CAAC,IAAU,EAAE,UAAkB;IAChE,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,IAAA,qBAAU,EAAC,MAAM,EAAE,UAAU,CAAC,CAAC,KAAK,EAAE,CAAC;IAC7C,MAAM,IAAA,yBAAkB,EAAC,IAAI,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type { Page, Locator } from '@playwright/test';
|
|
2
|
+
/**
|
|
3
|
+
* Fills a text input or textarea identified by data-testid or label text.
|
|
4
|
+
*/
|
|
5
|
+
export declare function fillField(container: Locator | Page, identifier: string, value: string): Promise<void>;
|
|
6
|
+
/**
|
|
7
|
+
* Fills a date picker input with an ISO date string (YYYY-MM-DD).
|
|
8
|
+
* Identifier can be a data-testid or a label text.
|
|
9
|
+
*/
|
|
10
|
+
export declare function fillDate(container: Locator | Page, identifier: string, date: string): Promise<void>;
|
|
11
|
+
/**
|
|
12
|
+
* Fills a date-time picker with date (YYYY-MM-DD) and time (HH:mm).
|
|
13
|
+
* PrimeNG: single input with combined value. Material: two separate inputs.
|
|
14
|
+
* Identifier can be a data-testid or a label text.
|
|
15
|
+
*/
|
|
16
|
+
export declare function fillDateTime(container: Locator | Page, identifier: string, date: string, time: string): Promise<void>;
|
|
17
|
+
/**
|
|
18
|
+
* Selects an option from a dropdown (Angular Material mat-select or PrimeNG p-dropdown).
|
|
19
|
+
* Identifier can be a data-testid or a label text.
|
|
20
|
+
*/
|
|
21
|
+
export declare function selectOption(container: Locator | Page, identifier: string, optionText: string): Promise<void>;
|
|
22
|
+
/**
|
|
23
|
+
* Selects multiple options from a multi-select dropdown.
|
|
24
|
+
* Identifier can be a data-testid or a label text.
|
|
25
|
+
*/
|
|
26
|
+
export declare function selectMultiple(container: Locator | Page, identifier: string, options: string[]): Promise<void>;
|
|
27
|
+
/**
|
|
28
|
+
* Selects a radio button inside a radio group identified by data-testid or label text.
|
|
29
|
+
*/
|
|
30
|
+
export declare function selectRadio(container: Locator | Page, identifier: string, value: string): Promise<void>;
|
|
31
|
+
/**
|
|
32
|
+
* Sets a checkbox to the desired state (checked/unchecked).
|
|
33
|
+
* Identifier can be a data-testid or a label text.
|
|
34
|
+
*/
|
|
35
|
+
export declare function setCheckbox(container: Locator | Page, identifier: string, checked: boolean): Promise<void>;
|
|
36
|
+
/**
|
|
37
|
+
* Sets multiple checkboxes in a checkbox group (CHECK_BOX_2 widget).
|
|
38
|
+
* Identifier can be a data-testid or a label text.
|
|
39
|
+
* Selections is a map of checkbox label to desired state.
|
|
40
|
+
* Checkboxes not mentioned in selections are left unchanged.
|
|
41
|
+
*/
|
|
42
|
+
export declare function setCheckboxGroup(container: Locator | Page, identifier: string, selections: Record<string, boolean>): Promise<void>;
|
|
43
|
+
/**
|
|
44
|
+
* Sets a toggle switch to the desired state.
|
|
45
|
+
* Identifier can be a data-testid or a label text.
|
|
46
|
+
*/
|
|
47
|
+
export declare function setToggle(container: Locator | Page, identifier: string, on: boolean): Promise<void>;
|
|
48
|
+
/**
|
|
49
|
+
* Adds a chip to a chip input field.
|
|
50
|
+
* Identifier can be a data-testid or a label text.
|
|
51
|
+
*/
|
|
52
|
+
export declare function addChip(container: Locator | Page, identifier: string, value: string): Promise<void>;
|
|
53
|
+
/**
|
|
54
|
+
* Removes a chip from a chip input field by its displayed text.
|
|
55
|
+
* Identifier can be a data-testid or a label text.
|
|
56
|
+
*/
|
|
57
|
+
export declare function removeChip(container: Locator | Page, identifier: string, value: string): Promise<void>;
|
|
58
|
+
/**
|
|
59
|
+
* Sets the chips to the desired list of values.
|
|
60
|
+
* Removes chips not in the list, adds missing ones.
|
|
61
|
+
* Identifier can be a data-testid or a label text.
|
|
62
|
+
*/
|
|
63
|
+
export declare function setChips(container: Locator | Page, identifier: string, values: string[]): Promise<void>;
|
|
64
|
+
/**
|
|
65
|
+
* Uploads a file to a file uploader widget.
|
|
66
|
+
* Identifier can be a data-testid or a label text.
|
|
67
|
+
*/
|
|
68
|
+
export declare function uploadFile(container: Locator | Page, identifier: string, filePath: string): Promise<void>;
|
|
69
|
+
//# sourceMappingURL=forms.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"forms.d.ts","sourceRoot":"","sources":["../../src/steps/forms.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AA8DtD;;GAEG;AACH,wBAAsB,SAAS,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG3G;AAED;;;GAGG;AACH,wBAAsB,QAAQ,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGzG;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkB3H;AAID;;;GAGG;AACH,wBAAsB,YAAY,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBnH;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBpH;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkB7G;AAID;;;GAGG;AACH,wBAAsB,WAAW,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAchH;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBxI;AAED;;;GAGG;AACH,wBAAsB,SAAS,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAczG;AAID;;;GAGG;AACH,wBAAsB,OAAO,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIzG;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAI5G;AAED;;;;GAIG;AACH,wBAAsB,QAAQ,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA4B7G;AAID;;;GAGG;AACH,wBAAsB,UAAU,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAS/G"}
|
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.fillField = fillField;
|
|
4
|
+
exports.fillDate = fillDate;
|
|
5
|
+
exports.fillDateTime = fillDateTime;
|
|
6
|
+
exports.selectOption = selectOption;
|
|
7
|
+
exports.selectMultiple = selectMultiple;
|
|
8
|
+
exports.selectRadio = selectRadio;
|
|
9
|
+
exports.setCheckbox = setCheckbox;
|
|
10
|
+
exports.setCheckboxGroup = setCheckboxGroup;
|
|
11
|
+
exports.setToggle = setToggle;
|
|
12
|
+
exports.addChip = addChip;
|
|
13
|
+
exports.removeChip = removeChip;
|
|
14
|
+
exports.setChips = setChips;
|
|
15
|
+
exports.uploadFile = uploadFile;
|
|
16
|
+
/**
|
|
17
|
+
* Resolves a form widget container by data-testid or label text.
|
|
18
|
+
* If identifier matches a data-testid on a widget container or radio group, uses that.
|
|
19
|
+
* Otherwise falls back to label text matching.
|
|
20
|
+
*/
|
|
21
|
+
function widgetByLabel(container, label) {
|
|
22
|
+
const page = getPage(container);
|
|
23
|
+
// First try: smartbit4all widget with .smart-form-widget-label class
|
|
24
|
+
const bySmartLabel = container.locator('.widgetContainer', {
|
|
25
|
+
has: page.locator(`.smart-form-widget-label:has-text("${label}")`),
|
|
26
|
+
}).first();
|
|
27
|
+
// Fallback: generic form field with h4/label
|
|
28
|
+
const byGenericLabel = container.locator('.widgetContainer, .form-field, .mat-mdc-form-field', {
|
|
29
|
+
has: page.locator(`h4:has-text("${label}"), label:has-text("${label}")`),
|
|
30
|
+
}).first();
|
|
31
|
+
return bySmartLabel.or(byGenericLabel).first();
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Finds an input/textarea by data-testid first, falling back to label text strategies.
|
|
35
|
+
* Strategies are tried in priority order — first match wins.
|
|
36
|
+
*/
|
|
37
|
+
async function resolveInput(container, identifier) {
|
|
38
|
+
const page = getPage(container);
|
|
39
|
+
const inputSelector = 'input:not([type=radio]):not([type=checkbox]):not([type=hidden]), textarea';
|
|
40
|
+
// Strategy 1: data-testid on the input itself
|
|
41
|
+
const byTestId = container.locator(`input[data-testid="${identifier}"], textarea[data-testid="${identifier}"]`).first();
|
|
42
|
+
if (await byTestId.count() > 0)
|
|
43
|
+
return byTestId;
|
|
44
|
+
// Strategy 2: smartform widget with .smart-form-widget-label
|
|
45
|
+
const bySmartLabel = container.locator('.widgetContainer', {
|
|
46
|
+
has: page.locator(`.smart-form-widget-label:has-text("${identifier}")`),
|
|
47
|
+
}).first().locator(inputSelector).first();
|
|
48
|
+
if (await bySmartLabel.count() > 0)
|
|
49
|
+
return bySmartLabel;
|
|
50
|
+
// Strategy 3: aria-label on the input
|
|
51
|
+
const byAriaLabel = container.locator(`input[aria-label*="${identifier}"], textarea[aria-label*="${identifier}"]`).first();
|
|
52
|
+
if (await byAriaLabel.count() > 0)
|
|
53
|
+
return byAriaLabel;
|
|
54
|
+
// Strategy 4: heading sibling containing the input
|
|
55
|
+
const byHeading = container.locator(`h3:has-text("${identifier}"), h4:has-text("${identifier}")`).first()
|
|
56
|
+
.locator('~ smartform, ~ div, ~ mat-form-field').first()
|
|
57
|
+
.locator(inputSelector).first();
|
|
58
|
+
return byHeading;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Finds the mat-chip-grid container for a chip input identified by data-testid or label.
|
|
62
|
+
*/
|
|
63
|
+
function findChipGrid(container, identifier) {
|
|
64
|
+
const byTestId = container.locator(`input[data-testid="${identifier}"]`).first()
|
|
65
|
+
.locator('xpath=ancestor::mat-chip-grid');
|
|
66
|
+
const widget = widgetByLabel(container, identifier);
|
|
67
|
+
const byWidget = widget.locator('mat-chip-grid').first();
|
|
68
|
+
return byTestId.or(byWidget).first();
|
|
69
|
+
}
|
|
70
|
+
// --- Text input utilities ---
|
|
71
|
+
/**
|
|
72
|
+
* Fills a text input or textarea identified by data-testid or label text.
|
|
73
|
+
*/
|
|
74
|
+
async function fillField(container, identifier, value) {
|
|
75
|
+
const input = await resolveInput(container, identifier);
|
|
76
|
+
await input.fill(value);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Fills a date picker input with an ISO date string (YYYY-MM-DD).
|
|
80
|
+
* Identifier can be a data-testid or a label text.
|
|
81
|
+
*/
|
|
82
|
+
async function fillDate(container, identifier, date) {
|
|
83
|
+
const input = await resolveInput(container, identifier);
|
|
84
|
+
await input.fill(date);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Fills a date-time picker with date (YYYY-MM-DD) and time (HH:mm).
|
|
88
|
+
* PrimeNG: single input with combined value. Material: two separate inputs.
|
|
89
|
+
* Identifier can be a data-testid or a label text.
|
|
90
|
+
*/
|
|
91
|
+
async function fillDateTime(container, identifier, date, time) {
|
|
92
|
+
const inputSelector = 'input:not([type=radio]):not([type=checkbox]):not([type=hidden])';
|
|
93
|
+
// Try data-testid on p-calendar (single input with showTime)
|
|
94
|
+
const primeCalendar = container.locator(`p-calendar[data-testid="${identifier}"]`).first();
|
|
95
|
+
if (await primeCalendar.count() > 0) {
|
|
96
|
+
const input = primeCalendar.locator('input').first();
|
|
97
|
+
await input.fill(`${date} ${time}`);
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
// Material fallback: two separate inputs in the widget
|
|
101
|
+
const widget = widgetByLabel(container, identifier);
|
|
102
|
+
const inputs = widget.locator(inputSelector);
|
|
103
|
+
const dateInput = inputs.first();
|
|
104
|
+
const timeInput = inputs.nth(1);
|
|
105
|
+
await dateInput.fill(date);
|
|
106
|
+
await timeInput.fill(time);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
// --- Selection utilities ---
|
|
110
|
+
/**
|
|
111
|
+
* Selects an option from a dropdown (Angular Material mat-select or PrimeNG p-dropdown).
|
|
112
|
+
* Identifier can be a data-testid or a label text.
|
|
113
|
+
*/
|
|
114
|
+
async function selectOption(container, identifier, optionText) {
|
|
115
|
+
const page = getPage(container);
|
|
116
|
+
// Try data-testid first
|
|
117
|
+
const byTestId = container.locator(`mat-select[data-testid="${identifier}"], p-dropdown[data-testid="${identifier}"]`).first();
|
|
118
|
+
const widget = widgetByLabel(container, identifier);
|
|
119
|
+
const byWidget = widget.locator('mat-select, p-dropdown').first();
|
|
120
|
+
const target = byTestId.or(byWidget).first();
|
|
121
|
+
await target.click();
|
|
122
|
+
// mat-option and p-dropdown-item render in overlay (body level)
|
|
123
|
+
const matOption = page.locator('mat-option', { hasText: optionText });
|
|
124
|
+
const primeOption = page.locator('.p-dropdown-item', { hasText: optionText });
|
|
125
|
+
await matOption.or(primeOption).first().click();
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Selects multiple options from a multi-select dropdown.
|
|
129
|
+
* Identifier can be a data-testid or a label text.
|
|
130
|
+
*/
|
|
131
|
+
async function selectMultiple(container, identifier, options) {
|
|
132
|
+
const page = getPage(container);
|
|
133
|
+
// Try data-testid first
|
|
134
|
+
const byTestId = container.locator(`mat-select[data-testid="${identifier}"], p-multiSelect[data-testid="${identifier}"]`).first();
|
|
135
|
+
const widget = widgetByLabel(container, identifier);
|
|
136
|
+
const byWidget = widget.locator('mat-select, p-multiSelect').first();
|
|
137
|
+
const target = byTestId.or(byWidget).first();
|
|
138
|
+
await target.click();
|
|
139
|
+
for (const optionText of options) {
|
|
140
|
+
const matOption = page.locator('mat-option', { hasText: optionText });
|
|
141
|
+
const primeOption = page.locator('.p-multiselect-item', { hasText: optionText });
|
|
142
|
+
await matOption.or(primeOption).first().click();
|
|
143
|
+
}
|
|
144
|
+
// Close the dropdown
|
|
145
|
+
await page.keyboard.press('Escape');
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Selects a radio button inside a radio group identified by data-testid or label text.
|
|
149
|
+
*/
|
|
150
|
+
async function selectRadio(container, identifier, value) {
|
|
151
|
+
// Try data-testid on mat-radio-group / p-radiobutton parent
|
|
152
|
+
const byTestId = container.locator(`mat-radio-group[data-testid="${identifier}"]`).first();
|
|
153
|
+
const widget = widgetByLabel(container, identifier);
|
|
154
|
+
// Angular Material
|
|
155
|
+
const matRadioInTestId = byTestId.locator('mat-radio-button', { hasText: value });
|
|
156
|
+
const matRadioInWidget = widget.locator('mat-radio-button', { hasText: value });
|
|
157
|
+
const matRadio = matRadioInTestId.or(matRadioInWidget).first();
|
|
158
|
+
// PrimeNG
|
|
159
|
+
const primeRadio = widget.locator('p-radiobutton', { hasText: value });
|
|
160
|
+
if (await matRadio.count() > 0) {
|
|
161
|
+
await matRadio.click();
|
|
162
|
+
}
|
|
163
|
+
else if (await primeRadio.count() > 0) {
|
|
164
|
+
await primeRadio.click();
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
// --- Toggle & checkbox utilities ---
|
|
168
|
+
/**
|
|
169
|
+
* Sets a checkbox to the desired state (checked/unchecked).
|
|
170
|
+
* Identifier can be a data-testid or a label text.
|
|
171
|
+
*/
|
|
172
|
+
async function setCheckbox(container, identifier, checked) {
|
|
173
|
+
const widget = widgetByLabel(container, identifier);
|
|
174
|
+
// Try data-testid first
|
|
175
|
+
const byTestId = container.locator(`mat-checkbox[data-testid="${identifier}"], p-checkbox[data-testid="${identifier}"]`).first();
|
|
176
|
+
const byWidget = widget.locator('mat-checkbox, p-checkbox').first();
|
|
177
|
+
const target = byTestId.or(byWidget).first();
|
|
178
|
+
const input = target.locator('input');
|
|
179
|
+
const isChecked = await input.isChecked();
|
|
180
|
+
if (isChecked !== checked) {
|
|
181
|
+
await target.click();
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Sets multiple checkboxes in a checkbox group (CHECK_BOX_2 widget).
|
|
186
|
+
* Identifier can be a data-testid or a label text.
|
|
187
|
+
* Selections is a map of checkbox label to desired state.
|
|
188
|
+
* Checkboxes not mentioned in selections are left unchanged.
|
|
189
|
+
*/
|
|
190
|
+
async function setCheckboxGroup(container, identifier, selections) {
|
|
191
|
+
// Try data-testid on wrapper div
|
|
192
|
+
const byTestId = container.locator(`div[data-testid="${identifier}"], .widgetContainer[data-testid="${identifier}"]`).first();
|
|
193
|
+
const widget = widgetByLabel(container, identifier);
|
|
194
|
+
const group = byTestId.or(widget).first();
|
|
195
|
+
for (const [label, desired] of Object.entries(selections)) {
|
|
196
|
+
// Angular Material
|
|
197
|
+
const matCb = group.locator('mat-checkbox', { hasText: label });
|
|
198
|
+
// PrimeNG
|
|
199
|
+
const primeCb = group.locator('p-checkbox', { hasText: label });
|
|
200
|
+
const target = matCb.or(primeCb).first();
|
|
201
|
+
const input = target.locator('input');
|
|
202
|
+
const isChecked = await input.isChecked();
|
|
203
|
+
if (isChecked !== desired) {
|
|
204
|
+
await target.click();
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Sets a toggle switch to the desired state.
|
|
210
|
+
* Identifier can be a data-testid or a label text.
|
|
211
|
+
*/
|
|
212
|
+
async function setToggle(container, identifier, on) {
|
|
213
|
+
const widget = widgetByLabel(container, identifier);
|
|
214
|
+
// Try data-testid first
|
|
215
|
+
const byTestId = container.locator(`mat-slide-toggle[data-testid="${identifier}"], p-inputSwitch[data-testid="${identifier}"]`).first();
|
|
216
|
+
const byWidget = widget.locator('mat-slide-toggle, p-inputSwitch').first();
|
|
217
|
+
const target = byTestId.or(byWidget).first();
|
|
218
|
+
const input = target.locator('input');
|
|
219
|
+
const isChecked = await input.isChecked();
|
|
220
|
+
if (isChecked !== on) {
|
|
221
|
+
await target.click();
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
// --- Chip utilities ---
|
|
225
|
+
/**
|
|
226
|
+
* Adds a chip to a chip input field.
|
|
227
|
+
* Identifier can be a data-testid or a label text.
|
|
228
|
+
*/
|
|
229
|
+
async function addChip(container, identifier, value) {
|
|
230
|
+
const input = await resolveInput(container, identifier);
|
|
231
|
+
await input.fill(value);
|
|
232
|
+
await input.press('Enter');
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Removes a chip from a chip input field by its displayed text.
|
|
236
|
+
* Identifier can be a data-testid or a label text.
|
|
237
|
+
*/
|
|
238
|
+
async function removeChip(container, identifier, value) {
|
|
239
|
+
const chipGrid = findChipGrid(container, identifier);
|
|
240
|
+
const chip = chipGrid.locator('mat-chip-row', { hasText: value });
|
|
241
|
+
await chip.locator('button[matChipRemove]').click();
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Sets the chips to the desired list of values.
|
|
245
|
+
* Removes chips not in the list, adds missing ones.
|
|
246
|
+
* Identifier can be a data-testid or a label text.
|
|
247
|
+
*/
|
|
248
|
+
async function setChips(container, identifier, values) {
|
|
249
|
+
const chipGrid = findChipGrid(container, identifier);
|
|
250
|
+
// Read current chips
|
|
251
|
+
const chipRows = chipGrid.locator('mat-chip-row');
|
|
252
|
+
const count = await chipRows.count();
|
|
253
|
+
const currentChips = [];
|
|
254
|
+
for (let i = 0; i < count; i++) {
|
|
255
|
+
const text = await chipRows.nth(i).textContent();
|
|
256
|
+
if (text) {
|
|
257
|
+
// Chip text may contain the remove button icon text — strip it
|
|
258
|
+
currentChips.push(text.replace(/cancel/g, '').trim());
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
// Remove chips not in desired values
|
|
262
|
+
for (const chip of currentChips) {
|
|
263
|
+
if (!values.includes(chip)) {
|
|
264
|
+
await removeChip(container, identifier, chip);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
// Add chips not yet present
|
|
268
|
+
for (const value of values) {
|
|
269
|
+
if (!currentChips.includes(value)) {
|
|
270
|
+
await addChip(container, identifier, value);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
// --- File upload ---
|
|
275
|
+
/**
|
|
276
|
+
* Uploads a file to a file uploader widget.
|
|
277
|
+
* Identifier can be a data-testid or a label text.
|
|
278
|
+
*/
|
|
279
|
+
async function uploadFile(container, identifier, filePath) {
|
|
280
|
+
// Try data-testid on smart-file-editor
|
|
281
|
+
const byTestId = container.locator(`smart-file-editor[data-testid="${identifier}"]`).first();
|
|
282
|
+
const widget = widgetByLabel(container, identifier);
|
|
283
|
+
const byWidget = widget.locator('smart-file-editor').first();
|
|
284
|
+
const editor = byTestId.or(byWidget).first();
|
|
285
|
+
const fileInput = editor.locator('input[type=file]');
|
|
286
|
+
await fileInput.setInputFiles(filePath);
|
|
287
|
+
}
|
|
288
|
+
// --- Internal helpers ---
|
|
289
|
+
/**
|
|
290
|
+
* Extracts the Page from a Locator or Page.
|
|
291
|
+
*/
|
|
292
|
+
function getPage(container) {
|
|
293
|
+
if ('page' in container) {
|
|
294
|
+
return container.page();
|
|
295
|
+
}
|
|
296
|
+
return container;
|
|
297
|
+
}
|
|
298
|
+
//# sourceMappingURL=forms.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"forms.js","sourceRoot":"","sources":["../../src/steps/forms.ts"],"names":[],"mappings":";;AAiEA,8BAGC;AAMD,4BAGC;AAOD,oCAkBC;AAQD,oCAgBC;AAMD,wCAmBC;AAKD,kCAkBC;AAQD,kCAcC;AAQD,4CAmBC;AAMD,8BAcC;AAQD,0BAIC;AAMD,gCAIC;AAOD,4BA4BC;AAQD,gCASC;AA3TD;;;;GAIG;AACH,SAAS,aAAa,CAAC,SAAyB,EAAE,KAAa;IAC7D,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,qEAAqE;IACrE,MAAM,YAAY,GAAG,SAAS,CAAC,OAAO,CAAC,kBAAkB,EAAE;QACzD,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,sCAAsC,KAAK,IAAI,CAAC;KACnE,CAAC,CAAC,KAAK,EAAE,CAAC;IACX,6CAA6C;IAC7C,MAAM,cAAc,GAAG,SAAS,CAAC,OAAO,CAAC,oDAAoD,EAAE;QAC7F,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,KAAK,uBAAuB,KAAK,IAAI,CAAC;KACzE,CAAC,CAAC,KAAK,EAAE,CAAC;IACX,OAAO,YAAY,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,KAAK,EAAE,CAAC;AACjD,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,YAAY,CAAC,SAAyB,EAAE,UAAkB;IACvE,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,MAAM,aAAa,GAAG,2EAA2E,CAAC;IAElG,8CAA8C;IAC9C,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,sBAAsB,UAAU,6BAA6B,UAAU,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;IACxH,IAAI,MAAM,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC;QAAE,OAAO,QAAQ,CAAC;IAEhD,6DAA6D;IAC7D,MAAM,YAAY,GAAG,SAAS,CAAC,OAAO,CAAC,kBAAkB,EAAE;QACzD,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,sCAAsC,UAAU,IAAI,CAAC;KACxE,CAAC,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,KAAK,EAAE,CAAC;IAC1C,IAAI,MAAM,YAAY,CAAC,KAAK,EAAE,GAAG,CAAC;QAAE,OAAO,YAAY,CAAC;IAExD,sCAAsC;IACtC,MAAM,WAAW,GAAG,SAAS,CAAC,OAAO,CAAC,sBAAsB,UAAU,6BAA6B,UAAU,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;IAC3H,IAAI,MAAM,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC;QAAE,OAAO,WAAW,CAAC;IAEtD,mDAAmD;IACnD,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,gBAAgB,UAAU,oBAAoB,UAAU,IAAI,CAAC,CAAC,KAAK,EAAE;SACtG,OAAO,CAAC,sCAAsC,CAAC,CAAC,KAAK,EAAE;SACvD,OAAO,CAAC,aAAa,CAAC,CAAC,KAAK,EAAE,CAAC;IAClC,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CAAC,SAAyB,EAAE,UAAkB;IACjE,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,sBAAsB,UAAU,IAAI,CAAC,CAAC,KAAK,EAAE;SAC7E,OAAO,CAAC,+BAA+B,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IACpD,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,KAAK,EAAE,CAAC;IACzD,OAAO,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC;AACvC,CAAC;AAED,+BAA+B;AAE/B;;GAEG;AACI,KAAK,UAAU,SAAS,CAAC,SAAyB,EAAE,UAAkB,EAAE,KAAa;IAC1F,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IACxD,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1B,CAAC;AAED;;;GAGG;AACI,KAAK,UAAU,QAAQ,CAAC,SAAyB,EAAE,UAAkB,EAAE,IAAY;IACxF,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IACxD,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzB,CAAC;AAED;;;;GAIG;AACI,KAAK,UAAU,YAAY,CAAC,SAAyB,EAAE,UAAkB,EAAE,IAAY,EAAE,IAAY;IAC1G,MAAM,aAAa,GAAG,iEAAiE,CAAC;IAExF,6DAA6D;IAC7D,MAAM,aAAa,GAAG,SAAS,CAAC,OAAO,CAAC,2BAA2B,UAAU,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;IAE3F,IAAI,MAAM,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC;QACrD,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC;SAAM,CAAC;QACN,uDAAuD;QACvD,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QAC7C,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;QACjC,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3B,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;AACH,CAAC;AAED,8BAA8B;AAE9B;;;GAGG;AACI,KAAK,UAAU,YAAY,CAAC,SAAyB,EAAE,UAAkB,EAAE,UAAkB;IAClG,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhC,wBAAwB;IACxB,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,2BAA2B,UAAU,+BAA+B,UAAU,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;IAC/H,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IACpD,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC,KAAK,EAAE,CAAC;IAElE,MAAM,MAAM,GAAG,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC;IAE7C,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IAErB,gEAAgE;IAChE,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;IACtE,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;IAC9E,MAAM,SAAS,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC;AAClD,CAAC;AAED;;;GAGG;AACI,KAAK,UAAU,cAAc,CAAC,SAAyB,EAAE,UAAkB,EAAE,OAAiB;IACnG,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhC,wBAAwB;IACxB,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,2BAA2B,UAAU,kCAAkC,UAAU,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;IAClI,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IACpD,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC,KAAK,EAAE,CAAC;IAErE,MAAM,MAAM,GAAG,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IAErB,KAAK,MAAM,UAAU,IAAI,OAAO,EAAE,CAAC;QACjC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;QACtE,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;QACjF,MAAM,SAAS,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC;IAClD,CAAC;IAED,qBAAqB;IACrB,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AACtC,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,WAAW,CAAC,SAAyB,EAAE,UAAkB,EAAE,KAAa;IAC5F,4DAA4D;IAC5D,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,gCAAgC,UAAU,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;IAC3F,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAEpD,mBAAmB;IACnB,MAAM,gBAAgB,GAAG,QAAQ,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IAClF,MAAM,gBAAgB,GAAG,MAAM,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IAChF,MAAM,QAAQ,GAAG,gBAAgB,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,KAAK,EAAE,CAAC;IAE/D,UAAU;IACV,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IAEvE,IAAI,MAAM,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;QAC/B,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;SAAM,IAAI,MAAM,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;QACxC,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;AACH,CAAC;AAED,sCAAsC;AAEtC;;;GAGG;AACI,KAAK,UAAU,WAAW,CAAC,SAAyB,EAAE,UAAkB,EAAE,OAAgB;IAC/F,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAEpD,wBAAwB;IACxB,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,6BAA6B,UAAU,+BAA+B,UAAU,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;IACjI,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC,KAAK,EAAE,CAAC;IAEpE,MAAM,MAAM,GAAG,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC;IAE7C,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,SAAS,EAAE,CAAC;IAC1C,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;QAC1B,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACI,KAAK,UAAU,gBAAgB,CAAC,SAAyB,EAAE,UAAkB,EAAE,UAAmC;IACvH,iCAAiC;IACjC,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,oBAAoB,UAAU,qCAAqC,UAAU,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;IAC9H,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;IAE1C,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QAC1D,mBAAmB;QACnB,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QAChE,UAAU;QACV,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QAEhE,MAAM,MAAM,GAAG,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACtC,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,SAAS,EAAE,CAAC;QAC1C,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;YAC1B,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;GAGG;AACI,KAAK,UAAU,SAAS,CAAC,SAAyB,EAAE,UAAkB,EAAE,EAAW;IACxF,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAEpD,wBAAwB;IACxB,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,iCAAiC,UAAU,kCAAkC,UAAU,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;IACxI,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC,KAAK,EAAE,CAAC;IAE3E,MAAM,MAAM,GAAG,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC;IAE7C,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,SAAS,EAAE,CAAC;IAC1C,IAAI,SAAS,KAAK,EAAE,EAAE,CAAC;QACrB,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;AACH,CAAC;AAED,yBAAyB;AAEzB;;;GAGG;AACI,KAAK,UAAU,OAAO,CAAC,SAAyB,EAAE,UAAkB,EAAE,KAAa;IACxF,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IACxD,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACxB,MAAM,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAC7B,CAAC;AAED;;;GAGG;AACI,KAAK,UAAU,UAAU,CAAC,SAAyB,EAAE,UAAkB,EAAE,KAAa;IAC3F,MAAM,QAAQ,GAAG,YAAY,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IACrD,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IAClE,MAAM,IAAI,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC,KAAK,EAAE,CAAC;AACtD,CAAC;AAED;;;;GAIG;AACI,KAAK,UAAU,QAAQ,CAAC,SAAyB,EAAE,UAAkB,EAAE,MAAgB;IAC5F,MAAM,QAAQ,GAAG,YAAY,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAErD,qBAAqB;IACrB,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC;IACrC,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACjD,IAAI,IAAI,EAAE,CAAC;YACT,+DAA+D;YAC/D,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAED,qCAAqC;IACrC,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QAChC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,MAAM,UAAU,CAAC,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,4BAA4B;IAC5B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAClC,MAAM,OAAO,CAAC,SAAS,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;AACH,CAAC;AAED,sBAAsB;AAEtB;;;GAGG;AACI,KAAK,UAAU,UAAU,CAAC,SAAyB,EAAE,UAAkB,EAAE,QAAgB;IAC9F,uCAAuC;IACvC,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,kCAAkC,UAAU,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;IAC7F,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IACpD,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,KAAK,EAAE,CAAC;IAE7D,MAAM,MAAM,GAAG,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC;IAC7C,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACrD,MAAM,SAAS,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AAC1C,CAAC;AAED,2BAA2B;AAE3B;;GAEG;AACH,SAAS,OAAO,CAAC,SAAyB;IACxC,IAAI,MAAM,IAAI,SAAS,EAAE,CAAC;QACxB,OAAQ,SAAqB,CAAC,IAAI,EAAE,CAAC;IACvC,CAAC;IACD,OAAO,SAAiB,CAAC;AAC3B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grid.steps.d.ts","sourceRoot":"","sources":["../../src/steps/grid.steps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAW,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"grid.steps.d.ts","sourceRoot":"","sources":["../../src/steps/grid.steps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAW,MAAM,kBAAkB,CAAC;AAKtD,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAExD;;;GAGG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,SAAS,EACjB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GACrB,OAAO,CAAC,IAAI,CAAC,CAcf;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GACrB,OAAO,CAAC,IAAI,CAAC,CAgBf;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAYhG;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAUhE"}
|
package/dist/steps/grid.steps.js
CHANGED
|
@@ -6,6 +6,7 @@ exports.applyGridFilters = applyGridFilters;
|
|
|
6
6
|
exports.clearGridFilters = clearGridFilters;
|
|
7
7
|
const test_1 = require("@playwright/test");
|
|
8
8
|
const wait_1 = require("./wait");
|
|
9
|
+
const locators_1 = require("./locators");
|
|
9
10
|
/**
|
|
10
11
|
* Finds a row in the grid by content match (paginating if needed) and performs an action.
|
|
11
12
|
* Does NOT use the filter form — searches through the actual table rows.
|
|
@@ -22,7 +23,7 @@ async function selectGridRow(page, filter, action) {
|
|
|
22
23
|
}
|
|
23
24
|
else {
|
|
24
25
|
await row.locator('td.mat-column-my_menu button').click();
|
|
25
|
-
await
|
|
26
|
+
await (0, locators_1.findMenuItem)(page, action).click();
|
|
26
27
|
}
|
|
27
28
|
}
|
|
28
29
|
/**
|
|
@@ -42,7 +43,7 @@ async function filterAndSelectGridRow(page, filter, action) {
|
|
|
42
43
|
}
|
|
43
44
|
else {
|
|
44
45
|
await row.locator('td.mat-column-my_menu button').click();
|
|
45
|
-
await
|
|
46
|
+
await (0, locators_1.findMenuItem)(page, action).click();
|
|
46
47
|
}
|
|
47
48
|
}
|
|
48
49
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grid.steps.js","sourceRoot":"","sources":["../../src/steps/grid.steps.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"grid.steps.js","sourceRoot":"","sources":["../../src/steps/grid.steps.ts"],"names":[],"mappings":"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"}
|
package/dist/steps/index.d.ts
CHANGED
|
@@ -2,4 +2,6 @@ export { waitForAngularIdle } from './wait';
|
|
|
2
2
|
export { selectGridRow, filterAndSelectGridRow, applyGridFilters, clearGridFilters, type RowFilter, } from './grid.steps';
|
|
3
3
|
export { navigateToMain, navigateInTree, } from './navigation.steps';
|
|
4
4
|
export { topDialog, clickInDialog, } from './dialog.steps';
|
|
5
|
+
export { findButton, findPopupMenu, findMenuItem, } from './locators';
|
|
6
|
+
export { fillField, fillDate, fillDateTime, selectOption, selectMultiple, selectRadio, setCheckbox, setCheckboxGroup, setToggle, addChip, removeChip, setChips, uploadFile, } from './forms';
|
|
5
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/steps/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAC;AAE5C,OAAO,EACL,aAAa,EACb,sBAAsB,EACtB,gBAAgB,EAChB,gBAAgB,EAChB,KAAK,SAAS,GACf,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,cAAc,EACd,cAAc,GACf,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,SAAS,EACT,aAAa,GACd,MAAM,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/steps/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAC;AAE5C,OAAO,EACL,aAAa,EACb,sBAAsB,EACtB,gBAAgB,EAChB,gBAAgB,EAChB,KAAK,SAAS,GACf,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,cAAc,EACd,cAAc,GACf,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,SAAS,EACT,aAAa,GACd,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,UAAU,EACV,aAAa,EACb,YAAY,GACb,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,SAAS,EACT,OAAO,EACP,UAAU,EACV,QAAQ,EACR,UAAU,GACX,MAAM,SAAS,CAAC"}
|
package/dist/steps/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.clickInDialog = exports.topDialog = exports.navigateInTree = exports.navigateToMain = exports.clearGridFilters = exports.applyGridFilters = exports.filterAndSelectGridRow = exports.selectGridRow = exports.waitForAngularIdle = void 0;
|
|
3
|
+
exports.uploadFile = exports.setChips = exports.removeChip = exports.addChip = exports.setToggle = exports.setCheckboxGroup = exports.setCheckbox = exports.selectRadio = exports.selectMultiple = exports.selectOption = exports.fillDateTime = exports.fillDate = exports.fillField = exports.findMenuItem = exports.findPopupMenu = exports.findButton = exports.clickInDialog = exports.topDialog = exports.navigateInTree = exports.navigateToMain = exports.clearGridFilters = exports.applyGridFilters = exports.filterAndSelectGridRow = exports.selectGridRow = exports.waitForAngularIdle = void 0;
|
|
4
4
|
var wait_1 = require("./wait");
|
|
5
5
|
Object.defineProperty(exports, "waitForAngularIdle", { enumerable: true, get: function () { return wait_1.waitForAngularIdle; } });
|
|
6
6
|
var grid_steps_1 = require("./grid.steps");
|
|
@@ -14,4 +14,22 @@ Object.defineProperty(exports, "navigateInTree", { enumerable: true, get: functi
|
|
|
14
14
|
var dialog_steps_1 = require("./dialog.steps");
|
|
15
15
|
Object.defineProperty(exports, "topDialog", { enumerable: true, get: function () { return dialog_steps_1.topDialog; } });
|
|
16
16
|
Object.defineProperty(exports, "clickInDialog", { enumerable: true, get: function () { return dialog_steps_1.clickInDialog; } });
|
|
17
|
+
var locators_1 = require("./locators");
|
|
18
|
+
Object.defineProperty(exports, "findButton", { enumerable: true, get: function () { return locators_1.findButton; } });
|
|
19
|
+
Object.defineProperty(exports, "findPopupMenu", { enumerable: true, get: function () { return locators_1.findPopupMenu; } });
|
|
20
|
+
Object.defineProperty(exports, "findMenuItem", { enumerable: true, get: function () { return locators_1.findMenuItem; } });
|
|
21
|
+
var forms_1 = require("./forms");
|
|
22
|
+
Object.defineProperty(exports, "fillField", { enumerable: true, get: function () { return forms_1.fillField; } });
|
|
23
|
+
Object.defineProperty(exports, "fillDate", { enumerable: true, get: function () { return forms_1.fillDate; } });
|
|
24
|
+
Object.defineProperty(exports, "fillDateTime", { enumerable: true, get: function () { return forms_1.fillDateTime; } });
|
|
25
|
+
Object.defineProperty(exports, "selectOption", { enumerable: true, get: function () { return forms_1.selectOption; } });
|
|
26
|
+
Object.defineProperty(exports, "selectMultiple", { enumerable: true, get: function () { return forms_1.selectMultiple; } });
|
|
27
|
+
Object.defineProperty(exports, "selectRadio", { enumerable: true, get: function () { return forms_1.selectRadio; } });
|
|
28
|
+
Object.defineProperty(exports, "setCheckbox", { enumerable: true, get: function () { return forms_1.setCheckbox; } });
|
|
29
|
+
Object.defineProperty(exports, "setCheckboxGroup", { enumerable: true, get: function () { return forms_1.setCheckboxGroup; } });
|
|
30
|
+
Object.defineProperty(exports, "setToggle", { enumerable: true, get: function () { return forms_1.setToggle; } });
|
|
31
|
+
Object.defineProperty(exports, "addChip", { enumerable: true, get: function () { return forms_1.addChip; } });
|
|
32
|
+
Object.defineProperty(exports, "removeChip", { enumerable: true, get: function () { return forms_1.removeChip; } });
|
|
33
|
+
Object.defineProperty(exports, "setChips", { enumerable: true, get: function () { return forms_1.setChips; } });
|
|
34
|
+
Object.defineProperty(exports, "uploadFile", { enumerable: true, get: function () { return forms_1.uploadFile; } });
|
|
17
35
|
//# sourceMappingURL=index.js.map
|
package/dist/steps/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/steps/index.ts"],"names":[],"mappings":";;;AAAA,+BAA4C;AAAnC,0GAAA,kBAAkB,OAAA;AAE3B,2CAMsB;AALpB,2GAAA,aAAa,OAAA;AACb,oHAAA,sBAAsB,OAAA;AACtB,8GAAA,gBAAgB,OAAA;AAChB,8GAAA,gBAAgB,OAAA;AAIlB,uDAG4B;AAF1B,kHAAA,cAAc,OAAA;AACd,kHAAA,cAAc,OAAA;AAGhB,+CAGwB;AAFtB,yGAAA,SAAS,OAAA;AACT,6GAAA,aAAa,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/steps/index.ts"],"names":[],"mappings":";;;AAAA,+BAA4C;AAAnC,0GAAA,kBAAkB,OAAA;AAE3B,2CAMsB;AALpB,2GAAA,aAAa,OAAA;AACb,oHAAA,sBAAsB,OAAA;AACtB,8GAAA,gBAAgB,OAAA;AAChB,8GAAA,gBAAgB,OAAA;AAIlB,uDAG4B;AAF1B,kHAAA,cAAc,OAAA;AACd,kHAAA,cAAc,OAAA;AAGhB,+CAGwB;AAFtB,yGAAA,SAAS,OAAA;AACT,6GAAA,aAAa,OAAA;AAGf,uCAIoB;AAHlB,sGAAA,UAAU,OAAA;AACV,yGAAA,aAAa,OAAA;AACb,wGAAA,YAAY,OAAA;AAGd,iCAciB;AAbf,kGAAA,SAAS,OAAA;AACT,iGAAA,QAAQ,OAAA;AACR,qGAAA,YAAY,OAAA;AACZ,qGAAA,YAAY,OAAA;AACZ,uGAAA,cAAc,OAAA;AACd,oGAAA,WAAW,OAAA;AACX,oGAAA,WAAW,OAAA;AACX,yGAAA,gBAAgB,OAAA;AAChB,kGAAA,SAAS,OAAA;AACT,gGAAA,OAAO,OAAA;AACP,mGAAA,UAAU,OAAA;AACV,iGAAA,QAAQ,OAAA;AACR,mGAAA,UAAU,OAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Locator, Page } from '@playwright/test';
|
|
2
|
+
/**
|
|
3
|
+
* Finds a button by data-testid first, falling back to visible text.
|
|
4
|
+
* Works with both data-testid values and button labels for backward compatibility.
|
|
5
|
+
*/
|
|
6
|
+
export declare function findButton(container: Locator | Page, text: string): Locator;
|
|
7
|
+
/**
|
|
8
|
+
* Finds the currently visible popup menu panel (Angular Material or PrimeNG).
|
|
9
|
+
*/
|
|
10
|
+
export declare function findPopupMenu(page: Page): Locator;
|
|
11
|
+
/**
|
|
12
|
+
* Finds a menu item by data-testid first, falling back to visible text.
|
|
13
|
+
* Supports Angular Material (.mat-mdc-menu-panel) and PrimeNG (.p-menu, .p-tieredmenu, .p-contextmenu) menus.
|
|
14
|
+
*/
|
|
15
|
+
export declare function findMenuItem(page: Page, text: string): Locator;
|
|
16
|
+
//# sourceMappingURL=locators.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locators.d.ts","sourceRoot":"","sources":["../../src/steps/locators.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAEtD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAE3E;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAEjD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAM9D"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.findButton = findButton;
|
|
4
|
+
exports.findPopupMenu = findPopupMenu;
|
|
5
|
+
exports.findMenuItem = findMenuItem;
|
|
6
|
+
/**
|
|
7
|
+
* Finds a button by data-testid first, falling back to visible text.
|
|
8
|
+
* Works with both data-testid values and button labels for backward compatibility.
|
|
9
|
+
*/
|
|
10
|
+
function findButton(container, text) {
|
|
11
|
+
return container.locator(`button[data-testid="${text}"], button:has-text("${text}")`).first();
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Finds the currently visible popup menu panel (Angular Material or PrimeNG).
|
|
15
|
+
*/
|
|
16
|
+
function findPopupMenu(page) {
|
|
17
|
+
return page.locator('.mat-mdc-menu-panel, .p-menu-overlay, .p-tieredmenu-overlay, .p-contextmenu, .p-menu.p-component').last();
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Finds a menu item by data-testid first, falling back to visible text.
|
|
21
|
+
* Supports Angular Material (.mat-mdc-menu-panel) and PrimeNG (.p-menu, .p-tieredmenu, .p-contextmenu) menus.
|
|
22
|
+
*/
|
|
23
|
+
function findMenuItem(page, text) {
|
|
24
|
+
const matByTestId = `.mat-mdc-menu-panel button.mat-mdc-menu-item[data-testid="${text}"]`;
|
|
25
|
+
const matByText = `.mat-mdc-menu-panel button.mat-mdc-menu-item:has-text("${text}")`;
|
|
26
|
+
const primeByTestId = `.p-menu-list [data-testid="${text}"], .p-menuitem [data-testid="${text}"]`;
|
|
27
|
+
const primeByText = `.p-menu-list .p-menuitem-link:has-text("${text}"), .p-menuitem-content:has-text("${text}")`;
|
|
28
|
+
return page.locator(`${matByTestId}, ${matByText}, ${primeByTestId}, ${primeByText}`).first();
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=locators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locators.js","sourceRoot":"","sources":["../../src/steps/locators.ts"],"names":[],"mappings":";;AAMA,gCAEC;AAKD,sCAEC;AAMD,oCAMC;AAzBD;;;GAGG;AACH,SAAgB,UAAU,CAAC,SAAyB,EAAE,IAAY;IAChE,OAAO,SAAS,CAAC,OAAO,CAAC,uBAAuB,IAAI,wBAAwB,IAAI,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;AAChG,CAAC;AAED;;GAEG;AACH,SAAgB,aAAa,CAAC,IAAU;IACtC,OAAO,IAAI,CAAC,OAAO,CAAC,kGAAkG,CAAC,CAAC,IAAI,EAAE,CAAC;AACjI,CAAC;AAED;;;GAGG;AACH,SAAgB,YAAY,CAAC,IAAU,EAAE,IAAY;IACnD,MAAM,WAAW,GAAG,6DAA6D,IAAI,IAAI,CAAC;IAC1F,MAAM,SAAS,GAAG,0DAA0D,IAAI,IAAI,CAAC;IACrF,MAAM,aAAa,GAAG,8BAA8B,IAAI,iCAAiC,IAAI,IAAI,CAAC;IAClG,MAAM,WAAW,GAAG,2CAA2C,IAAI,qCAAqC,IAAI,IAAI,CAAC;IACjH,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,WAAW,KAAK,SAAS,KAAK,aAAa,KAAK,WAAW,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;AAChG,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navigation.steps.d.ts","sourceRoot":"","sources":["../../src/steps/navigation.steps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"navigation.steps.d.ts","sourceRoot":"","sources":["../../src/steps/navigation.steps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAI7C,wBAAsB,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAI9D;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CA8BtG"}
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.navigateToMain = navigateToMain;
|
|
4
4
|
exports.navigateInTree = navigateInTree;
|
|
5
5
|
const wait_1 = require("./wait");
|
|
6
|
+
const locators_1 = require("./locators");
|
|
6
7
|
async function navigateToMain(page) {
|
|
7
8
|
await page.locator('div.logo').click();
|
|
8
9
|
await page.waitForURL('**/main/**');
|
|
@@ -44,7 +45,7 @@ async function navigatePrimeTreeNode(page, label, select, action) {
|
|
|
44
45
|
}
|
|
45
46
|
else if (action) {
|
|
46
47
|
await node.locator('.p-treenode-content button').click();
|
|
47
|
-
await
|
|
48
|
+
await (0, locators_1.findMenuItem)(page, action).click();
|
|
48
49
|
await (0, wait_1.waitForAngularIdle)(page);
|
|
49
50
|
}
|
|
50
51
|
else if (select) {
|
|
@@ -74,7 +75,7 @@ async function navigateMatTreeNode(page, label, select, action) {
|
|
|
74
75
|
}
|
|
75
76
|
else if (action) {
|
|
76
77
|
await node.locator('button').last().click();
|
|
77
|
-
await
|
|
78
|
+
await (0, locators_1.findMenuItem)(page, action).click();
|
|
78
79
|
await (0, wait_1.waitForAngularIdle)(page);
|
|
79
80
|
}
|
|
80
81
|
else if (select) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navigation.steps.js","sourceRoot":"","sources":["../../src/steps/navigation.steps.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"navigation.steps.js","sourceRoot":"","sources":["../../src/steps/navigation.steps.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED