dimsum-e2e-tests 3.57.0-next.4 → 3.57.0-next.41
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/CHANGELOG.md +206 -0
- package/ds-accordion/DSAccordionCO.js +1 -2
- package/ds-accordion/slots/DSAccordion.slots.func.spec.js +12 -0
- package/ds-breadcrumb/DSBreadcrumb.func.spec.js +5 -3
- package/ds-card-v3/DSCardV3CO.js +20 -0
- package/ds-card-v3/slots/DSCardV3.slots.axe-core.spec.js +22 -0
- package/ds-card-v3/slots/DSCardV3.slots.func.spec.js +36 -0
- package/ds-card-v3/slots/DSCardV3.slots.visual.spec.js +18 -0
- package/ds-chip/DSChipCO.js +24 -0
- package/ds-chip/slots/DSChip.slots.axe-core.spec.js +17 -0
- package/ds-chip/slots/DSChip.slots.func.spec.js +39 -0
- package/ds-chip/slots/DSChip.slots.visual.spec.js +17 -0
- package/ds-controlled-form/ds-controlled-large-input-text/DSLargeInputTextCO.js +5 -0
- package/ds-controlled-form/ds-controlled-large-input-text/aria-disabled/DSLargeInputText.aria-disabled.func.spec.js +19 -0
- package/ds-data-table-async/DSDataTableCO.js +6 -1
- package/ds-data-table-async/basic/DSDataTable.basic.visual.spec.js +1 -45
- package/ds-data-table-async/components/FilterBarCO.js +8 -0
- package/ds-data-table-async/components/FiltersCO.js +8 -0
- package/ds-data-table-async/components/HeaderCO.js +5 -0
- package/ds-data-table-async/empty-state/DSDataTable.empty-state.visual.spec.js +1 -1
- package/ds-data-table-async/filters/DSDataTable.free-text-search.keyboard.func.spec.js +70 -5
- package/ds-data-table-async/filters/DSDataTable.text-filters.func.spec.js +3 -3
- package/ds-data-table-async/more/DSDataTable.headers.visual.spec.js +0 -63
- package/ds-data-table-async/select/DSDataTable.select.func.spec.js +1 -1
- package/ds-data-table-async/slots/DSDataTable.slots.func.spec.js +40 -0
- package/ds-data-table-async/slots/DSDataTable.slots.visual.spec.js +19 -0
- package/ds-data-table-async/sorting/DSDataTable.sorting.visual.spec.js +118 -0
- package/ds-dialog/DSDialog.cases.visual.spec.js +0 -1
- package/ds-dialog/DSDialog.visual.spec.js +1 -1
- package/ds-dialog/DSDialogCO.js +5 -13
- package/ds-dialog/axe-core/DSDialog.error.axe-core.func.spec.js +24 -0
- package/ds-dialog/axe-core/DSDialog.info.axe-core.func.spec.js +24 -0
- package/ds-dialog/axe-core/DSDialog.scroll-body.axe-core.func.spec.js +24 -0
- package/ds-dialog/axe-core/DSDialog.success.axe-core.func.spec.js +24 -0
- package/ds-dialog/axe-core/DSDialog.warning.axe-core.spec.func.js +24 -0
- package/ds-form-layout-blocks/form-layout-block-item/DSFormLayoutBlockItem.axe-core.func.spec.js +1 -1
- package/{ds-toggle → ds-form-toggle}/DSToggle.axe-core.func.spec.js +6 -2
- package/{ds-toggle → ds-form-toggle}/DSToggle.func.spec.js +13 -8
- package/{ds-toggle → ds-form-toggle}/DSToggle.visual.spec.js +2 -2
- package/{ds-toggle → ds-form-toggle}/DSToggleCO.js +1 -1
- package/ds-menu-button/DSMenuButtonCO.js +2 -0
- package/ds-menu-button/basic/DSMenuButton.basic.func.spec.js +28 -0
- package/ds-menu-button/submenu/DSMenuButton.axe-core.subMenu.func.spec.js +1 -2
- package/ds-pagination/DSPagination.axe-core.func.spec.js +64 -0
- package/ds-pagination/DSPaginationCO.js +12 -0
- package/ds-read-more/DSReadMore.width-change.visual.spec.js +85 -0
- package/ds-shuttle-v2/basic/DSShuttleV2.keyboard.func.spec.js +0 -95
- package/ds-shuttle-v2/filtering/DSShuttleV2.filter.func.spec.js +8 -3
- package/ds-shuttle-v2/filtering/DSShuttleV2.filter.kb.func.spec.js +43 -0
- package/ds-shuttle-v2/items/DSShuttleV2.items.func.spec.js +1 -1
- package/ds-shuttle-v2/items/DSShuttleV2.items.kb.func.spec.js +1 -1
- package/ds-shuttle-v2/load-more/DSShuttleV2.load-more.keyboard.func.spec.js +61 -0
- package/package.json +193 -189
- package/paths.js +1 -0
- package/ds-dialog/DSDialog.smoke.spec.js +0 -133
|
@@ -142,4 +142,12 @@ export default class FiltersCO extends PageObject {
|
|
|
142
142
|
static getFilterPopoverContent = async () => $('[data-testid="ds-datatable-filter-popover-content"]');
|
|
143
143
|
|
|
144
144
|
static getFreeTextSearchInput = async () => $('[data-testid="data-table-filter-free-text-search"]');
|
|
145
|
+
|
|
146
|
+
static getFilterMenuContentSlot = async () => $('[data-dimsum-slot="dsDatatableFilterPopoverContent"]');
|
|
147
|
+
|
|
148
|
+
static getFilterPopoverSlot = async () => $('[data-dimsum-slot="dsDatatableFilterPopover"]');
|
|
149
|
+
|
|
150
|
+
static getFreeTextSearchWrapperSlot = async () => $('[data-dimsum-slot="dsDatatableFreeTextSearchWrapper"]');
|
|
151
|
+
|
|
152
|
+
static getFreeTextSearchFilterSlot = async () => $('[data-dimsum-parent-slot="dsDatatableFreeTextSearchFilter"]');
|
|
145
153
|
}
|
|
@@ -43,6 +43,11 @@ export default class HeaderCO extends PageObject {
|
|
|
43
43
|
|
|
44
44
|
static getFilterBtnByIndex = async (index) => $$('[data-testid="data-table-filter-menu-button"] button')[index];
|
|
45
45
|
|
|
46
|
+
static getSortBtnByIndex = async (index) => {
|
|
47
|
+
const headerCell = await this.getHeaderCellByIndex(index);
|
|
48
|
+
return headerCell.$('[data-testid="data-table-sort-button"]');
|
|
49
|
+
};
|
|
50
|
+
|
|
46
51
|
// Snapshots
|
|
47
52
|
static snapshotPath(example = 'basic') {
|
|
48
53
|
return PageObject.getSnapshotPathBuilder('DataTable', example, 'ds-data-table');
|
|
@@ -53,7 +53,7 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
53
53
|
await DSDataTableCO.waitForDataTable();
|
|
54
54
|
});
|
|
55
55
|
it('01: should correctly display the data table empty state after skeleton animation finished', async () => {
|
|
56
|
-
const emptyStateWrapper = await DSDataTableCO.
|
|
56
|
+
const emptyStateWrapper = await DSDataTableCO.getDataTableEmptyStateWrapper();
|
|
57
57
|
await emptyStateWrapper.waitForDisplayed({ timeout: 5000 });
|
|
58
58
|
const snapshot = await browser.checkSnapshot(DSDataTableCO.snapshotPath('skeleton-empty-state'));
|
|
59
59
|
await expect(snapshot).toEqual(0);
|
|
@@ -67,7 +67,43 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
67
67
|
await expect(isFilteredJJ).toEqual(true);
|
|
68
68
|
await expect(pill1).toBeDisplayed();
|
|
69
69
|
});
|
|
70
|
-
it('06: should
|
|
70
|
+
it('06: should not clear the filter when the input is empty and press Enter', async () => {
|
|
71
|
+
await browser.keys(Key.Return);
|
|
72
|
+
// await browser.keys([Key.Backspace, Key.Backspace, Key.Backspace, Key.Backspace, Key.Backspace]);
|
|
73
|
+
if (browser.capabilities.browserName === 'Safari') {
|
|
74
|
+
await browser.keys([Key.Command, 'A']);
|
|
75
|
+
} else {
|
|
76
|
+
await browser.keys([Key.Control, 'A']);
|
|
77
|
+
}
|
|
78
|
+
await browser.keys(Key.Delete);
|
|
79
|
+
await browser.keys(Key.Return);
|
|
80
|
+
const freeTextSearchInput = await FiltersCO.getFreeTextSearchInput();
|
|
81
|
+
const results = await RowCO.getRows();
|
|
82
|
+
const filteredLastNames = await DSDataTableCO.getAllColumnResults(results, 2);
|
|
83
|
+
const isFilteredJWick = filteredLastNames.some((name) => name.toLowerCase() === 'jane johnson');
|
|
84
|
+
const isFilteredJJ = filteredLastNames.some((name) => name.toLowerCase() === 'jane wick');
|
|
85
|
+
const pill1 = await FilterBarCO.getPillByText('j');
|
|
86
|
+
await expect(freeTextSearchInput).toBeFocused();
|
|
87
|
+
await expect(isFilteredJWick).toEqual(true);
|
|
88
|
+
await expect(isFilteredJJ).toEqual(true);
|
|
89
|
+
await expect(pill1).toBeDisplayed();
|
|
90
|
+
});
|
|
91
|
+
it('07: should not clear the filter when the input has whitespace and press Enter', async () => {
|
|
92
|
+
await browser.keys(Key.Return);
|
|
93
|
+
await type(' ');
|
|
94
|
+
await browser.keys(Key.Return);
|
|
95
|
+
const freeTextSearchInput = await FiltersCO.getFreeTextSearchInput();
|
|
96
|
+
const results = await RowCO.getRows();
|
|
97
|
+
const filteredLastNames = await DSDataTableCO.getAllColumnResults(results, 2);
|
|
98
|
+
const isFilteredJWick = filteredLastNames.some((name) => name.toLowerCase() === 'jane johnson');
|
|
99
|
+
const isFilteredJJ = filteredLastNames.some((name) => name.toLowerCase() === 'jane wick');
|
|
100
|
+
const pill1 = await FilterBarCO.getPillByText('j');
|
|
101
|
+
await expect(freeTextSearchInput).toBeFocused();
|
|
102
|
+
await expect(isFilteredJWick).toEqual(true);
|
|
103
|
+
await expect(isFilteredJJ).toEqual(true);
|
|
104
|
+
await expect(pill1).toBeDisplayed();
|
|
105
|
+
});
|
|
106
|
+
it('08: should close the filter - Escape', async () => {
|
|
71
107
|
await browser.keys(Key.Return);
|
|
72
108
|
const freeTextPopover = await FiltersCO.getFilterPopoverContent();
|
|
73
109
|
await freeTextPopover.waitForDisplayed();
|
|
@@ -77,14 +113,14 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
77
113
|
await expect(freeTextPopover).not.toBeDisplayed();
|
|
78
114
|
await expect(buttonFirstNameColumn).toBeFocused();
|
|
79
115
|
});
|
|
80
|
-
it('
|
|
116
|
+
it('09: should display "no results found" when no matching rows are found', async () => {
|
|
81
117
|
await browser.keys(Key.Return);
|
|
82
118
|
await type('this is a test');
|
|
83
119
|
await browser.keys(Key.Return);
|
|
84
120
|
const noResults = await DSDataTableCO.getDataTableEmptyStateWrapper();
|
|
85
121
|
const FirstNameColumnHeader = await HeaderCO.getHeaderCellByIndex(1);
|
|
86
122
|
const buttonFirstNameColumn = await FiltersCO.getHeaderCellFilterButtonByHeaderCell(FirstNameColumnHeader, 0);
|
|
87
|
-
const pill1 = await FilterBarCO.getPillByText('
|
|
123
|
+
const pill1 = await FilterBarCO.getPillByText('this is a test');
|
|
88
124
|
await expect(noResults).toBeDisplayedInViewport();
|
|
89
125
|
await expect(buttonFirstNameColumn).toBeFocused();
|
|
90
126
|
await expect(pill1).toBeDisplayed();
|
|
@@ -151,7 +187,36 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
151
187
|
await expect(isFilteredJJ).toEqual(true);
|
|
152
188
|
await expect(pill1).toBeDisplayed();
|
|
153
189
|
});
|
|
154
|
-
it('06: should
|
|
190
|
+
it('06: should not clear the filter when the input is empty and press Enter', async () => {
|
|
191
|
+
await browser.keys(Key.Return);
|
|
192
|
+
await browser.keys(Key.Return);
|
|
193
|
+
const freeTextSearchInput = await FiltersCO.getFreeTextSearchInput();
|
|
194
|
+
const results = await RowCO.getRows();
|
|
195
|
+
const filteredLastNames = await DSDataTableCO.getAllColumnResults(results, 2);
|
|
196
|
+
const isFilteredJWick = filteredLastNames.some((name) => name.toLowerCase() === 'jane johnson');
|
|
197
|
+
const isFilteredJJ = filteredLastNames.some((name) => name.toLowerCase() === 'jane wick');
|
|
198
|
+
const pill1 = await FilterBarCO.getPillByText('j');
|
|
199
|
+
await expect(freeTextSearchInput).toBeFocused();
|
|
200
|
+
await expect(isFilteredJWick).toEqual(true);
|
|
201
|
+
await expect(isFilteredJJ).toEqual(true);
|
|
202
|
+
await expect(pill1).toBeDisplayed();
|
|
203
|
+
});
|
|
204
|
+
it('07: should not clear the filter when the input has whitespace and press Enter', async () => {
|
|
205
|
+
await browser.keys(Key.Return);
|
|
206
|
+
await type(' ');
|
|
207
|
+
await browser.keys(Key.Return);
|
|
208
|
+
const freeTextSearchInput = await FiltersCO.getFreeTextSearchInput();
|
|
209
|
+
const results = await RowCO.getRows();
|
|
210
|
+
const filteredLastNames = await DSDataTableCO.getAllColumnResults(results, 2);
|
|
211
|
+
const isFilteredJWick = filteredLastNames.some((name) => name.toLowerCase() === 'jane johnson');
|
|
212
|
+
const isFilteredJJ = filteredLastNames.some((name) => name.toLowerCase() === 'jane wick');
|
|
213
|
+
const pill1 = await FilterBarCO.getPillByText('j');
|
|
214
|
+
await expect(freeTextSearchInput).toBeFocused();
|
|
215
|
+
await expect(isFilteredJWick).toEqual(true);
|
|
216
|
+
await expect(isFilteredJJ).toEqual(true);
|
|
217
|
+
await expect(pill1).toBeDisplayed();
|
|
218
|
+
});
|
|
219
|
+
it('08: should close the filter - Escape', async () => {
|
|
155
220
|
await browser.keys(Key.Return);
|
|
156
221
|
const freeTextPopover = await FiltersCO.getFilterPopoverContent();
|
|
157
222
|
await freeTextPopover.waitForDisplayed();
|
|
@@ -161,7 +226,7 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
161
226
|
await expect(freeTextPopover).not.toBeDisplayed();
|
|
162
227
|
await expect(buttonLastNameColumn).toBeFocused();
|
|
163
228
|
});
|
|
164
|
-
it('
|
|
229
|
+
it('09: should display "no results found" when no matching rows are found', async () => {
|
|
165
230
|
await browser.keys(Key.Return);
|
|
166
231
|
await type('this is a test');
|
|
167
232
|
await browser.keys(Key.Return);
|
|
@@ -248,9 +248,9 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
248
248
|
await pill2.waitForDisplayed();
|
|
249
249
|
const filterBarMenuBtn = await FilterBarCO.getFilterBarDropdownMenuButton();
|
|
250
250
|
await filterBarMenuBtn.click();
|
|
251
|
-
const filterBarMenu = await FilterBarCO.
|
|
251
|
+
const filterBarMenu = await FilterBarCO.getFilterBarMenuListBox();
|
|
252
252
|
await filterBarMenu.waitForDisplayed();
|
|
253
|
-
const clearFilters = await FilterBarCO.
|
|
253
|
+
const clearFilters = await FilterBarCO.getFilterBarDropDownMenuItemByIndex(0);
|
|
254
254
|
await clearFilters.click();
|
|
255
255
|
await expect(pill1).not.toBeDisplayed();
|
|
256
256
|
await expect(pill2).not.toBeDisplayed();
|
|
@@ -272,7 +272,7 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
272
272
|
await browser.keys([Key.Shift, Key.Tab]);
|
|
273
273
|
await browser.keys([Key.Shift, Key.Tab]);
|
|
274
274
|
await browser.keys(Key.Enter);
|
|
275
|
-
const filterBarMenu = await FilterBarCO.
|
|
275
|
+
const filterBarMenu = await FilterBarCO.getFilterBarMenuListBox();
|
|
276
276
|
await filterBarMenu.waitForDisplayed();
|
|
277
277
|
await browser.keys(Key.Return);
|
|
278
278
|
await expect(pill1).not.toBeDisplayed();
|
|
@@ -1,49 +1,6 @@
|
|
|
1
|
-
import { Key } from 'webdriverio';
|
|
2
1
|
import DSDataTableCO from '../DSDataTableCO';
|
|
3
|
-
import { HeaderCO } from '../components';
|
|
4
|
-
import { mouseOver } from '../../helpers';
|
|
5
2
|
|
|
6
3
|
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
7
|
-
describe('PUI-7205 - DataTable, Header, Sort by Column - Visual Test', () => {
|
|
8
|
-
// PUI-7054
|
|
9
|
-
before('loading page', async () => {
|
|
10
|
-
const errorOnGo = await DSDataTableCO.sortByColumn.go();
|
|
11
|
-
if (errorOnGo) throw errorOnGo;
|
|
12
|
-
await DSDataTableCO.waitForDataTable();
|
|
13
|
-
});
|
|
14
|
-
it('01: should focus position header and show its icons properly', async () => {
|
|
15
|
-
await browser.keys(Key.Tab);
|
|
16
|
-
await browser.keys(Key.Tab);
|
|
17
|
-
await browser.keys(Key.Tab);
|
|
18
|
-
const snapshot = await browser.checkSnapshot(DSDataTableCO.snapshotPath('headers-focus-header'));
|
|
19
|
-
await expect(snapshot).toEqual(0);
|
|
20
|
-
});
|
|
21
|
-
it('02: should hover country header and show its icons properly', async () => {
|
|
22
|
-
const positionHeader = await HeaderCO.getHeaderCellByIndex(3);
|
|
23
|
-
await mouseOver(positionHeader);
|
|
24
|
-
const snapshot = await browser.checkSnapshot(DSDataTableCO.snapshotPath('headers-hover-header'));
|
|
25
|
-
await expect(snapshot).toEqual(0);
|
|
26
|
-
});
|
|
27
|
-
it('03: should hover truncated name header and show its icons and tooltip properly', async () => {
|
|
28
|
-
const nameLongHeader = await HeaderCO.getHeaderCellByIndex(1);
|
|
29
|
-
await mouseOver(nameLongHeader, 50, 10);
|
|
30
|
-
const snapshot = await browser.checkSnapshot(DSDataTableCO.snapshotPath('headers-hover-longheader-wtooltip'));
|
|
31
|
-
await expect(snapshot).toEqual(0);
|
|
32
|
-
});
|
|
33
|
-
it('04: should sort descending by first column and get the proper sort icon', async () => {
|
|
34
|
-
const idHeader = await HeaderCO.getHeaderCellByIndex(0);
|
|
35
|
-
await idHeader.click();
|
|
36
|
-
const snapshot = await browser.checkSnapshot(DSDataTableCO.snapshotPath('headers-descending-icon-id'));
|
|
37
|
-
await expect(snapshot).toEqual(0);
|
|
38
|
-
});
|
|
39
|
-
it('05: should sort ascending by first column and get the proper sort icon', async () => {
|
|
40
|
-
const idHeader = await HeaderCO.getHeaderCellByIndex(0);
|
|
41
|
-
await idHeader.click();
|
|
42
|
-
const snapshot = await browser.checkSnapshot(DSDataTableCO.snapshotPath('headers-ascending-icon-id'));
|
|
43
|
-
await expect(snapshot).toEqual(0);
|
|
44
|
-
});
|
|
45
|
-
});
|
|
46
|
-
|
|
47
4
|
describe('PUI-6978 - DataTable, Header, Required Column - Visual Test', () => {
|
|
48
5
|
before('loading page', async () => {
|
|
49
6
|
const errorOnGo = await DSDataTableCO.requiredColumns.go();
|
|
@@ -67,24 +24,4 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
67
24
|
await expect(snapshot).toEqual(0);
|
|
68
25
|
});
|
|
69
26
|
});
|
|
70
|
-
describe('PUI-14735 - [DataTable] Header - Sort icon visibility - keyboard navigation - visual test', () => {
|
|
71
|
-
before('loading page', async () => {
|
|
72
|
-
const errorOnGo = await DSDataTableCO.sortByColumn.go();
|
|
73
|
-
if (errorOnGo) throw errorOnGo;
|
|
74
|
-
await DSDataTableCO.waitForDataTable();
|
|
75
|
-
});
|
|
76
|
-
it('01: column position focused, all the controls including filter and sort icons are displayed', async () => {
|
|
77
|
-
await browser.keys(Key.Tab);
|
|
78
|
-
await browser.keys(Key.Tab);
|
|
79
|
-
await browser.keys(Key.Tab);
|
|
80
|
-
const snapshot = await browser.checkSnapshot(DSDataTableCO.snapshotPath('datatable-header-kb-focus'));
|
|
81
|
-
await expect(snapshot).toEqual(0);
|
|
82
|
-
});
|
|
83
|
-
it('02: column position focused, all the controls including filter and sort icons are displayed', async () => {
|
|
84
|
-
await browser.keys(Key.Enter);
|
|
85
|
-
await browser.keys(Key.Enter);
|
|
86
|
-
const snapshot = await browser.checkSnapshot(DSDataTableCO.snapshotPath('datatable-header-kb-option-selected'));
|
|
87
|
-
await expect(snapshot).toEqual(0);
|
|
88
|
-
});
|
|
89
|
-
});
|
|
90
27
|
}
|
|
@@ -5,7 +5,7 @@ import DSDataTableCO from '../DSDataTableCO';
|
|
|
5
5
|
import { HeaderCO, RowCO, FiltersCO } from '../components';
|
|
6
6
|
import { getRadioValue } from '../helpers';
|
|
7
7
|
import { tabStops, isChecked, type } from '../../helpers';
|
|
8
|
-
import DSToggleCO from '../../ds-toggle/DSToggleCO';
|
|
8
|
+
import DSToggleCO from '../../ds-form-toggle/DSToggleCO';
|
|
9
9
|
|
|
10
10
|
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
11
11
|
describe('PUI-7043 - DataTable, Single select disabled selection', () => {
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/* eslint-disable max-lines */
|
|
2
|
+
import DSDataTableCO from '../DSDataTableCO';
|
|
3
|
+
import DSFiltersCO from '../components/FiltersCO';
|
|
4
|
+
|
|
5
|
+
if (
|
|
6
|
+
(!browser.capabilities['ice:options'].isPhone &&
|
|
7
|
+
!browser.capabilities['ice:options'].isTablet &&
|
|
8
|
+
browser.capabilities.browserName === 'chrome') ||
|
|
9
|
+
browser.capabilities.browserName === 'Chrome'
|
|
10
|
+
) {
|
|
11
|
+
describe('PUI-17326 - DataTable:: FreeTextSearch Slots - Func', () => {
|
|
12
|
+
before('loading page', async () => {
|
|
13
|
+
const errorOnGo = await DSDataTableCO.slotsFilters.go();
|
|
14
|
+
if (errorOnGo) throw errorOnGo;
|
|
15
|
+
});
|
|
16
|
+
it('01: should have custom aria-* for each slot', async () => {
|
|
17
|
+
await DSFiltersCO.openFilterPopperByColumnName('name');
|
|
18
|
+
const dataTableFilterPopoverSlot = await DSFiltersCO.getFilterPopoverSlot();
|
|
19
|
+
const dataTableFilterPopoverContent = await DSFiltersCO.getFilterMenuContentSlot();
|
|
20
|
+
const dataTableFreeTextSearchWrapperSlot = await DSFiltersCO.getFreeTextSearchWrapperSlot();
|
|
21
|
+
const dataTableFreeTextSearchFilterSlot = await DSFiltersCO.getFreeTextSearchFilterSlot();
|
|
22
|
+
|
|
23
|
+
await expect(dataTableFilterPopoverSlot).toHaveAttribute('aria-label', 'Filter popover aria');
|
|
24
|
+
await expect(dataTableFilterPopoverContent).toHaveAttribute('aria-label', 'Filter popover content aria');
|
|
25
|
+
await expect(dataTableFreeTextSearchWrapperSlot).toHaveAttribute('aria-label', 'Free text search wrapper aria');
|
|
26
|
+
await expect(dataTableFreeTextSearchFilterSlot).toHaveAttribute('aria-label', 'Free text search input aria');
|
|
27
|
+
});
|
|
28
|
+
it('02: should have custom data-* for each slot', async () => {
|
|
29
|
+
const dataTableFilterPopoverSlot = await DSFiltersCO.getFilterPopoverSlot();
|
|
30
|
+
const dataTableFilterPopoverContent = await DSFiltersCO.getFilterMenuContentSlot();
|
|
31
|
+
const dataTableFreeTextSearchWrapperSlot = await DSFiltersCO.getFreeTextSearchWrapperSlot();
|
|
32
|
+
const dataTableFreeTextSearchFilterSlot = await DSFiltersCO.getFreeTextSearchFilterSlot();
|
|
33
|
+
|
|
34
|
+
await expect(dataTableFilterPopoverSlot).toHaveAttribute('data-testid', 'Filter popover data');
|
|
35
|
+
await expect(dataTableFilterPopoverContent).toHaveAttribute('data-testid', 'Filter popover content data');
|
|
36
|
+
await expect(dataTableFreeTextSearchWrapperSlot).toHaveAttribute('data-testid', 'Free text search wrapper data');
|
|
37
|
+
await expect(dataTableFreeTextSearchFilterSlot).toHaveAttribute('data-testid', 'Free text search input data');
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/* eslint-disable max-lines */
|
|
2
|
+
import DSDataTableCO from '../DSDataTableCO';
|
|
3
|
+
import FiltersCO from '../components/FiltersCO';
|
|
4
|
+
|
|
5
|
+
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
6
|
+
describe('PUI-17327 - DataTable:: FreeTextSearch Slots -Visual', () => {
|
|
7
|
+
before('loading page', async () => {
|
|
8
|
+
const errorOnGo = await DSDataTableCO.slotsFilters.go();
|
|
9
|
+
if (errorOnGo) throw errorOnGo;
|
|
10
|
+
});
|
|
11
|
+
it('01: should display FreeTextSearch with customized slots', async () => {
|
|
12
|
+
await browser.eyesOpen();
|
|
13
|
+
await FiltersCO.openFilterPopperByColumnName('name');
|
|
14
|
+
|
|
15
|
+
const snapshot = await browser.eyesCheckSnapshot(DSDataTableCO.snapshotPath('free-text-search-slots'));
|
|
16
|
+
await expect(snapshot).toEqual(0);
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/* eslint-disable max-len */
|
|
2
|
+
import { Key } from 'webdriverio';
|
|
3
|
+
import DSDataTableCO from '../DSDataTableCO';
|
|
4
|
+
import { FiltersCO, HeaderCO } from '../components';
|
|
5
|
+
import { asyncMouseOver, mouseOver } from '../../helpers';
|
|
6
|
+
|
|
7
|
+
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
8
|
+
describe('PUI-6983 - DataTable, Column header when sorting -visual', async () => {
|
|
9
|
+
before('loading page', async () => {
|
|
10
|
+
const errorOnGo = await DSDataTableCO.sortByColumn.go();
|
|
11
|
+
if (errorOnGo) throw errorOnGo;
|
|
12
|
+
await DSDataTableCO.waitForDataTable();
|
|
13
|
+
});
|
|
14
|
+
it('01: should hover on position header and show the unsorted icon for the column', async () => {
|
|
15
|
+
const positionHeader = await HeaderCO.getHeaderCellByIndex(2);
|
|
16
|
+
await asyncMouseOver(positionHeader);
|
|
17
|
+
const snapshot = await browser.checkSnapshot(DSDataTableCO.snapshotPath('datatable-column-header-unsorted'));
|
|
18
|
+
await expect(snapshot).toEqual(0);
|
|
19
|
+
});
|
|
20
|
+
it('02: should click on position header and sort the rows descending by this column changing the headers icon', async () => {
|
|
21
|
+
await browser.keys(Key.Tab);
|
|
22
|
+
await browser.keys(Key.Tab);
|
|
23
|
+
await browser.keys(Key.Tab);
|
|
24
|
+
await browser.keys(Key.ArrowDown);
|
|
25
|
+
const snapshot = await browser.checkSnapshot(DSDataTableCO.snapshotPath('datatable-column-header-descending'));
|
|
26
|
+
await expect(snapshot).toEqual(0);
|
|
27
|
+
});
|
|
28
|
+
it('03: should click on position header and sort the rows ascending by this column changing the headers icon', async () => {
|
|
29
|
+
await browser.keys(Key.ArrowUp);
|
|
30
|
+
const snapshot = await browser.checkSnapshot(DSDataTableCO.snapshotPath('datatable-column-header-ascending'));
|
|
31
|
+
await expect(snapshot).toEqual(0);
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
describe('PUI-7041 - DataTable, Column header truncated -visual', async () => {
|
|
35
|
+
before('loading page', async () => {
|
|
36
|
+
const errorOnGo = await DSDataTableCO.sortByColumn.go();
|
|
37
|
+
if (errorOnGo) throw errorOnGo;
|
|
38
|
+
await DSDataTableCO.waitForDataTable();
|
|
39
|
+
});
|
|
40
|
+
it('Should click on name header and sort the rows ascending by this column changing the headers icon', async () => {
|
|
41
|
+
const countryHeader = await HeaderCO.getHeaderCellByIndex(1);
|
|
42
|
+
await countryHeader.click();
|
|
43
|
+
await asyncMouseOver(countryHeader);
|
|
44
|
+
// eslint-disable-next-line wdio/no-pause
|
|
45
|
+
await browser.pause(1000);
|
|
46
|
+
const snapshot = await browser.checkSnapshot(
|
|
47
|
+
DSDataTableCO.snapshotPath('datatable-column-header-truncated-wtooltip'),
|
|
48
|
+
);
|
|
49
|
+
await expect(snapshot).toEqual(0);
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
describe('PUI-14735 - [DataTable] Header - Sort icon visibility - keyboard navigation - visual test', () => {
|
|
53
|
+
before('loading page', async () => {
|
|
54
|
+
const errorOnGo = await DSDataTableCO.sortByColumn.go();
|
|
55
|
+
if (errorOnGo) throw errorOnGo;
|
|
56
|
+
await DSDataTableCO.waitForDataTable();
|
|
57
|
+
});
|
|
58
|
+
it('01: column position focused, all the controls including filter and sort icons are displayed', async () => {
|
|
59
|
+
await browser.keys(Key.Tab);
|
|
60
|
+
await browser.keys(Key.Tab);
|
|
61
|
+
await browser.keys(Key.Tab);
|
|
62
|
+
const snapshot = await browser.checkSnapshot(DSDataTableCO.snapshotPath('datatable-header-kb-focus'));
|
|
63
|
+
await expect(snapshot).toEqual(0);
|
|
64
|
+
});
|
|
65
|
+
it('02: column position focused, all the controls including filter and sort icons are displayed', async () => {
|
|
66
|
+
await browser.keys(Key.Enter);
|
|
67
|
+
await browser.keys(Key.Enter);
|
|
68
|
+
const snapshot = await browser.checkSnapshot(DSDataTableCO.snapshotPath('datatable-header-kb-option-selected'));
|
|
69
|
+
await expect(snapshot).toEqual(0);
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
describe('PUI-7054 - DataTable, Header, Sort by Column - Visual Test', () => {
|
|
73
|
+
before('loading page', async () => {
|
|
74
|
+
const errorOnGo = await DSDataTableCO.sortByColumn.go();
|
|
75
|
+
if (errorOnGo) throw errorOnGo;
|
|
76
|
+
await DSDataTableCO.waitForDataTable();
|
|
77
|
+
});
|
|
78
|
+
it('01: should focus position header and show its icons properly', async () => {
|
|
79
|
+
await browser.keys(Key.Tab);
|
|
80
|
+
await browser.keys(Key.Tab);
|
|
81
|
+
await browser.keys(Key.Tab);
|
|
82
|
+
const snapshot = await browser.checkSnapshot(DSDataTableCO.snapshotPath('headers-focus-header'));
|
|
83
|
+
await expect(snapshot).toEqual(0);
|
|
84
|
+
});
|
|
85
|
+
it('02: should hover country header and show its icons properly', async () => {
|
|
86
|
+
const positionHeader = await HeaderCO.getHeaderCellByIndex(3);
|
|
87
|
+
await mouseOver(positionHeader);
|
|
88
|
+
const snapshot = await browser.checkSnapshot(DSDataTableCO.snapshotPath('headers-hover-header'));
|
|
89
|
+
await expect(snapshot).toEqual(0);
|
|
90
|
+
});
|
|
91
|
+
it('03: should hover truncated name header and show its icons and tooltip properly', async () => {
|
|
92
|
+
const nameLongHeader = await HeaderCO.getHeaderCellByIndex(1);
|
|
93
|
+
await mouseOver(nameLongHeader, 50, 10);
|
|
94
|
+
const snapshot = await browser.checkSnapshot(DSDataTableCO.snapshotPath('headers-hover-longheader-wtooltip'));
|
|
95
|
+
await expect(snapshot).toEqual(0);
|
|
96
|
+
});
|
|
97
|
+
it('04: should sort descending by first column and get the proper sort icon', async () => {
|
|
98
|
+
const idHeader = await HeaderCO.getHeaderCellByIndex(0);
|
|
99
|
+
await idHeader.click();
|
|
100
|
+
const snapshot = await browser.checkSnapshot(DSDataTableCO.snapshotPath('headers-descending-icon-id'));
|
|
101
|
+
await expect(snapshot).toEqual(0);
|
|
102
|
+
});
|
|
103
|
+
it('05: should sort ascending by first column and get the proper sort icon', async () => {
|
|
104
|
+
const idHeader = await HeaderCO.getHeaderCellByIndex(0);
|
|
105
|
+
await idHeader.click();
|
|
106
|
+
const snapshot = await browser.checkSnapshot(DSDataTableCO.snapshotPath('headers-ascending-icon-id'));
|
|
107
|
+
await expect(snapshot).toEqual(0);
|
|
108
|
+
});
|
|
109
|
+
it('06: should sort correctly with the filter opened', async () => {
|
|
110
|
+
await FiltersCO.openFilterPopperByColumnName('position');
|
|
111
|
+
const sortIconHeader = await HeaderCO.getSortBtnByIndex(2);
|
|
112
|
+
await sortIconHeader.waitForDisplayed();
|
|
113
|
+
await sortIconHeader.click();
|
|
114
|
+
const snapshot = await browser.checkSnapshot(DSDataTableCO.snapshotPath('sort-with-filter-opened'));
|
|
115
|
+
await expect(snapshot).toEqual(0);
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
}
|
|
@@ -61,7 +61,6 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
61
61
|
const dialog = await DSDialog.getDialog();
|
|
62
62
|
await dialog.waitForDisplayed();
|
|
63
63
|
await browser.keys(Key.Tab);
|
|
64
|
-
await browser.keys(Key.Tab);
|
|
65
64
|
await browser.keys(Key.ArrowDown);
|
|
66
65
|
await browser.keys(Key.ArrowDown);
|
|
67
66
|
await browser.keys(Key.ArrowDown);
|
|
@@ -38,7 +38,7 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
38
38
|
});
|
|
39
39
|
describe('PUI-7878 - DSDialog, ScrollBody layout -visual', () => {
|
|
40
40
|
before('loading page', async () => {
|
|
41
|
-
const errorOnGo = await DSDialog.
|
|
41
|
+
const errorOnGo = await DSDialog.scrollBodyContent.go();
|
|
42
42
|
if (errorOnGo) throw errorOnGo;
|
|
43
43
|
});
|
|
44
44
|
it('should display scrollable DSDialog correctly', async () => {
|
package/ds-dialog/DSDialogCO.js
CHANGED
|
@@ -1,32 +1,24 @@
|
|
|
1
1
|
/* eslint-disable import/no-relative-packages */
|
|
2
2
|
import { getElementByIndex } from './helpers/getElementByIndex';
|
|
3
|
-
import {
|
|
3
|
+
import { PATH_E2E_DIALOG } from '../paths';
|
|
4
4
|
import { PageObject, Urlbuilder } from '../helpers';
|
|
5
5
|
|
|
6
6
|
export default class DSDialog extends PageObject {
|
|
7
7
|
static basicURL = new Urlbuilder(PATH_E2E_DIALOG, 'basic');
|
|
8
8
|
|
|
9
|
-
static centeredURL = new Urlbuilder(
|
|
9
|
+
static centeredURL = new Urlbuilder(PATH_E2E_DIALOG, 'centered-test');
|
|
10
10
|
|
|
11
11
|
static withPopperjs = new Urlbuilder(PATH_E2E_DIALOG, 'with-popperjs');
|
|
12
12
|
|
|
13
13
|
static decisionURL = new Urlbuilder(PATH_E2E_DIALOG, 'decision-test');
|
|
14
14
|
|
|
15
|
-
static formDialogURL = new Urlbuilder(PATH_DIALOG_EXAMPLES, 'form-dialog');
|
|
16
|
-
|
|
17
15
|
static informationURL = new Urlbuilder(PATH_E2E_DIALOG, 'informational-test');
|
|
18
16
|
|
|
19
|
-
static
|
|
20
|
-
|
|
21
|
-
static removeFocusURL = new Urlbuilder(PATH_DIALOG_EXAMPLES, 'remove-auto-focus');
|
|
22
|
-
|
|
23
|
-
static scrollBodyURL = new Urlbuilder(PATH_DIALOG_EXAMPLES, 'scroll-body');
|
|
24
|
-
|
|
25
|
-
static shuttleURL = new Urlbuilder(PATH_DIALOG_EXAMPLES, 'shuttle');
|
|
17
|
+
static removeFocusURL = new Urlbuilder(PATH_E2E_DIALOG, 'remove-auto-focus-test');
|
|
26
18
|
|
|
27
|
-
static
|
|
19
|
+
static shuttleURL = new Urlbuilder(PATH_E2E_DIALOG, 'shuttle-test');
|
|
28
20
|
|
|
29
|
-
static wizardURL = new Urlbuilder(
|
|
21
|
+
static wizardURL = new Urlbuilder(PATH_E2E_DIALOG, 'wizard-test');
|
|
30
22
|
|
|
31
23
|
static preventBackgroundShifting = new Urlbuilder(PATH_E2E_DIALOG, 'prevent-background-shifting');
|
|
32
24
|
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import DSDialog from '../DSDialogCO';
|
|
2
|
+
import { axeCoreCheck } from '../../helpers';
|
|
3
|
+
|
|
4
|
+
if (
|
|
5
|
+
(!browser.capabilities['ice:options'].isPhone &&
|
|
6
|
+
!browser.capabilities['ice:options'].isTablet &&
|
|
7
|
+
browser.capabilities.browserName === 'chrome') ||
|
|
8
|
+
browser.capabilities.browserName === 'Chrome'
|
|
9
|
+
) {
|
|
10
|
+
describe('PUI-17332 - DSDialog:: Error dialog - axe-core', () => {
|
|
11
|
+
before('loading page', async () => {
|
|
12
|
+
const errorOnGo = await DSDialog.errorURL.go();
|
|
13
|
+
if (errorOnGo) throw errorOnGo;
|
|
14
|
+
});
|
|
15
|
+
it('should display Error DSDialog correctly and pass axe-core scan', async () => {
|
|
16
|
+
const triggerBtn = await DSDialog.getTriggerBtn();
|
|
17
|
+
await triggerBtn.click();
|
|
18
|
+
const dialog = await DSDialog.getDialog();
|
|
19
|
+
await dialog.waitForDisplayed();
|
|
20
|
+
const result = await axeCoreCheck();
|
|
21
|
+
expect(result.length).toBe(0);
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import DSDialog from '../DSDialogCO';
|
|
2
|
+
import { axeCoreCheck } from '../../helpers';
|
|
3
|
+
|
|
4
|
+
if (
|
|
5
|
+
(!browser.capabilities['ice:options'].isPhone &&
|
|
6
|
+
!browser.capabilities['ice:options'].isTablet &&
|
|
7
|
+
browser.capabilities.browserName === 'chrome') ||
|
|
8
|
+
browser.capabilities.browserName === 'Chrome'
|
|
9
|
+
) {
|
|
10
|
+
describe('PUI-17330 - DSDialog:: Information dialog - axe-core', () => {
|
|
11
|
+
before('loading page', async () => {
|
|
12
|
+
const errorOnGo = await DSDialog.informationURL.go();
|
|
13
|
+
if (errorOnGo) throw errorOnGo;
|
|
14
|
+
});
|
|
15
|
+
it('should display Information DSDialog correctly and pass axe-core scan', async () => {
|
|
16
|
+
const triggerBtn = await DSDialog.getTriggerBtn();
|
|
17
|
+
await triggerBtn.click();
|
|
18
|
+
const dialog = await DSDialog.getDialog();
|
|
19
|
+
await dialog.waitForDisplayed();
|
|
20
|
+
const result = await axeCoreCheck();
|
|
21
|
+
expect(result.length).toBe(0);
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import DSDialog from '../DSDialogCO';
|
|
2
|
+
import { axeCoreCheck } from '../../helpers';
|
|
3
|
+
|
|
4
|
+
if (
|
|
5
|
+
(!browser.capabilities['ice:options'].isPhone &&
|
|
6
|
+
!browser.capabilities['ice:options'].isTablet &&
|
|
7
|
+
browser.capabilities.browserName === 'chrome') ||
|
|
8
|
+
browser.capabilities.browserName === 'Chrome'
|
|
9
|
+
) {
|
|
10
|
+
describe('PUI-17329 - DSDialog:: ScrollBody layout - axe-core', () => {
|
|
11
|
+
before('loading page', async () => {
|
|
12
|
+
const errorOnGo = await DSDialog.scrollBodyContent.go();
|
|
13
|
+
if (errorOnGo) throw errorOnGo;
|
|
14
|
+
});
|
|
15
|
+
it('should display scrollable DSDialog correctly and pass axe-core scan', async () => {
|
|
16
|
+
const triggerBtn = await DSDialog.getTriggerBtn();
|
|
17
|
+
await triggerBtn.click();
|
|
18
|
+
const dialog = await DSDialog.getDialog();
|
|
19
|
+
await dialog.waitForDisplayed();
|
|
20
|
+
const result = await axeCoreCheck();
|
|
21
|
+
expect(result.length).toBe(0);
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import DSDialog from '../DSDialogCO';
|
|
2
|
+
import { axeCoreCheck } from '../../helpers';
|
|
3
|
+
|
|
4
|
+
if (
|
|
5
|
+
(!browser.capabilities['ice:options'].isPhone &&
|
|
6
|
+
!browser.capabilities['ice:options'].isTablet &&
|
|
7
|
+
browser.capabilities.browserName === 'chrome') ||
|
|
8
|
+
browser.capabilities.browserName === 'Chrome'
|
|
9
|
+
) {
|
|
10
|
+
describe('PUI-17333 - DSDialog, Success dialog - axe-core', () => {
|
|
11
|
+
before('loading page', async () => {
|
|
12
|
+
const errorOnGo = await DSDialog.successURL.go();
|
|
13
|
+
if (errorOnGo) throw errorOnGo;
|
|
14
|
+
});
|
|
15
|
+
it('should display Success DSDialog correctly and pass axe-core scan', async () => {
|
|
16
|
+
const triggerBtn = await DSDialog.getTriggerBtn();
|
|
17
|
+
await triggerBtn.click();
|
|
18
|
+
const dialog = await DSDialog.getDialog();
|
|
19
|
+
await dialog.waitForDisplayed();
|
|
20
|
+
const result = await axeCoreCheck();
|
|
21
|
+
expect(result.length).toBe(0);
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import DSDialog from '../DSDialogCO';
|
|
2
|
+
import { axeCoreCheck } from '../../helpers';
|
|
3
|
+
|
|
4
|
+
if (
|
|
5
|
+
(!browser.capabilities['ice:options'].isPhone &&
|
|
6
|
+
!browser.capabilities['ice:options'].isTablet &&
|
|
7
|
+
browser.capabilities.browserName === 'chrome') ||
|
|
8
|
+
browser.capabilities.browserName === 'Chrome'
|
|
9
|
+
) {
|
|
10
|
+
describe('PUI-17331 - DSDialog:: Warning dialog - axe-core', () => {
|
|
11
|
+
before('loading page', async () => {
|
|
12
|
+
const errorOnGo = await DSDialog.warningURL.go();
|
|
13
|
+
if (errorOnGo) throw errorOnGo;
|
|
14
|
+
});
|
|
15
|
+
it('should display Warning DSDialog correctly and pass axe-core scan', async () => {
|
|
16
|
+
const triggerBtn = await DSDialog.getTriggerBtn();
|
|
17
|
+
await triggerBtn.click();
|
|
18
|
+
const dialog = await DSDialog.getDialog();
|
|
19
|
+
await dialog.waitForDisplayed();
|
|
20
|
+
const result = await axeCoreCheck();
|
|
21
|
+
expect(result.length).toBe(0);
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
}
|
package/ds-form-layout-blocks/form-layout-block-item/DSFormLayoutBlockItem.axe-core.func.spec.js
CHANGED
|
@@ -145,7 +145,7 @@ if (
|
|
|
145
145
|
it('02: should have required attribute and aria-hidden for required formLayoutBlock label', async () => {
|
|
146
146
|
const formLayout = await DSFormLayoutBlockItemCO.getBlockContainersByIndex(0);
|
|
147
147
|
await formLayout.waitForDisplayed();
|
|
148
|
-
const star = await DSFormLayoutBlockItemCO.
|
|
148
|
+
const star = await DSFormLayoutBlockItemCO.getRequiredStarFromIndex();
|
|
149
149
|
const ariaHidden = await star.getAttribute('aria-hidden');
|
|
150
150
|
const isRequired = await formLayout.getAttribute('required');
|
|
151
151
|
expect(ariaHidden).toEqual('true');
|