dimsum-e2e-tests 3.51.0-rc.8 → 3.51.1
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 +48 -290
- package/ds-apppicker/slots/DSAppPicker.slots.func.spec.js +5 -5
- package/ds-card-v3/DSCardV3CO.js +4 -0
- package/ds-card-v3/drag-n-drop/DSCardV3.DnD.visual.spec.js +62 -0
- package/ds-card-v3/single-select/DSCardV3.single-select.func.spec.js +2 -8
- package/ds-controlled-form/ds-combobox/DSCombobox.smoke.spec.js +1 -0
- package/ds-controlled-form/ds-combobox/creatable/DSCombobox.creatable.visual.spec.js +4 -0
- package/ds-controlled-form/ds-combobox/only-selectable/DSCombobox.only-selectable.axe-core.func.spec.js +1 -0
- package/ds-controlled-form/ds-controlled-checkbox/Mixed/DSControlledCheckbox.mixed.func.spec.js +8 -0
- package/ds-controlled-form/ds-controlled-inputgroup/basic/DSControlledInputGroup.a11y.func.spec.js +4 -3
- package/ds-controlled-form/ds-controlled-radio/DSControlledRadio.visual.spec.js +0 -22
- package/ds-controlled-form/ds-controlled-radio/DSControlledRadioCO.js +2 -0
- package/ds-controlled-form/ds-controlled-radio/read-only/DSControlledRadio.readOnly.axe-core.func.spec.js +22 -0
- package/ds-controlled-form/ds-controlled-radio/read-only/DSControlledRadio.readOnly.visual.spec.js +24 -0
- package/ds-controlled-form/ds-controlled-radio/wrapLabel/DSControlledRadio.wrapLabel.visual.spec.js +15 -0
- package/ds-controlled-form/ds-input-text/DSInputTextCO.js +2 -0
- package/ds-controlled-form/ds-input-text/aria-disabled/DSInputText.aria-disabled.func.spec.js +19 -0
- package/ds-data-table-async/DSDataTableCO.js +5 -1
- package/ds-data-table-async/components/HeaderCO.js +2 -0
- package/ds-data-table-async/components/PaginationNavCO.js +4 -0
- package/ds-data-table-async/filters/DSDataTable.filters-creatable.func.spec.js +8 -12
- package/ds-data-table-async/filters/DSDataTable.filters-creatable.visual.spec.js +5 -4
- package/ds-data-table-async/filters/DSDataTable.filters.empty-value.visual.spec.js +9 -8
- package/ds-data-table-async/filters/DSDataTable.filters.visual.spec.js +3 -2
- package/ds-data-table-async/pagination/DSDataTable.pagination.func.spec.js +23 -0
- package/ds-data-table-async/select/DSDataTable.select.shift.func.spec.js +47 -0
- package/ds-floating-context/DSFloatingContextCO.js +14 -0
- package/ds-floating-context/slots/DSFloatingContext.slots.axe-core.func.spec.js +23 -0
- package/ds-floating-context/slots/DSFloatingContext.slots.func.spec.js +41 -0
- package/ds-floating-context/slots/DSFloatingContext.slots.visual.spec.js +18 -0
- package/ds-form-combobox-multi/DSComboboxMultiCO.js +2 -0
- package/ds-form-combobox-multi/read-only/DSComboboxMulti.read-only.axe-core.func.spec.js +2 -2
- package/ds-form-combobox-multi/read-only/DSComboboxMulti.read-only.keyboard-nav.func.spec.js +38 -12
- package/ds-form-combobox-multi/read-only/DSComboboxMulti.read-only.mouse.func.spec.js +24 -2
- package/ds-form-combobox-multi/read-only/DSComboboxMulti.read-only.visual.spec.js +22 -7
- package/ds-form-combobox-single/DSComboboxSingleCO.js +2 -0
- package/ds-form-combobox-single/read-only/DSComboboxSingle.read-only.axe-core.func.spec.js +3 -3
- package/ds-form-combobox-single/read-only/DSComboboxSingle.read-only.keyboard-nav.func.spec.js +38 -11
- package/ds-form-combobox-single/read-only/DSComboboxSingle.read-only.mouse.func.spec.js +24 -2
- package/ds-form-combobox-single/read-only/DSComboboxSingle.read-only.visual.spec.js +28 -8
- package/ds-form-date-range-picker/read-only/DateRangePicker.readOnly.keyboard-nav.func.spec.js +31 -5
- package/ds-form-date-time-picker/date-time-input/DateTimeInput.readOnly.keyboard-nav.func.spec.js +40 -4
- package/ds-global-header/GlobalHeaderCO.js +68 -0
- package/ds-global-header/slots/GlobalHeader.slots.func.spec.js +86 -0
- package/ds-global-header/slots/GlobalHeader.slots.visual.spec.js +20 -0
- package/ds-leftnavigation/LeftNavigation.axe-core.func.spec.js +14 -16
- package/ds-leftnavigation/LeftNavigation.func.spec.js +30 -34
- package/ds-leftnavigation/LeftNavigation.keeping.items.visual.spec.js +2 -2
- package/ds-leftnavigation/LeftNavigation.keyboard.func.spec.js +34 -30
- package/ds-leftnavigation/LeftNavigation.states.func.spec.js +2 -2
- package/ds-leftnavigation/LeftNavigation.visual.spec.js +24 -24
- package/ds-leftnavigation/LeftNavigationCO.js +29 -47
- package/ds-page-layout/PageLayout.visual.spec.js +6 -3
- package/ds-page-layout/PageLayoutCO.js +0 -4
- package/ds-shuttle-v2/Dnd/DSShuttleV2.DnD.func.spec.js +66 -0
- package/ds-shuttle-v2/basic/DSShuttleV2.keyboard.func.spec.js +0 -22
- package/ds-shuttle-v2/drillingdown/DSShuttleV2.drilldown.kb.func.spec.js +0 -41
- package/ds-tabs/DSTabs.visual.spec.js +0 -33
- package/ds-tabs/DSTabsCO.js +4 -0
- package/ds-tabs/with-carousel/DSTabs.with-carousel.visual.spec.js +58 -0
- package/ds-treeview/DSTreeViewCO.js +2 -0
- package/ds-treeview/removeWidthMaxContentProp/TreeView.removeWidthMaxContent.visual.spec.js +16 -0
- package/package.json +119 -119
- package/ds-data-table-async/DSDataTable.smoke.spec.js +0 -322
|
@@ -35,28 +35,6 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
35
35
|
await expect(snapshot).toEqual(0);
|
|
36
36
|
});
|
|
37
37
|
});
|
|
38
|
-
describe('PUI-8840 - DSControlledRadio - Visual Test - ReadOnly', () => {
|
|
39
|
-
before('loading page', async () => {
|
|
40
|
-
const errorOnGo = await DSControlledRadioCO.readOnly.go();
|
|
41
|
-
if (errorOnGo) throw errorOnGo;
|
|
42
|
-
});
|
|
43
|
-
it('should display readonly radio styles correctly', async () => {
|
|
44
|
-
const radio = await DSControlledRadioCO.getRadioByIndex(0);
|
|
45
|
-
const radio2 = await DSControlledRadioCO.getRadioByIndex(1);
|
|
46
|
-
await radio.click();
|
|
47
|
-
await mouseOver(radio2);
|
|
48
|
-
const snapshot = await browser.checkSnapshot(DSControlledRadioCO.snapshotPath('radio-readonly'));
|
|
49
|
-
await expect(snapshot).toEqual(0);
|
|
50
|
-
});
|
|
51
|
-
it('should display readonly radio different styles correctly', async () => {
|
|
52
|
-
const radio = await DSControlledRadioCO.getRadioByIndex(0);
|
|
53
|
-
const radio2 = await DSControlledRadioCO.getRadioByIndex(1);
|
|
54
|
-
await radio2.click();
|
|
55
|
-
await mouseOver(radio);
|
|
56
|
-
const snapshot = await browser.checkSnapshot(DSControlledRadioCO.snapshotPath('radio-readonly-bis'));
|
|
57
|
-
await expect(snapshot).toEqual(0);
|
|
58
|
-
});
|
|
59
|
-
});
|
|
60
38
|
describe('PUI-8839 - DSControlledRadio - Visual Test - HasError', () => {
|
|
61
39
|
before('loading page', async () => {
|
|
62
40
|
const errorOnGo = await DSControlledRadioCO.hasError.go();
|
|
@@ -14,6 +14,8 @@ export default class DSControlledRadioCO extends PageObject {
|
|
|
14
14
|
|
|
15
15
|
static applyAriaDisabled = new Urlbuilder(PATH_E2E_RADIO, 'apply-aria-disabled-test');
|
|
16
16
|
|
|
17
|
+
static wrapLabel = new Urlbuilder(PATH_E2E_RADIO, 'wrap-label');
|
|
18
|
+
|
|
17
19
|
static async getRadio() {
|
|
18
20
|
return $('[data-testid="ds-radio"]');
|
|
19
21
|
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { axeCoreCheck } from '../../../helpers';
|
|
2
|
+
import DSControlledRadioCO from '../DSControlledRadioCO';
|
|
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-15631 - DSControlledRadio - readOnly - AxeCore Test', () => {
|
|
11
|
+
before('loading page', async () => {
|
|
12
|
+
const errorOnGo = await DSControlledRadioCO.readOnly.go();
|
|
13
|
+
if (errorOnGo) throw errorOnGo;
|
|
14
|
+
});
|
|
15
|
+
it('01: should display radio with readOnly and pass axe-core scann', async () => {
|
|
16
|
+
const radio = await DSControlledRadioCO.getRadioByIndex(1);
|
|
17
|
+
await radio.click();
|
|
18
|
+
const result = await axeCoreCheck();
|
|
19
|
+
expect(result.length).toBe(0);
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
}
|
package/ds-controlled-form/ds-controlled-radio/read-only/DSControlledRadio.readOnly.visual.spec.js
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Key } from 'webdriverio';
|
|
2
|
+
import DSControlledRadioCO from '../DSControlledRadioCO';
|
|
3
|
+
|
|
4
|
+
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
5
|
+
describe('PUI-15632 - [DSControlledRadio] readOnly prop - visual Test', () => {
|
|
6
|
+
before('loading page', async () => {
|
|
7
|
+
const errorOnGo = await DSControlledRadioCO.readOnly.go();
|
|
8
|
+
if (errorOnGo) throw errorOnGo;
|
|
9
|
+
});
|
|
10
|
+
it('01: the first readOnly radio should be focused', async () => {
|
|
11
|
+
await browser.eyesOpen();
|
|
12
|
+
const radio = await DSControlledRadioCO.getRadioByIndex(0);
|
|
13
|
+
await radio.click();
|
|
14
|
+
const snapshot = await browser.eyesCheckSnapshot(DSControlledRadioCO.snapshotPath('radio-readOnly-click'));
|
|
15
|
+
await expect(snapshot).toEqual(0);
|
|
16
|
+
});
|
|
17
|
+
it('02: the second readOnly radio should be focused', async () => {
|
|
18
|
+
await browser.eyesOpen();
|
|
19
|
+
await browser.keys(Key.ArrowDown);
|
|
20
|
+
const snapshot = await browser.eyesCheckSnapshot(DSControlledRadioCO.snapshotPath('radio-readOnly-kb-nav'));
|
|
21
|
+
await expect(snapshot).toEqual(0);
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
}
|
package/ds-controlled-form/ds-controlled-radio/wrapLabel/DSControlledRadio.wrapLabel.visual.spec.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import DSControlledRadioCO from '../DSControlledRadioCO';
|
|
2
|
+
|
|
3
|
+
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
4
|
+
describe('PUI-15710 - [DSControlledRadio] wrapLabel prop - visual Test', () => {
|
|
5
|
+
before('loading page', async () => {
|
|
6
|
+
const errorOnGo = await DSControlledRadioCO.wrapLabel.go();
|
|
7
|
+
if (errorOnGo) throw errorOnGo;
|
|
8
|
+
});
|
|
9
|
+
it('01: the first label should be wrapped', async () => {
|
|
10
|
+
await browser.eyesOpen();
|
|
11
|
+
const snapshot = await browser.eyesCheckSnapshot(DSControlledRadioCO.snapshotPath('radio-wrap-label'));
|
|
12
|
+
await expect(snapshot).toEqual(0);
|
|
13
|
+
});
|
|
14
|
+
});
|
|
15
|
+
}
|
|
@@ -28,6 +28,8 @@ export default class DSInputTextCO extends PageObject {
|
|
|
28
28
|
|
|
29
29
|
static readOnly = new Urlbuilder(PATH_E2E_CONTROLLEDINPUT, 'read-only-test');
|
|
30
30
|
|
|
31
|
+
static applyAriaDisabledOnChange = new Urlbuilder(PATH_E2E_CONTROLLEDINPUT, 'apply-aria-disabled-change');
|
|
32
|
+
|
|
31
33
|
static async getAutocompleteMenuList() {
|
|
32
34
|
return $('[data-testid="autocomplete-menu-list"]');
|
|
33
35
|
}
|
package/ds-controlled-form/ds-input-text/aria-disabled/DSInputText.aria-disabled.func.spec.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/* eslint-disable max-lines */
|
|
2
2
|
import DSInputTextCO from '../DSInputTextCO';
|
|
3
|
+
import { type } from '../../../helpers';
|
|
3
4
|
|
|
4
5
|
if (
|
|
5
6
|
(!browser.capabilities['ice:options'].isPhone &&
|
|
@@ -20,4 +21,22 @@ if (
|
|
|
20
21
|
await expect(caretValue).toBe('rgba(0,0,0,0)');
|
|
21
22
|
});
|
|
22
23
|
});
|
|
24
|
+
describe('PUI-15686 - [InputText] applyAriaDisabled - onChange - func test', () => {
|
|
25
|
+
before('loading page', async () => {
|
|
26
|
+
const errorOnGo = await DSInputTextCO.applyAriaDisabledOnChange.go();
|
|
27
|
+
if (errorOnGo) throw errorOnGo;
|
|
28
|
+
});
|
|
29
|
+
it('01: first aria-disabled Input should not allow to type', async () => {
|
|
30
|
+
const input1 = await DSInputTextCO.getInputTextByIndex(0);
|
|
31
|
+
await input1.click();
|
|
32
|
+
await type('This is a test');
|
|
33
|
+
await expect(input1).toHaveValue('');
|
|
34
|
+
});
|
|
35
|
+
it('02: second aria-disabled Input should not change the value', async () => {
|
|
36
|
+
const input1 = await DSInputTextCO.getInputTextByIndex(1);
|
|
37
|
+
await input1.click();
|
|
38
|
+
await type('This is a test');
|
|
39
|
+
await expect(input1).toHaveValue('Some Value');
|
|
40
|
+
});
|
|
41
|
+
});
|
|
23
42
|
}
|
|
@@ -36,7 +36,7 @@ export default class DataTableCO extends PageObject {
|
|
|
36
36
|
|
|
37
37
|
static filterableWithFilterBar = new Urlbuilder(PATH_E2E_DATATABLE, 'filtered-column-with-filter-bar');
|
|
38
38
|
|
|
39
|
-
static masterDatailMultiLevel = new Urlbuilder(
|
|
39
|
+
static masterDatailMultiLevel = new Urlbuilder(PATH_E2E_DATATABLE, 'master-detail-multi-level-test');
|
|
40
40
|
|
|
41
41
|
static exportCsv = new Urlbuilder(PATH_DATA_TABLE_ADVANCED, 'export-csv');
|
|
42
42
|
|
|
@@ -44,6 +44,8 @@ export default class DataTableCO extends PageObject {
|
|
|
44
44
|
|
|
45
45
|
static paginatedWithDetail = new Urlbuilder(PATH_DATA_TABLE, 'paginated-table-with-details');
|
|
46
46
|
|
|
47
|
+
static paginatedTable = new Urlbuilder(PATH_E2E_DATATABLE, 'paginated-table-test');
|
|
48
|
+
|
|
47
49
|
static performance = new Urlbuilder(PATH_DATA_TABLE_ADVANCED, 'performance');
|
|
48
50
|
|
|
49
51
|
static emptyState = new Urlbuilder(PATH_DATA_TABLE, 'empty-state');
|
|
@@ -144,6 +146,8 @@ export default class DataTableCO extends PageObject {
|
|
|
144
146
|
|
|
145
147
|
static sortWithHeaderGroups = new Urlbuilder(PATH_E2E_DATATABLE, 'pui-9362-sort-with-header-groups');
|
|
146
148
|
|
|
149
|
+
static multiPerfoHitTest = new Urlbuilder(PATH_E2E_DATATABLE, 'pui-15674-perfo-test');
|
|
150
|
+
|
|
147
151
|
static selectMultipleSticky = new Urlbuilder(PATH_DATA_TABLE, 'select-multiple-sticky');
|
|
148
152
|
|
|
149
153
|
static perPageScrolling = new Urlbuilder(PATH_E2E_DATATABLE, 'pui-9545-per-page-scrolling');
|
|
@@ -37,6 +37,8 @@ export default class HeaderCO extends PageObject {
|
|
|
37
37
|
|
|
38
38
|
static getHeaderWrapperByIndex = async (index = 0) => $$('[data-testid="ds-datatable-header-cell-wrapper"]')[index];
|
|
39
39
|
|
|
40
|
+
static getHeadersWrapper = async () => $('[data-testid="ds-datatable-head-wrapper"]');
|
|
41
|
+
|
|
40
42
|
static getResizeHandler = async (index) => $$('[data-testid="column"],[aria-label="Resize column"]')[index];
|
|
41
43
|
|
|
42
44
|
static getFilterBtnByIndex = async (index) => $$('[data-testid="data-table-filter-menu-button"] button')[index];
|
|
@@ -5,6 +5,10 @@ import { getElementByIndex } from '../helpers';
|
|
|
5
5
|
export default class PaginationNavCO extends PageObject {
|
|
6
6
|
static getPaginationNav = () => $('[data-testid="data-table-pagination-container"]');
|
|
7
7
|
|
|
8
|
+
static getPaginator = () => $('[data-testid="ds-pagination-paginator"]');
|
|
9
|
+
|
|
10
|
+
static getSeparatorByIndex = (index = 0) => $$('[data-testid="ds-pagination-separator"]')[index];
|
|
11
|
+
|
|
8
12
|
static getMenusTrigger = async () => $$('[data-testid="dropdown-menu-trigger-wrapper"]');
|
|
9
13
|
|
|
10
14
|
static getElemsPerPageMenu = async () => getElementByIndex(this.getMenusTrigger, 0);
|
|
@@ -4,6 +4,7 @@ import { Key } from 'webdriverio';
|
|
|
4
4
|
import DSDataTableCO from '../DSDataTableCO';
|
|
5
5
|
import { FilterBarCO, FiltersCO, RowCO } from '../components';
|
|
6
6
|
import { type } from '../../helpers';
|
|
7
|
+
import DSComboboxCO from '../../ds-controlled-form/ds-combobox/DSComboboxCO';
|
|
7
8
|
|
|
8
9
|
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
9
10
|
describe('PUI-9203 - DataTable, Filter, Creatable single select filter', () => {
|
|
@@ -18,10 +19,9 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
18
19
|
await expect(inputSingleSelect).toBeFocused();
|
|
19
20
|
});
|
|
20
21
|
it('02: start typing a valid value and filter options', async () => {
|
|
21
|
-
await FiltersCO.openFilterPopperByColumnName('name', 0);
|
|
22
22
|
await type('J');
|
|
23
|
-
const option1 = await
|
|
24
|
-
const option2 = await
|
|
23
|
+
const option1 = await DSComboboxCO.getOptionByIndex(0);
|
|
24
|
+
const option2 = await DSComboboxCO.getOptionByIndex(1);
|
|
25
25
|
await option1.waitForDisplayed();
|
|
26
26
|
await option2.waitForDisplayed();
|
|
27
27
|
await expect(option1).toHaveTextContaining(['Add:', 'J']);
|
|
@@ -29,7 +29,7 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
29
29
|
});
|
|
30
30
|
it('03: should create a new option', async () => {
|
|
31
31
|
await type('OHN');
|
|
32
|
-
await browser.keys(Key.ArrowDown);
|
|
32
|
+
// await browser.keys(Key.ArrowDown);
|
|
33
33
|
await browser.keys(Key.Enter);
|
|
34
34
|
const pill = await FilterBarCO.getPillByText('JOHN');
|
|
35
35
|
await expect(pill).toBeDisplayedInViewport();
|
|
@@ -39,7 +39,6 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
39
39
|
await pillCloseBtn.click();
|
|
40
40
|
await FiltersCO.openFilterPopperByColumnName('name', 0);
|
|
41
41
|
await type('John');
|
|
42
|
-
await browser.keys(Key.ArrowDown);
|
|
43
42
|
await browser.keys(Key.Enter);
|
|
44
43
|
const results = await RowCO.getRows();
|
|
45
44
|
const filteredNames = await DSDataTableCO.getAllColumnResults(results, 1);
|
|
@@ -59,10 +58,9 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
59
58
|
await expect(inputSingleSelect).toBeFocused();
|
|
60
59
|
});
|
|
61
60
|
it('02: start typing a valid value and filter options', async () => {
|
|
62
|
-
await FiltersCO.openFilterPopperByColumnName('position', 0);
|
|
63
61
|
await type('Re');
|
|
64
|
-
const option1 = await
|
|
65
|
-
const option2 = await
|
|
62
|
+
const option1 = await DSComboboxCO.getOptionByIndex(0);
|
|
63
|
+
const option2 = await DSComboboxCO.getOptionByIndex(1);
|
|
66
64
|
await option1.waitForDisplayed();
|
|
67
65
|
await option2.waitForDisplayed();
|
|
68
66
|
await expect(option1).toHaveTextContaining(['Add:', 'Re']);
|
|
@@ -70,13 +68,11 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
70
68
|
});
|
|
71
69
|
it('03: should create a new option', async () => {
|
|
72
70
|
await type('act');
|
|
73
|
-
await browser.keys(Key.ArrowDown);
|
|
74
71
|
await browser.keys(Key.Enter);
|
|
75
72
|
const pill = await FilterBarCO.getPillByText('React');
|
|
76
|
-
const menuItems = await
|
|
77
|
-
const textFirstItem = await menuItems[0];
|
|
73
|
+
const menuItems = await DSComboboxCO.getOptionByIndex(0);
|
|
78
74
|
await expect(pill).toBeDisplayedInViewport();
|
|
79
|
-
await expect(
|
|
75
|
+
await expect(menuItems).toHaveTextContaining('React');
|
|
80
76
|
});
|
|
81
77
|
it('04: type a valid value', async () => {
|
|
82
78
|
await type('React dev');
|
|
@@ -4,6 +4,7 @@ import { Key } from 'webdriverio';
|
|
|
4
4
|
import DSDataTableCO from '../DSDataTableCO';
|
|
5
5
|
import { FiltersCO } from '../components';
|
|
6
6
|
import { type } from '../../helpers';
|
|
7
|
+
import DSComboboxCO from '../../ds-controlled-form/ds-combobox/DSComboboxCO';
|
|
7
8
|
|
|
8
9
|
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
9
10
|
describe('PUI-9206 - DataTable, Creatable single select filter - focus after clear input', () => {
|
|
@@ -16,8 +17,8 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
16
17
|
await browser.eyesOpen();
|
|
17
18
|
await FiltersCO.openFilterPopperByColumnName('name', 0);
|
|
18
19
|
await type('J');
|
|
19
|
-
const option1 = await
|
|
20
|
-
const option2 = await
|
|
20
|
+
const option1 = await DSComboboxCO.getOptionByIndex(0);
|
|
21
|
+
const option2 = await DSComboboxCO.getOptionByIndex(1);
|
|
21
22
|
await option1.waitForDisplayed();
|
|
22
23
|
await option2.waitForDisplayed();
|
|
23
24
|
const snapshot = await browser.eyesCheckSnapshot(
|
|
@@ -42,8 +43,8 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
42
43
|
await browser.eyesOpen();
|
|
43
44
|
await FiltersCO.openFilterPopperByColumnName('position', 0);
|
|
44
45
|
await type('Re');
|
|
45
|
-
const option1 = await
|
|
46
|
-
const option2 = await
|
|
46
|
+
const option1 = await DSComboboxCO.getOptionByIndex(0);
|
|
47
|
+
const option2 = await DSComboboxCO.getOptionByIndex(1);
|
|
47
48
|
await option1.waitForDisplayed();
|
|
48
49
|
await option2.waitForDisplayed();
|
|
49
50
|
const snapshot = await browser.eyesCheckSnapshot(
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
/* eslint-disable max-lines */
|
|
3
3
|
import DSDataTableCO from '../DSDataTableCO';
|
|
4
4
|
import { FilterBarCO, FiltersCO } from '../components';
|
|
5
|
+
import DSComboboxCO from '../../ds-controlled-form/ds-combobox/DSComboboxCO';
|
|
5
6
|
|
|
6
7
|
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
7
8
|
describe('PUI-11118 - DataTable: Filter:: empty value - single & multi select - visual', () => {
|
|
@@ -13,15 +14,15 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
13
14
|
it('01: should display empty option on single select - visual', async () => {
|
|
14
15
|
await browser.eyesOpen();
|
|
15
16
|
await FiltersCO.openFilterPopperByColumnName('name');
|
|
16
|
-
const emptyOption = await
|
|
17
|
+
const emptyOption = await DSComboboxCO.getOptionByIndex(2);
|
|
17
18
|
await emptyOption.waitForDisplayed();
|
|
18
19
|
const snapshot = await browser.eyesCheckSnapshot(DSDataTableCO.snapshotPath('single-select-open-empty-option'));
|
|
19
20
|
await expect(snapshot).toEqual(0);
|
|
20
21
|
});
|
|
21
22
|
it('02: should display empty option selected on single select - visual', async () => {
|
|
22
23
|
await browser.eyesOpen();
|
|
23
|
-
await
|
|
24
|
-
|
|
24
|
+
const emptyOption = await DSComboboxCO.getOptionByIndex(2);
|
|
25
|
+
await emptyOption.waitForDisplayed();
|
|
25
26
|
await emptyOption.click();
|
|
26
27
|
const pillEmptyVal = await FilterBarCO.findPill('Name', '(Empty)');
|
|
27
28
|
await pillEmptyVal.waitForDisplayed();
|
|
@@ -33,15 +34,15 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
33
34
|
it('03: should display empty option on multi select - visual', async () => {
|
|
34
35
|
await browser.eyesOpen();
|
|
35
36
|
await FiltersCO.openFilterPopperByColumnName('position');
|
|
36
|
-
const emptyOption = await
|
|
37
|
+
const emptyOption = await DSComboboxCO.getOptionByIndex(5);
|
|
37
38
|
await emptyOption.waitForDisplayed();
|
|
38
39
|
const snapshot = await browser.eyesCheckSnapshot(DSDataTableCO.snapshotPath('multi-select-open-empty-option'));
|
|
39
40
|
await expect(snapshot).toEqual(0);
|
|
40
41
|
});
|
|
41
42
|
it('04: should display empty option selected on multi select - visual', async () => {
|
|
42
43
|
await browser.eyesOpen();
|
|
43
|
-
await
|
|
44
|
-
|
|
44
|
+
const emptyOption = await DSComboboxCO.getOptionByIndex(5);
|
|
45
|
+
await emptyOption.waitForDisplayed();
|
|
45
46
|
await emptyOption.click();
|
|
46
47
|
const pillEmptyVal = await FilterBarCO.findPill('Position', '(Empty)');
|
|
47
48
|
await pillEmptyVal.waitForDisplayed();
|
|
@@ -62,8 +63,8 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
62
63
|
});
|
|
63
64
|
it('06: should display empty option selected on multi select creatable - visual', async () => {
|
|
64
65
|
await browser.eyesOpen();
|
|
65
|
-
await
|
|
66
|
-
|
|
66
|
+
const emptyOption = await DSComboboxCO.getOptionByIndex(2);
|
|
67
|
+
await emptyOption.waitForDisplayed();
|
|
67
68
|
await emptyOption.click();
|
|
68
69
|
const pillEmptyVal = await FilterBarCO.findPill('Country', '(Empty)');
|
|
69
70
|
await pillEmptyVal.waitForDisplayed();
|
|
@@ -6,6 +6,7 @@ import { Key } from 'webdriverio';
|
|
|
6
6
|
import DSDataTableCO from '../DSDataTableCO';
|
|
7
7
|
import { FiltersCO, FilterBarCO } from '../components';
|
|
8
8
|
import { type } from '../../helpers';
|
|
9
|
+
import DSComboboxCO from '../../ds-controlled-form/ds-combobox/DSComboboxCO';
|
|
9
10
|
|
|
10
11
|
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
11
12
|
describe('PUI-6964 - DataTable, Filter, Date range - Visual Test', () => {
|
|
@@ -169,9 +170,9 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
169
170
|
it('01: filterbar should be displayed correctly', async () => {
|
|
170
171
|
await browser.eyesOpen();
|
|
171
172
|
await FiltersCO.openFilterPopperByColumnName('id');
|
|
172
|
-
await (await
|
|
173
|
+
await (await await DSComboboxCO.getOptionByIndex(0)).click();
|
|
173
174
|
await FiltersCO.openFilterPopperByColumnName('name');
|
|
174
|
-
await (await
|
|
175
|
+
await (await await DSComboboxCO.getOptionByIndex(0)).click();
|
|
175
176
|
await FiltersCO.openFilterPopperByColumnName('position');
|
|
176
177
|
await (await FiltersCO.getFilterMultiSelectMenuItem(0)).click();
|
|
177
178
|
await (await FiltersCO.getFilterMultiSelectMenuItem(1)).click();
|
|
@@ -173,4 +173,27 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
173
173
|
await expect(elemsPerPage).toBeFocused();
|
|
174
174
|
});
|
|
175
175
|
});
|
|
176
|
+
describe('PUI-15714 - DataTable, Pagination Table, Custom IDs - Func', async () => {
|
|
177
|
+
before('loading page', async () => {
|
|
178
|
+
const errorOnGo = await DSDataTableCO.paginatedTable.go();
|
|
179
|
+
if (errorOnGo) throw errorOnGo;
|
|
180
|
+
await DSDataTableCO.waitForDataTable();
|
|
181
|
+
});
|
|
182
|
+
it('01: should have pagination (and headers wrapper) with custom ids', async () => {
|
|
183
|
+
const container = await PaginationNavCO.getPaginationNav();
|
|
184
|
+
const elemsPerPage = await PaginationNavCO.getElemsPerPageBtn();
|
|
185
|
+
const prevBtn = await PaginationNavCO.getPrevPageBt();
|
|
186
|
+
const nextBtn = await PaginationNavCO.getNextPageBt();
|
|
187
|
+
const separator = await PaginationNavCO.getSeparatorByIndex();
|
|
188
|
+
const paginator = await PaginationNavCO.getPaginator();
|
|
189
|
+
const headersContainer = await HeaderCO.getHeadersWrapper();
|
|
190
|
+
await expect(headersContainer).toHaveAttribute('id', 'im header wrapper');
|
|
191
|
+
await expect(container).toHaveAttribute('id', 'im pag container');
|
|
192
|
+
await expect(elemsPerPage).toHaveAttribute('id', 'im perpage selector');
|
|
193
|
+
await expect(prevBtn).toHaveAttribute('id', 'im prev btn');
|
|
194
|
+
await expect(nextBtn).toHaveAttribute('id', 'im next btn');
|
|
195
|
+
await expect(separator).toHaveAttribute('id', 'im separator');
|
|
196
|
+
await expect(paginator).toHaveAttribute('id', 'im paginator');
|
|
197
|
+
});
|
|
198
|
+
});
|
|
176
199
|
}
|
|
@@ -123,4 +123,51 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
123
123
|
await expect(checkBoxRow5).toBe('false');
|
|
124
124
|
});
|
|
125
125
|
});
|
|
126
|
+
|
|
127
|
+
describe('PUI-15743 - DataTable, Row selection with shift + space - Performance', () => {
|
|
128
|
+
before('loading page', async () => {
|
|
129
|
+
const errorOnGo = await DSDataTableCO.multiPerfoHitTest.go();
|
|
130
|
+
if (errorOnGo) throw errorOnGo;
|
|
131
|
+
await DSDataTableCO.waitForDataTable();
|
|
132
|
+
});
|
|
133
|
+
it('01: should select all the rows in the range except the ones that are disabled', async () => {
|
|
134
|
+
await tabStops(10);
|
|
135
|
+
await browser.keys(Key.Space);
|
|
136
|
+
await browser.pause(200);
|
|
137
|
+
await browser.keys([Key.Shift, Key.ArrowDown]);
|
|
138
|
+
await browser.keys([Key.Shift, Key.ArrowDown]);
|
|
139
|
+
await browser.keys([Key.Shift, Key.ArrowDown]);
|
|
140
|
+
await browser.keys([Key.Shift, Key.ArrowDown]);
|
|
141
|
+
await browser.keys([Key.Shift, Key.Space]);
|
|
142
|
+
const checkBoxRow2 = await (await RowCO.getRowCheckBoxByIndex(1)).getAttribute('aria-checked');
|
|
143
|
+
const checkBoxRow3 = await (await RowCO.getRowCheckBoxByIndex(2)).getAttribute('aria-checked');
|
|
144
|
+
const checkBoxRow4 = await (await RowCO.getRowCheckBoxByIndex(3)).getAttribute('aria-checked');
|
|
145
|
+
const checkBoxRow5 = await (await RowCO.getRowCheckBoxByIndex(4)).getAttribute('aria-checked');
|
|
146
|
+
const checkBoxRow6 = await (await RowCO.getRowCheckBoxByIndex(5)).getAttribute('aria-checked');
|
|
147
|
+
await expect(checkBoxRow2).toBe('true');
|
|
148
|
+
await expect(checkBoxRow3).toBe('true');
|
|
149
|
+
await expect(checkBoxRow4).toBe('false');
|
|
150
|
+
await expect(checkBoxRow5).toBe('true');
|
|
151
|
+
await expect(checkBoxRow6).toBe('true');
|
|
152
|
+
});
|
|
153
|
+
it('02: should unselect all the rows in the range', async () => {
|
|
154
|
+
await browser.keys(Key.Space);
|
|
155
|
+
await browser.pause(200);
|
|
156
|
+
await browser.keys([Key.Shift, Key.ArrowUp]);
|
|
157
|
+
await browser.keys([Key.Shift, Key.ArrowUp]);
|
|
158
|
+
await browser.keys([Key.Shift, Key.ArrowUp]);
|
|
159
|
+
await browser.keys([Key.Shift, Key.ArrowUp]);
|
|
160
|
+
await browser.keys([Key.Shift, Key.Space]);
|
|
161
|
+
const checkBoxRow2 = await (await RowCO.getRowCheckBoxByIndex(1)).getAttribute('aria-checked');
|
|
162
|
+
const checkBoxRow3 = await (await RowCO.getRowCheckBoxByIndex(2)).getAttribute('aria-checked');
|
|
163
|
+
const checkBoxRow4 = await (await RowCO.getRowCheckBoxByIndex(3)).getAttribute('aria-checked');
|
|
164
|
+
const checkBoxRow5 = await (await RowCO.getRowCheckBoxByIndex(4)).getAttribute('aria-checked');
|
|
165
|
+
const checkBoxRow6 = await (await RowCO.getRowCheckBoxByIndex(4)).getAttribute('aria-checked');
|
|
166
|
+
await expect(checkBoxRow2).toBe('false');
|
|
167
|
+
await expect(checkBoxRow3).toBe('false');
|
|
168
|
+
await expect(checkBoxRow4).toBe('false');
|
|
169
|
+
await expect(checkBoxRow5).toBe('false');
|
|
170
|
+
await expect(checkBoxRow6).toBe('false');
|
|
171
|
+
});
|
|
172
|
+
});
|
|
126
173
|
}
|
|
@@ -8,6 +8,8 @@ export default class DSFloatingContextCO extends PageObject {
|
|
|
8
8
|
|
|
9
9
|
static customOffsetURL = new Urlbuilder(PATH_E2E_FLOATING_CONTEXT, 'custom-offsets-test');
|
|
10
10
|
|
|
11
|
+
static slotsURL = new Urlbuilder(PATH_E2E_FLOATING_CONTEXT, 'slots-test');
|
|
12
|
+
|
|
11
13
|
static async getFloatingContextWrapper() {
|
|
12
14
|
return $('[data-testid="ds-floating-wrapper-root"]');
|
|
13
15
|
}
|
|
@@ -16,6 +18,18 @@ export default class DSFloatingContextCO extends PageObject {
|
|
|
16
18
|
return $('[data-testid="ds-floatingwrapper-content"]');
|
|
17
19
|
}
|
|
18
20
|
|
|
21
|
+
static async getFloatingContextArrowSlot() {
|
|
22
|
+
return $('[data-dimsum-slot="dsFloatingwrapperArrow"]');
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
static async getFloatingContextContentSlot() {
|
|
26
|
+
return $('[data-dimsum-slot="dsFloatingwrapperContent"]');
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
static async getFloatingContextRootSlot() {
|
|
30
|
+
return $('[data-dimsum-slot="dsFloatingwrapperRoot"]');
|
|
31
|
+
}
|
|
32
|
+
|
|
19
33
|
static snapshotPath(example = 'basic') {
|
|
20
34
|
return PageObject.getSnapshotPathBuilder('DSFloatingContext', example, 'ds-floating-context');
|
|
21
35
|
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/* eslint-disable max-lines */
|
|
2
|
+
import DSFloatingContextCO from '../DSFloatingContextCO';
|
|
3
|
+
import { axeCoreCheck } from '../../helpers';
|
|
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-15675 - DSFloatingContextCO:: slots - axe-core test', () => {
|
|
12
|
+
before('loading page', async () => {
|
|
13
|
+
const errorOnGo = await DSFloatingContextCO.slotsURL.go();
|
|
14
|
+
if (errorOnGo) throw errorOnGo;
|
|
15
|
+
});
|
|
16
|
+
it('01: should display a custom Floating Context and pass axe-core', async () => {
|
|
17
|
+
const tooltip = await DSFloatingContextCO.getFloatingContextContentSlot();
|
|
18
|
+
await tooltip.waitForDisplayed();
|
|
19
|
+
const result = await axeCoreCheck();
|
|
20
|
+
expect(result.length).toBe(0);
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import DSFloatingContextCO from '../DSFloatingContextCO';
|
|
2
|
+
|
|
3
|
+
if (
|
|
4
|
+
(!browser.capabilities['ice:options'].isPhone &&
|
|
5
|
+
!browser.capabilities['ice:options'].isTablet &&
|
|
6
|
+
browser.capabilities.browserName === 'chrome') ||
|
|
7
|
+
browser.capabilities.browserName === 'Chrome'
|
|
8
|
+
) {
|
|
9
|
+
describe('PUI-15676 - DSFloatingContextCO:: slots - globalAttributes test', () => {
|
|
10
|
+
before('loading page', async () => {
|
|
11
|
+
const errorOnGo = await DSFloatingContextCO.slotsURL.go();
|
|
12
|
+
if (errorOnGo) throw errorOnGo;
|
|
13
|
+
});
|
|
14
|
+
it('01: should have custom data-*', async () => {
|
|
15
|
+
const contentSlot = await DSFloatingContextCO.getFloatingContextContentSlot();
|
|
16
|
+
const rootSlot = await DSFloatingContextCO.getFloatingContextRootSlot();
|
|
17
|
+
|
|
18
|
+
await expect(contentSlot).toHaveAttribute('data-testid', 'floating-content-custom-data-testid');
|
|
19
|
+
await expect(rootSlot).toHaveAttribute('data-testid', 'floating-root-custom-data-testid');
|
|
20
|
+
});
|
|
21
|
+
it('02: should have custom aria-*', async () => {
|
|
22
|
+
// const arrowSlot = DSFloatingContextCO.getFloatingContextArrowSlot();
|
|
23
|
+
const contentSlot = await DSFloatingContextCO.getFloatingContextContentSlot();
|
|
24
|
+
const rootSlot = await DSFloatingContextCO.getFloatingContextRootSlot();
|
|
25
|
+
|
|
26
|
+
// await expect(arrowSlot).toHaveAttribute('aria-label', 'arrow-custom-aria-label');
|
|
27
|
+
await expect(contentSlot).toHaveAttribute('aria-label', 'content-custom-aria-label');
|
|
28
|
+
await expect(rootSlot).toHaveAttribute('aria-label', 'root-custom-aria-label');
|
|
29
|
+
});
|
|
30
|
+
it('03: should have custom global attributes', async () => {
|
|
31
|
+
const contentSlot = await DSFloatingContextCO.getFloatingContextContentSlot();
|
|
32
|
+
const rootSlot = await DSFloatingContextCO.getFloatingContextRootSlot();
|
|
33
|
+
const zIndexRoot = await rootSlot.getCSSProperty('z-index');
|
|
34
|
+
|
|
35
|
+
await expect(contentSlot).toHaveAttribute('id', 'floating-content-id');
|
|
36
|
+
await expect(rootSlot).toHaveAttribute('id', 'floating-root-id');
|
|
37
|
+
await expect(rootSlot).toHaveAttribute('role', 'tooltip');
|
|
38
|
+
await expect(zIndexRoot.value).toEqual(5000);
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/* eslint-disable wdio/no-pause */
|
|
2
|
+
import DSFloatingContextCO from '../DSFloatingContextCO';
|
|
3
|
+
|
|
4
|
+
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
5
|
+
describe('PUI-15677 - DSFloatingContext:: slots - visual test', () => {
|
|
6
|
+
before('loading page', async () => {
|
|
7
|
+
const errorOnGo = await DSFloatingContextCO.slotsURL.go();
|
|
8
|
+
if (errorOnGo) throw errorOnGo;
|
|
9
|
+
});
|
|
10
|
+
it('01: should display a custom Floating Context', async () => {
|
|
11
|
+
await browser.eyesOpen();
|
|
12
|
+
const tooltip = await DSFloatingContextCO.getFloatingContextRootSlot();
|
|
13
|
+
await tooltip.waitForDisplayed();
|
|
14
|
+
const snapshot = await browser.eyesCheckSnapshot(DSFloatingContextCO.snapshotPath('floating-context-slots'));
|
|
15
|
+
await expect(snapshot).toEqual(0);
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
}
|
|
@@ -10,6 +10,8 @@ export default class DSComboboxMultiCO extends PageObject {
|
|
|
10
10
|
|
|
11
11
|
static hundredAndOneOptions = new Urlbuilder(PATH_E2E_COMBOBOX_MULTI, 'hundred-and-one-options-test');
|
|
12
12
|
|
|
13
|
+
static readOnlyWithMenuOpenable = new Urlbuilder(PATH_E2E_COMBOBOX_MULTI, 'read-only-with-menu-openable-test');
|
|
14
|
+
|
|
13
15
|
// COMBOBOX - INPUT
|
|
14
16
|
static async getCombobox() {
|
|
15
17
|
return $('[data-testid="combobox-container"]');
|
|
@@ -10,13 +10,13 @@ if (
|
|
|
10
10
|
) {
|
|
11
11
|
describe('PUI-15028 - ComboboxMulti:: readOnly - axe-core test', () => {
|
|
12
12
|
before('loading page', async () => {
|
|
13
|
-
const errorOnGo = await DSComboboxMultiCO.
|
|
13
|
+
const errorOnGo = await DSComboboxMultiCO.readOnlyWithMenuOpenable.go();
|
|
14
14
|
if (errorOnGo) throw errorOnGo;
|
|
15
15
|
});
|
|
16
16
|
it('01: should display a combobox multi with readOnly and pass axe-core scan', async () => {
|
|
17
17
|
const combobox = await DSComboboxMultiCO.getCombobox();
|
|
18
18
|
await combobox.click();
|
|
19
|
-
const result = await axeCoreCheck();
|
|
19
|
+
const result = await axeCoreCheck({ extraDisabledRules: ['scrollable-region-focusable'] });
|
|
20
20
|
await expect(result.length).toBe(0);
|
|
21
21
|
});
|
|
22
22
|
});
|