@smartbit4all/playwright-qa 0.1.7 → 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 +53 -0
- 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/index.d.ts +1 -0
- package/dist/steps/index.d.ts.map +1 -1
- package/dist/steps/index.js +15 -1
- package/dist/steps/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -134,6 +134,59 @@ The package ships reusable TestSteps for common smartbit4all UI patterns (grid,
|
|
|
134
134
|
import { selectGridRow, navigateInTree } from '@smartbit4all/playwright-qa/steps';
|
|
135
135
|
```
|
|
136
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
|
+
|
|
137
190
|
### Grid
|
|
138
191
|
|
|
139
192
|
```typescript
|
|
@@ -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":"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"}
|
package/dist/steps/index.d.ts
CHANGED
|
@@ -3,4 +3,5 @@ export { selectGridRow, filterAndSelectGridRow, applyGridFilters, clearGridFilte
|
|
|
3
3
|
export { navigateToMain, navigateInTree, } from './navigation.steps';
|
|
4
4
|
export { topDialog, clickInDialog, } from './dialog.steps';
|
|
5
5
|
export { findButton, findPopupMenu, findMenuItem, } from './locators';
|
|
6
|
+
export { fillField, fillDate, fillDateTime, selectOption, selectMultiple, selectRadio, setCheckbox, setCheckboxGroup, setToggle, addChip, removeChip, setChips, uploadFile, } from './forms';
|
|
6
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;AAExB,OAAO,EACL,UAAU,EACV,aAAa,EACb,YAAY,GACb,MAAM,YAAY,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.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;
|
|
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");
|
|
@@ -18,4 +18,18 @@ var locators_1 = require("./locators");
|
|
|
18
18
|
Object.defineProperty(exports, "findButton", { enumerable: true, get: function () { return locators_1.findButton; } });
|
|
19
19
|
Object.defineProperty(exports, "findPopupMenu", { enumerable: true, get: function () { return locators_1.findPopupMenu; } });
|
|
20
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; } });
|
|
21
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;AAGf,uCAIoB;AAHlB,sGAAA,UAAU,OAAA;AACV,yGAAA,aAAa,OAAA;AACb,wGAAA,YAAY,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"}
|
package/package.json
CHANGED