dimsum-e2e-tests 3.70.0-next.2 → 3.70.0-next.4

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.
Files changed (33) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/ds-data-table-async/components/HeaderCO.js +22 -10
  3. package/ds-dialog/DSDialog.visual.spec.js +16 -31
  4. package/ds-dialog/DSDialogCO.js +58 -0
  5. package/ds-dialog/alert-dialog/DSDialog.alert-dialog-critical.axe-core.func.spec.js +27 -0
  6. package/ds-dialog/alert-dialog/DSDialog.alert-dialog-critical.func.spec.js +56 -0
  7. package/ds-dialog/alert-dialog/DSDialog.alert-dialog-critical.visual.spec.js +20 -0
  8. package/ds-dialog/alert-dialog/DSDialog.alert-dialog-dismissible.axe-core.func.spec.js +25 -0
  9. package/ds-dialog/alert-dialog/DSDialog.alert-dialog-dismissible.func.spec.js +52 -0
  10. package/ds-dialog/alert-dialog/DSDialog.alert-dialog-dismissible.visual.spec.js +20 -0
  11. package/ds-dialog/axe-core/DSDialog.accessible-form.axe-core.func.spec.js +25 -0
  12. package/ds-dialog/axe-core/DSDialog.basic.axe-core.func.spec.js +25 -0
  13. package/ds-dialog/axe-core/DSDialog.centered.axe-core.func.spec.js +25 -0
  14. package/ds-dialog/axe-core/DSDialog.decision.axe-core.func.spec.js +57 -0
  15. package/ds-dialog/axe-core/DSDialog.long-body.axe-core.func.spec.js +25 -0
  16. package/ds-dialog/axe-core/DSDialog.warning.axe-core.func.spec.js +24 -0
  17. package/ds-dialog/axe-core/DSDialog.wizard.axe-core.func.spec.js +28 -0
  18. package/ds-dialog/click-outside/DSDialog.click-outside.func.spec.js +31 -0
  19. package/ds-dialog/esc-close/DSDialog.esc-close.func.spec.js +31 -0
  20. package/ds-dialog/flexible-heading-level/DSDialog.flexible-heading-level.axe-core.func.spec.js +46 -0
  21. package/ds-dialog/flexible-heading-level/DSDialog.flexible-heading-level.func.spec.js +50 -0
  22. package/ds-dialog/form-dialog-datepicker/DSDialog.form-datepicker.axe-core.func.spec.js +25 -0
  23. package/ds-dialog/form-dialog-datepicker/DSDialog.form-datepicker.visual.spec.js +37 -0
  24. package/ds-dialog/single-button-footer/DSDialog.single-button-footer.axe-core.func.spec.js +25 -0
  25. package/ds-dialog/single-button-footer/DSDialog.single-button-footer.visual.spec.js +20 -0
  26. package/ds-dialog/size-variants/DSDialog.size-variants.visual.spec.js +116 -0
  27. package/ds-global-header/GlobalHeader.axe-core.func.spec.js +30 -0
  28. package/ds-global-header/GlobalHeader.visual.spec.js +31 -0
  29. package/ds-tabs/DSTabs.visual.spec.js +1 -2
  30. package/ds-tabs/DSTabsCO.js +2 -2
  31. package/ds-tabs/with-carousel/DSTabs.with-carousel.func.spec.js +22 -7
  32. package/ds-tabs/with-carousel/DSTabs.with-carousel.visual.spec.js +9 -9
  33. package/package.json +150 -151
@@ -0,0 +1,57 @@
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-18392 - DSDialog:: Decision dialog discard/save -Axe-Core', () => {
11
+ before('loading page', async () => {
12
+ const errorOnGo = await DSDialog.decisionURL.go();
13
+ if (errorOnGo) throw errorOnGo;
14
+ });
15
+
16
+ it('01: should pass axe-core scan for discard/save variant', async () => {
17
+ const triggerBtn = await DSDialog.getTriggerBtnByIndex(0);
18
+ await triggerBtn.click();
19
+ const dialog = await DSDialog.getDialog();
20
+ await dialog.waitForDisplayed();
21
+ const result = await axeCoreCheck();
22
+ expect(result.length).toBe(0);
23
+ });
24
+ });
25
+
26
+ describe('PUI-18393 - DSDialog:: Decision dialog close/discard/save -Axe-Core', () => {
27
+ before('loading page', async () => {
28
+ const errorOnGo = await DSDialog.decisionURL.go();
29
+ if (errorOnGo) throw errorOnGo;
30
+ });
31
+
32
+ it('01: should pass axe-core scan for close/discard/save variant', async () => {
33
+ const triggerBtn = await DSDialog.getTriggerBtnByIndex(1);
34
+ await triggerBtn.click();
35
+ const dialog = await DSDialog.getDialog();
36
+ await dialog.waitForDisplayed();
37
+ const result = await axeCoreCheck();
38
+ expect(result.length).toBe(0);
39
+ });
40
+ });
41
+
42
+ describe('PUI-18394 - DSDialog:: Decision dialog close/save -Axe-Core', () => {
43
+ before('loading page', async () => {
44
+ const errorOnGo = await DSDialog.decisionURL.go();
45
+ if (errorOnGo) throw errorOnGo;
46
+ });
47
+
48
+ it('01: should pass axe-core scan for close/save variant', async () => {
49
+ const triggerBtn = await DSDialog.getTriggerBtnByIndex(2);
50
+ await triggerBtn.click();
51
+ const dialog = await DSDialog.getDialog();
52
+ await dialog.waitForDisplayed();
53
+ const result = await axeCoreCheck();
54
+ expect(result.length).toBe(0);
55
+ });
56
+ });
57
+ }
@@ -0,0 +1,25 @@
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-18395 - DSDialog:: Long body content -Axe-Core', () => {
11
+ before('loading page', async () => {
12
+ const errorOnGo = await DSDialog.longBodyContent.go();
13
+ if (errorOnGo) throw errorOnGo;
14
+ });
15
+
16
+ it('01: should pass axe-core scan', async () => {
17
+ const triggerBtn = await DSDialog.getTriggerBtn();
18
+ await triggerBtn.click();
19
+ const dialog = await DSDialog.getDialog();
20
+ await dialog.waitForDisplayed();
21
+ const result = await axeCoreCheck();
22
+ expect(result.length).toBe(0);
23
+ });
24
+ });
25
+ }
@@ -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
+ }
@@ -0,0 +1,28 @@
1
+ import DSDialog from '../DSDialogCO';
2
+ import DSWizardCO from '../../ds-wizard/DSWizardCO';
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-18396 - DSDialog:: Wizard dialog -Axe-Core', () => {
12
+ before('loading page', async () => {
13
+ const errorOnGo = await DSDialog.wizardURL.go();
14
+ if (errorOnGo) throw errorOnGo;
15
+ });
16
+
17
+ it('01: should pass axe-core scan', async () => {
18
+ const triggerBtn = await DSDialog.getTriggerBtn();
19
+ await triggerBtn.click();
20
+ const dialog = await DSDialog.getDialog();
21
+ await dialog.waitForDisplayed();
22
+ const step1 = await DSWizardCO.getStep(1);
23
+ await step1.waitForDisplayed();
24
+ const result = await axeCoreCheck();
25
+ expect(result.length).toBe(0);
26
+ });
27
+ });
28
+ }
@@ -0,0 +1,31 @@
1
+ import DSDialog from '../DSDialogCO';
2
+
3
+ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
4
+ // Tests for click-outside close behavior (onClickOutside callback)
5
+ describe('PUI-18397 - DSDialog:: click outside close -Func', () => {
6
+ before('loading page', async () => {
7
+ const errorOnGo = await DSDialog.clickOutsideURL.go();
8
+ if (errorOnGo) throw errorOnGo;
9
+ });
10
+
11
+ it('01: should open dialog after clicking trigger', async () => {
12
+ const triggerBtn = await DSDialog.getTriggerBtn();
13
+ await triggerBtn.click();
14
+ const dialog = await DSDialog.getDialog();
15
+ await dialog.waitForDisplayed();
16
+ await expect(dialog).toBeDisplayedInViewport();
17
+ });
18
+
19
+ it('02: should close dialog on click outside', async () => {
20
+ const background = await DSDialog.getDialogBackground();
21
+ await background.click({ x: 10, y: 10 });
22
+ const dialog = await DSDialog.getDialog();
23
+ await expect(dialog).not.toBeDisplayed();
24
+ });
25
+
26
+ it('03: should return focus to trigger after close', async () => {
27
+ const triggerBtn = await DSDialog.getTriggerBtn();
28
+ await expect(triggerBtn).toBeFocused();
29
+ });
30
+ });
31
+ }
@@ -0,0 +1,31 @@
1
+ import { Key } from 'webdriverio';
2
+ import DSDialog from '../DSDialogCO';
3
+
4
+ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
5
+ // Tests for ESC key close behavior (onClose callback)
6
+ describe('PUI-18382 - DSDialog:: ESC key close -Func', () => {
7
+ before('loading page', async () => {
8
+ const errorOnGo = await DSDialog.escCloseURL.go();
9
+ if (errorOnGo) throw errorOnGo;
10
+ });
11
+
12
+ it('01: should open dialog after clicking trigger', async () => {
13
+ const triggerBtn = await DSDialog.getTriggerBtn();
14
+ await triggerBtn.click();
15
+ const dialog = await DSDialog.getDialog();
16
+ await dialog.waitForDisplayed();
17
+ await expect(dialog).toBeDisplayedInViewport();
18
+ });
19
+
20
+ it('02: should close dialog on ESC key press', async () => {
21
+ await browser.keys(Key.Escape);
22
+ const dialog = await DSDialog.getDialog();
23
+ await expect(dialog).not.toBeDisplayed();
24
+ });
25
+
26
+ it('03: should return focus to trigger after ESC close', async () => {
27
+ const triggerBtn = await DSDialog.getTriggerBtn();
28
+ await expect(triggerBtn).toBeFocused();
29
+ });
30
+ });
31
+ }
@@ -0,0 +1,46 @@
1
+ import DSDialogCO 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-18398 - DSDialog:: flexible heading level - Axe-Core', () => {
11
+ beforeEach(async () => {
12
+ const errorOnGo = await DSDialogCO.flexibleHeadingLevelURL.go();
13
+ if (errorOnGo) throw errorOnGo;
14
+ });
15
+
16
+ it('01: should have no accessibility violations with h2 title', async () => {
17
+ const triggerBtn = await DSDialogCO.getOpenDialogBtnByTestId('open-dialog-h2-button');
18
+ await triggerBtn.click();
19
+ const dialog = await DSDialogCO.getDialog();
20
+ await dialog.waitForDisplayed();
21
+
22
+ const result = await axeCoreCheck();
23
+ expect(result.length).toBe(0);
24
+ });
25
+
26
+ it('02: should have no accessibility violations with default h3 title', async () => {
27
+ const triggerBtn = await DSDialogCO.getOpenDialogBtnByTestId('open-dialog-h3-button');
28
+ await triggerBtn.click();
29
+ const dialog = await DSDialogCO.getDialog();
30
+ await dialog.waitForDisplayed();
31
+
32
+ const result = await axeCoreCheck();
33
+ expect(result.length).toBe(0);
34
+ });
35
+
36
+ it('03: should have no accessibility violations with h4 title', async () => {
37
+ const triggerBtn = await DSDialogCO.getOpenDialogBtnByTestId('open-dialog-h4-button');
38
+ await triggerBtn.click();
39
+ const dialog = await DSDialogCO.getDialog();
40
+ await dialog.waitForDisplayed();
41
+
42
+ const result = await axeCoreCheck();
43
+ expect(result.length).toBe(0);
44
+ });
45
+ });
46
+ }
@@ -0,0 +1,50 @@
1
+ import DSDialogCO from '../DSDialogCO';
2
+
3
+ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
4
+ describe('PUI-18399 - DSDialog:: flexible heading level - Func', () => {
5
+ before('loading page', async () => {
6
+ const errorOnGo = await DSDialogCO.flexibleHeadingLevelURL.go();
7
+ if (errorOnGo) throw errorOnGo;
8
+ });
9
+
10
+ afterEach(async () => {
11
+ await browser.keys('Escape');
12
+ });
13
+
14
+ it('01: should render DSDialogTitle as h2 when as="h2" is passed', async () => {
15
+ const triggerBtn = await DSDialogCO.getOpenDialogBtnByTestId('open-dialog-h2-button');
16
+ await triggerBtn.click();
17
+ const dialog = await DSDialogCO.getDialog();
18
+ await dialog.waitForDisplayed();
19
+
20
+ const title = await DSDialogCO.getDialogTitleByTestId('dialog-title-h2');
21
+ await expect(title).toBeExisting();
22
+ await expect((await title.getTagName()).toLowerCase()).toBe('h2');
23
+ await expect(title).toHaveText('Dialog title as h2');
24
+ });
25
+
26
+ it('02: should render DSDialogTitle as h3 by default', async () => {
27
+ const triggerBtn = await DSDialogCO.getOpenDialogBtnByTestId('open-dialog-h3-button');
28
+ await triggerBtn.click();
29
+ const dialog = await DSDialogCO.getDialog();
30
+ await dialog.waitForDisplayed();
31
+
32
+ const title = await DSDialogCO.getDialogTitleByTestId('dialog-title-h3');
33
+ await expect(title).toBeExisting();
34
+ await expect((await title.getTagName()).toLowerCase()).toBe('h3');
35
+ await expect(title).toHaveText('Dialog title as h3 (default)');
36
+ });
37
+
38
+ it('03: should render DSDialogTitle as h4 when as="h4" is passed', async () => {
39
+ const triggerBtn = await DSDialogCO.getOpenDialogBtnByTestId('open-dialog-h4-button');
40
+ await triggerBtn.click();
41
+ const dialog = await DSDialogCO.getDialog();
42
+ await dialog.waitForDisplayed();
43
+
44
+ const title = await DSDialogCO.getDialogTitleByTestId('dialog-title-h4');
45
+ await expect(title).toBeExisting();
46
+ await expect((await title.getTagName()).toLowerCase()).toBe('h4');
47
+ await expect(title).toHaveText('Dialog title as h4');
48
+ });
49
+ });
50
+ }
@@ -0,0 +1,25 @@
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-18400 - DSDialog:: form dialog date picker -Axe-Core', () => {
11
+ before('loading page', async () => {
12
+ const errorOnGo = await DSDialog.formDialogDatePickerURL.go();
13
+ if (errorOnGo) throw errorOnGo;
14
+ });
15
+
16
+ it('01: should pass axe-core scan', async () => {
17
+ const triggerBtn = await DSDialog.getTriggerBtn();
18
+ await triggerBtn.click();
19
+ const dialog = await DSDialog.getDialog();
20
+ await dialog.waitForDisplayed();
21
+ const result = await axeCoreCheck();
22
+ expect(result.length).toBe(0);
23
+ });
24
+ });
25
+ }
@@ -0,0 +1,37 @@
1
+ import DSDialog from '../DSDialogCO';
2
+
3
+ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
4
+ // Tests for form dialog with date picker integration
5
+ describe('PUI-18401 - DSDialog:: form dialog with date picker -Visual', () => {
6
+ before('loading page', async () => {
7
+ const errorOnGo = await DSDialog.formDialogDatePickerURL.go();
8
+ if (errorOnGo) throw errorOnGo;
9
+ });
10
+
11
+ it('01: should display form dialog with date picker correctly', async () => {
12
+ const triggerBtn = await DSDialog.getTriggerBtn();
13
+ await triggerBtn.click();
14
+ const dialog = await DSDialog.getDialog();
15
+ await dialog.waitForDisplayed();
16
+ const snapshot = await browser.percyCheckScreenshot(DSDialog.snapshotPath('form-dialog-datepicker'));
17
+ await expect(snapshot).toEqual(0);
18
+ });
19
+ });
20
+
21
+ // Tests for form dialog with date picker workaround
22
+ describe('PUI-18402 - DSDialog:: form dialog date picker workaround -Visual', () => {
23
+ before('loading page', async () => {
24
+ const errorOnGo = await DSDialog.formDialogDatePickerWorkaroundURL.go();
25
+ if (errorOnGo) throw errorOnGo;
26
+ });
27
+
28
+ it('01: should display form dialog with workaround correctly', async () => {
29
+ const triggerBtn = await DSDialog.getTriggerBtn();
30
+ await triggerBtn.click();
31
+ const dialog = await DSDialog.getDialog();
32
+ await dialog.waitForDisplayed();
33
+ const snapshot = await browser.percyCheckScreenshot(DSDialog.snapshotPath('form-dialog-datepicker-workaround'));
34
+ await expect(snapshot).toEqual(0);
35
+ });
36
+ });
37
+ }
@@ -0,0 +1,25 @@
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-18403 - DSDialog:: single button footer -Axe-Core', () => {
11
+ before('loading page', async () => {
12
+ const errorOnGo = await DSDialog.singleButtonFooterURL.go();
13
+ if (errorOnGo) throw errorOnGo;
14
+ });
15
+
16
+ it('01: should pass axe-core scan', async () => {
17
+ const triggerBtn = await DSDialog.getTriggerBtn();
18
+ await triggerBtn.click();
19
+ const dialog = await DSDialog.getDialog();
20
+ await dialog.waitForDisplayed();
21
+ const result = await axeCoreCheck();
22
+ expect(result.length).toBe(0);
23
+ });
24
+ });
25
+ }
@@ -0,0 +1,20 @@
1
+ import DSDialog from '../DSDialogCO';
2
+
3
+ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
4
+ // Tests for UX use case: Modal Dialog with single button footer
5
+ describe('PUI-18404 - DSDialog:: single button footer layout -Visual', () => {
6
+ before('loading page', async () => {
7
+ const errorOnGo = await DSDialog.singleButtonFooterURL.go();
8
+ if (errorOnGo) throw errorOnGo;
9
+ });
10
+
11
+ it('01: should display single button footer dialog correctly', async () => {
12
+ const triggerBtn = await DSDialog.getTriggerBtn();
13
+ await triggerBtn.click();
14
+ const dialog = await DSDialog.getDialog();
15
+ await dialog.waitForDisplayed();
16
+ const snapshot = await browser.percyCheckScreenshot(DSDialog.snapshotPath('single-button-footer'));
17
+ await expect(snapshot).toEqual(0);
18
+ });
19
+ });
20
+ }
@@ -0,0 +1,116 @@
1
+ import DSDialog from '../DSDialogCO';
2
+
3
+ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
4
+ // Visual tests for all dialog size/width variants
5
+ describe('PUI-18405 - DSDialog:: size small layout -Visual', () => {
6
+ before('loading page', async () => {
7
+ const errorOnGo = await DSDialog.sizeVariantsURL.go();
8
+ if (errorOnGo) throw errorOnGo;
9
+ });
10
+
11
+ it('01: should display small (320px) dialog correctly', async () => {
12
+ const btn = await DSDialog.getOpenDialogBySize('small');
13
+ await btn.click();
14
+ const dialog = await DSDialog.getDialog();
15
+ await dialog.waitForDisplayed();
16
+ const snapshot = await browser.percyCheckScreenshot(DSDialog.snapshotPath('size-small'));
17
+ await expect(snapshot).toEqual(0);
18
+ });
19
+ });
20
+
21
+ describe('PUI-18406 - DSDialog:: size default layout -Visual', () => {
22
+ before('loading page', async () => {
23
+ const errorOnGo = await DSDialog.sizeVariantsURL.go();
24
+ if (errorOnGo) throw errorOnGo;
25
+ });
26
+
27
+ it('01: should display default (576px) dialog correctly', async () => {
28
+ const btn = await DSDialog.getOpenDialogBySize('default');
29
+ await btn.click();
30
+ const dialog = await DSDialog.getDialog();
31
+ await dialog.waitForDisplayed();
32
+ const snapshot = await browser.percyCheckScreenshot(DSDialog.snapshotPath('size-default'));
33
+ await expect(snapshot).toEqual(0);
34
+ });
35
+ });
36
+
37
+ describe('PUI-18407 - DSDialog:: size medium layout -Visual', () => {
38
+ before('loading page', async () => {
39
+ const errorOnGo = await DSDialog.sizeVariantsURL.go();
40
+ if (errorOnGo) throw errorOnGo;
41
+ });
42
+
43
+ it('01: should display medium (656px) dialog correctly', async () => {
44
+ const btn = await DSDialog.getOpenDialogBySize('medium');
45
+ await btn.click();
46
+ const dialog = await DSDialog.getDialog();
47
+ await dialog.waitForDisplayed();
48
+ const snapshot = await browser.percyCheckScreenshot(DSDialog.snapshotPath('size-medium'));
49
+ await expect(snapshot).toEqual(0);
50
+ });
51
+ });
52
+
53
+ describe('PUI-18408 - DSDialog:: size large layout -Visual', () => {
54
+ before('loading page', async () => {
55
+ const errorOnGo = await DSDialog.sizeVariantsURL.go();
56
+ if (errorOnGo) throw errorOnGo;
57
+ });
58
+
59
+ it('01: should display large (848px) dialog correctly', async () => {
60
+ const btn = await DSDialog.getOpenDialogBySize('large');
61
+ await btn.click();
62
+ const dialog = await DSDialog.getDialog();
63
+ await dialog.waitForDisplayed();
64
+ const snapshot = await browser.percyCheckScreenshot(DSDialog.snapshotPath('size-large'));
65
+ await expect(snapshot).toEqual(0);
66
+ });
67
+ });
68
+
69
+ describe('PUI-18409 - DSDialog:: size x-large layout -Visual', () => {
70
+ before('loading page', async () => {
71
+ const errorOnGo = await DSDialog.sizeVariantsURL.go();
72
+ if (errorOnGo) throw errorOnGo;
73
+ });
74
+
75
+ it('01: should display x-large (1042px) dialog correctly', async () => {
76
+ const btn = await DSDialog.getOpenDialogBySize('x-large');
77
+ await btn.click();
78
+ const dialog = await DSDialog.getDialog();
79
+ await dialog.waitForDisplayed();
80
+ const snapshot = await browser.percyCheckScreenshot(DSDialog.snapshotPath('size-x-large'));
81
+ await expect(snapshot).toEqual(0);
82
+ });
83
+ });
84
+
85
+ describe('PUI-18410 - DSDialog:: size xx-large layout -Visual', () => {
86
+ before('loading page', async () => {
87
+ const errorOnGo = await DSDialog.sizeVariantsURL.go();
88
+ if (errorOnGo) throw errorOnGo;
89
+ });
90
+
91
+ it('01: should display xx-large (1440px) dialog correctly', async () => {
92
+ const btn = await DSDialog.getOpenDialogBySize('xx-large');
93
+ await btn.click();
94
+ const dialog = await DSDialog.getDialog();
95
+ await dialog.waitForDisplayed();
96
+ const snapshot = await browser.percyCheckScreenshot(DSDialog.snapshotPath('size-xx-large'));
97
+ await expect(snapshot).toEqual(0);
98
+ });
99
+ });
100
+
101
+ describe('PUI-18411 - DSDialog:: custom width layout -Visual', () => {
102
+ before('loading page', async () => {
103
+ const errorOnGo = await DSDialog.sizeVariantsURL.go();
104
+ if (errorOnGo) throw errorOnGo;
105
+ });
106
+
107
+ it('01: should display custom width (700px) dialog correctly', async () => {
108
+ const btn = await DSDialog.getOpenDialogBySize('custom');
109
+ await btn.click();
110
+ const dialog = await DSDialog.getDialog();
111
+ await dialog.waitForDisplayed();
112
+ const snapshot = await browser.percyCheckScreenshot(DSDialog.snapshotPath('size-custom-700'));
113
+ await expect(snapshot).toEqual(0);
114
+ });
115
+ });
116
+ }
@@ -90,6 +90,36 @@ if (
90
90
  });
91
91
  });
92
92
 
93
+ // Skipped due to defect PUI-17970
94
+ describe.skip('PUI-18379 - GlobalHeader: with search toggle -AxeCore', () => {
95
+ before(async () => {
96
+ const errorOnGo = await GlobalHeaderCO.withSearchToggleURL.go();
97
+ if (errorOnGo) throw errorOnGo;
98
+ });
99
+ it('01: should have global header with search toggle and pass axe-core scan', async () => {
100
+ const globalHeader = await GlobalHeaderCO.getGlobalHeader();
101
+ await globalHeader.waitForDisplayed();
102
+ const toggleSearch = await GlobalHeaderCO.getGHToolbarItem(0);
103
+ await expect(toggleSearch).toHaveAttribute('aria-expanded', 'false');
104
+ await expect(toggleSearch).toHaveAttribute('aria-controls');
105
+ const result = await axeCoreCheck();
106
+ expect(result.length).toBe(0);
107
+ });
108
+ it('02: should have global header with search toggle expanded and pass axe-core scan', async () => {
109
+ const toggleSearch = await GlobalHeaderCO.getGHToolbarItem(0);
110
+ await toggleSearch.click();
111
+ await expect(toggleSearch).toHaveAttribute('aria-expanded', 'true');
112
+ await expect(toggleSearch).toHaveAttribute('aria-controls', /^ds-global-header/);
113
+ const result = await axeCoreCheck();
114
+ expect(result.length).toBe(0);
115
+ });
116
+ it('03: should have global header with populated search toggle and pass axe-core scan', async () => {
117
+ await type('Labor');
118
+ const result = await axeCoreCheck();
119
+ expect(result.length).toBe(0);
120
+ });
121
+ });
122
+
93
123
  // Skipped due to defect PUI-17970
94
124
  describe.skip('PUI-16270 - GlobalHeader: Controled with Iframe -AxeCore', () => {
95
125
  before(async () => {
@@ -164,4 +164,35 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
164
164
  await expect(snapshot).toEqual(0);
165
165
  });
166
166
  });
167
+
168
+ describe('PUI-18378 - GlobalHeader: with SearchToggle -Visual', () => {
169
+ before(async () => {
170
+ const errorOnGo = await GlobalHeader.withSearchToggleURL.go();
171
+ if (errorOnGo) throw errorOnGo;
172
+ });
173
+ it('01: should display global header with expanded search toggle', async () => {
174
+ await browser.eyesOpen();
175
+ const searchToggleTrigger = await GlobalHeader.getGHToolbarItem(0);
176
+ await searchToggleTrigger.click();
177
+ const snapshot = await browser.eyesCheckSnapshot(GlobalHeader.snapshotPath('global-with-searchbox-open'));
178
+ await expect(snapshot).toEqual(0);
179
+ });
180
+ it('02: should display global header with populated search toggle', async () => {
181
+ await browser.eyesOpen();
182
+ await browser.keys(Key.Tab);
183
+ await browser.keys('Labor');
184
+ const snapshot = await browser.eyesCheckSnapshot(GlobalHeader.snapshotPath('global-with-searchbox-populated'));
185
+ await expect(snapshot).toEqual(0);
186
+ });
187
+ it('03: should display global header with focused spinbutton and highlighted result', async () => {
188
+ await browser.eyesOpen();
189
+ await browser.keys(Key.Tab);
190
+ await browser.keys(Key.Tab);
191
+ await browser.keys(Key.ArrowUp);
192
+ const globalHeader = await GlobalHeader.getGlobalHeader();
193
+ await globalHeader.waitForDisplayed();
194
+ const snapshot = await browser.eyesCheckSnapshot(GlobalHeader.snapshotPath('global-with-searchbox-highlight'));
195
+ await expect(snapshot).toEqual(0);
196
+ });
197
+ });
167
198
  }
@@ -95,8 +95,7 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
95
95
  const lastTab = await DSTabsCO.getTab(4);
96
96
  await lastTab.scrollIntoView();
97
97
  await browser.pause(1000);
98
- await lastTab.waitForClickable({ timeout: 5000 });
99
- await lastTab.click();
98
+ await browser.execute((el) => el.click(), lastTab);
100
99
  const snapshot = await browser.checkSnapshot(DSTabsCO.snapshotPath('tab-grid-moved2'));
101
100
  await expect(snapshot).toEqual(0);
102
101
  });
@@ -112,11 +112,11 @@ export default class DSTabsCO extends PageObject {
112
112
 
113
113
  static getTabListSlotByIndex = async (index = 0) => $$('[data-dimsum-slot="dsTabsTabList"]')[index];
114
114
 
115
- static getTabButtonSlotByIndex = async (index = 0) => $$('[data-dimsum-slot="dsTabsTabButton"]')[index];
115
+ static getTabButtonSlotByIndex = async (index = 0) => $$('[data-dimsum-parent-slot="dsTabsTabButton"]')[index];
116
116
 
117
117
  static getTabPanelSlotByIndex = async (index = 0) => $$('[data-dimsum-slot="dsTabsTabPanel"]')[index];
118
118
 
119
119
  static getSubtabsListSlotByIndex = async (index = 0) => $$('[data-dimsum-slot="dsTabsSubtabsList"]')[index];
120
120
 
121
- static getSubtabButtonSlotByIndex = async (index = 0) => $$('[data-dimsum-slot="dsTabsSubtabButton"]')[index];
121
+ static getSubtabButtonSlotByIndex = async (index = 0) => $$('[data-dimsum-parent-slot="dsTabsSubtabButton"]')[index];
122
122
  }