dimsum-e2e-tests 1.0.36 → 1.2.0

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 (134) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/ds-accordion/DSAccordion.axe-core.func.spec.js +18 -19
  3. package/ds-accordion/DSAccordion.func.spec.js +3 -3
  4. package/ds-accordion/DSAccordion.visual.spec.js +7 -0
  5. package/ds-accordion/DSAccordionCO.js +75 -11
  6. package/ds-accordion/QA_NOTES.md +105 -0
  7. package/ds-accordion/aria-disabled/DSAccordion.aria-disabled.axe-core.func.spec.js +25 -0
  8. package/ds-accordion/aria-disabled/DSAccordion.aria-disabled.visual.spec.js +23 -0
  9. package/ds-accordion/controlled/DSAccordion.controlled.func.spec.js +23 -0
  10. package/ds-accordion/header-structure/DSAccordion.header-structure.func.spec.js +65 -0
  11. package/ds-accordion/input-inside/DSAccordion.input-inside.func.spec.js +19 -0
  12. package/ds-accordion/role/DSAccordion.role-heading.func.spec.js +21 -0
  13. package/ds-accordion/scrollable-content/DSAccordion.scrollable-content.visual.spec.js +42 -0
  14. package/ds-accordion/slots/DSAccordion.slots.axe-core.func.spec.js +25 -0
  15. package/ds-accordion/slots/DSAccordion.slots.func.spec.js +67 -0
  16. package/ds-accordion/slots/DSAccordion.slots.visual.spec.js +18 -0
  17. package/ds-accordion/wrapLabel/DSAccordion.wrap-label.visual.spec.js +20 -0
  18. package/ds-autocomplete/DSAutocompleteCO.js +3 -3
  19. package/ds-button-v3/DSButtonV3.aria-diabled.axe-core.func.spec.js +22 -0
  20. package/ds-button-v3/DSButtonV3.aria-disabled-attribute.func.spec.js +33 -0
  21. package/ds-button-v3/DSButtonV3.aria-disabled.visual.spec.js +48 -0
  22. package/ds-button-v3/DSButtonV3.func.spec.js +27 -0
  23. package/ds-button-v3/DSButtonV3.type-submit.func.spec.js +28 -0
  24. package/ds-button-v3/DSButtonV3.visual.spec.js +92 -0
  25. package/ds-button-v3/DSButtonV3CO.js +60 -0
  26. package/ds-button-v3/theme-font/DSButtonV3.theme-font.func.spec.js +30 -0
  27. package/ds-controlled-form/ds-controlled-checkbox/Basic/DSControlledCheckbox.axe-core.basic.func.spec.js +4 -4
  28. package/ds-controlled-form/ds-controlled-checkbox/Basic/DSControlledCheckbox.basic.visual.spec.js +56 -0
  29. package/ds-controlled-form/ds-controlled-checkbox/DSControlledCheckboxCO.js +57 -2
  30. package/ds-controlled-form/ds-controlled-checkbox/Disabled/DSControlledCheckbox.axe-core.disabled.func.spec.js +1 -1
  31. package/ds-controlled-form/ds-controlled-checkbox/Disabled/DSControlledCheckbox.disabled.visual.spec.js +1 -1
  32. package/ds-controlled-form/ds-controlled-checkbox/HasError/DSControlledCheckbox.axe-core.hasError.func.spec.js +4 -4
  33. package/ds-controlled-form/ds-controlled-checkbox/HasError/DSControlledCheckbox.has-error.visual.spec.js +71 -1
  34. package/ds-controlled-form/ds-controlled-checkbox/Mixed/DSControlledCheckbox.axe-core.mixed.func.spec.js +4 -4
  35. package/ds-controlled-form/ds-controlled-checkbox/Mixed/DSControlledCheckbox.mixed.func.spec.js +19 -37
  36. package/ds-controlled-form/ds-controlled-checkbox/Mixed/DSControlledCheckbox.mixed.keyboard-nav.func.spec.js +51 -0
  37. package/ds-controlled-form/ds-controlled-checkbox/Mixed/DSControlledCheckbox.mixed.visual.spec.js +14 -16
  38. package/ds-controlled-form/ds-controlled-checkbox/ReadOnly/DSControlledCheckbox.axe-core.read-only.func.spec.js +3 -3
  39. package/ds-controlled-form/ds-controlled-checkbox/ReadOnly/DSControlledCheckbox.read-only.visual.spec.js +1 -1
  40. package/ds-controlled-form/ds-controlled-checkbox/WithTooltip/DSControlledCheckbox.axe-core.with-tooltip.func.spec.js +1 -1
  41. package/ds-controlled-form/ds-controlled-checkbox/WithTooltip/DSControlledCheckbox.with-tooltip.visual.spec.js +1 -3
  42. package/ds-controlled-form/ds-controlled-checkbox/WrapLabel/DSControlledCheckbox.axe-core.wrap-label.func.spec.js +1 -1
  43. package/ds-controlled-form/ds-controlled-checkbox/WrapLabel/DSControlledCheckbox.wrap-label.visual.spec.js +1 -1
  44. package/ds-controlled-form/ds-controlled-checkbox/aria-disabled/DSControlledCheckbox.aria-disabled.visual.spec.js +25 -0
  45. package/ds-controlled-form/ds-controlled-checkbox/aria-disabled/DSControlledCheckbox.axe-core.aria-disabled.func.spec.js +24 -0
  46. package/ds-controlled-form/ds-controlled-checkbox/slots/DSControlledCheckbox.slots.func.spec.js +78 -0
  47. package/ds-controlled-form/ds-controlled-checkbox/theme-font/DSControlledCheckbox.theme-font.func.spec.js +30 -0
  48. package/ds-controlled-form/ds-controlled-inputgroup/DSControlledInputGroupCO.js +7 -21
  49. package/ds-controlled-form/ds-controlled-inputgroup/autocomplete/DSControlledInputGroup.autocomplete.axe-core.func.spec.js +5 -6
  50. package/ds-controlled-form/ds-controlled-inputgroup/basic/DSControlledInputGroup.basic.axe-core.func.spec.js +3 -2
  51. package/ds-controlled-form/ds-controlled-inputgroup/basic/DSControlledInputGroup.basic.visual.spec.js +3 -2
  52. package/ds-controlled-form/ds-controlled-inputgroup/form-item-layout/DSControlledInputGroup.form-item-layout.axe-core.func.spec.js +2 -1
  53. package/ds-controlled-form/ds-controlled-inputgroup/form-item-layout/DSControlledInputGroup.form-item-layout.func.spec.js +3 -2
  54. package/ds-controlled-form/ds-controlled-inputgroup/protected/DSControlledInputGroup.protected.axe-core.func.spec.js +3 -2
  55. package/ds-controlled-form/ds-controlled-inputgroup/protected/DSControlledInputGroup.protected.func.spec.js +2 -1
  56. package/ds-controlled-form/ds-controlled-inputgroup/protected/DSControlledInputGroup.protected.visual.spec.js +2 -1
  57. package/ds-controlled-form/ds-input-text/DSInputText.clearable.keyboard.func.spec.js +2 -2
  58. package/ds-controlled-form/ds-input-text/DSInputText.func.spec.js +14 -12
  59. package/ds-controlled-form/ds-input-text/DSInputTextCO.js +31 -8
  60. package/ds-controlled-form/ds-input-text/aria-disabled/DSInputText.aria-disabled.axe-core.func.spec.js +23 -0
  61. package/ds-controlled-form/ds-input-text/aria-disabled/DSInputText.aria-disabled.func.spec.js +42 -0
  62. package/ds-controlled-form/ds-input-text/aria-disabled/DSInputText.aria-disabled.visual.spec.js +28 -0
  63. package/ds-controlled-form/ds-input-text/placeholder/DSInputText.placeholder.visual.spec.js +15 -0
  64. package/ds-controlled-form/ds-input-text/read-only/DSInputText.read-only.axe-core.func.spec.js +23 -0
  65. package/ds-controlled-form/ds-input-text/read-only/DSInputText.read-only.func.spec.js +23 -0
  66. package/ds-controlled-form/ds-input-text/read-only/DSInputText.read-only.visual.spec.js +28 -0
  67. package/ds-controlled-form/ds-input-text/slots/DSInputText.slots.axe-core.func.spec.js +23 -0
  68. package/ds-controlled-form/ds-input-text/slots/DSInputText.slots.func.spec.js +35 -0
  69. package/ds-controlled-form/ds-input-text/slots/DSInputText.slots.visual.spec.js +19 -0
  70. package/ds-controlled-form/react-hook-form/ReactHook.func.spec.js +2 -1
  71. package/ds-controlled-form/react-hook-form/ReactHook.visual.spec.js +2 -1
  72. package/ds-controlled-form/react-hook-form/ReactHookCO.js +0 -10
  73. package/ds-controlled-form/useMask/Number/UseNumberMask.axe-core.func.spec.js +48 -0
  74. package/ds-controlled-form/useMask/Number/UseNumberMask.func.spec.js +37 -36
  75. package/ds-controlled-form/useMask/Number/UseNumberMask.visual.spec.js +7 -6
  76. package/ds-controlled-form/useMask/Phone/UsePhoneMask.func.spec.js +9 -8
  77. package/ds-controlled-form/useMask/Phone/UsePhoneMask.visual.spec.js +4 -3
  78. package/ds-controlled-form/useMask/ReackHookFormWithMask/ReactHookFormWithMask.func.spec.js +4 -3
  79. package/ds-controlled-form/useMask/ReackHookFormWithMask/ReactHookFormWithMask.visual.spec.js +5 -4
  80. package/ds-controlled-form/useMask/RegExp/UseRegExpMask.func.spec.js +6 -5
  81. package/ds-controlled-form/useMask/SSN/UseSsnMask.func.spec.js +7 -6
  82. package/ds-controlled-form/useMask/ZipCode/UseZipCodeMask.func.spec.js +6 -5
  83. package/ds-controlled-form/useMask/useMaskCO.js +1 -11
  84. package/ds-data-table-async/components/FiltersCOextra.js +1 -1
  85. package/ds-data-table-async/components/OnRowClickCO.js +1 -1
  86. package/ds-data-table-async/pagination/DSDataTable.pagination.func.spec.js +3 -2
  87. package/ds-dialog/components/DialogFormsCO.js +1 -1
  88. package/ds-dropdownmenu-v2/DSDDMenuV2.axe-core.func.spec.js +2 -15
  89. package/ds-dropdownmenu-v2/DSDDMenuV2.visual.spec.js +5 -5
  90. package/ds-dropdownmenu-v2/DSDDMenuV2CO.js +8 -2
  91. package/ds-dropdownmenu-v2/aria-disabled/DSDDMenuV2.aria-disabled.visual.spec.js +20 -0
  92. package/ds-dropdownmenu-v2/basic/DSDDMenuV2.basic.func.spec.js +27 -27
  93. package/ds-dropdownmenu-v2/mandatory-single/DSDDMenuV2.mandatory-single.func.spec.js +4 -4
  94. package/ds-floating-context/DSFloatingContext.visual.spec.js +46 -0
  95. package/ds-floating-context/DSFloatingContextCO.js +46 -0
  96. package/ds-floating-context/placement/DSFloatingContext.placement.visual.spec.js +48 -0
  97. package/ds-floating-context/slots/DSFloatingContext.slots.axe-core.func.spec.js +23 -0
  98. package/ds-floating-context/slots/DSFloatingContext.slots.func.spec.js +41 -0
  99. package/ds-floating-context/slots/DSFloatingContext.slots.visual.spec.js +18 -0
  100. package/ds-form-layout-blocks/form-layout-block-item/DSFormLayoutBlockItemCO.js +3 -3
  101. package/ds-hooks/DSHook.usetree.func.spec.js +3 -2
  102. package/ds-hooks/useFocusTrap/UseFocusTrap.func.spec.js +36 -0
  103. package/ds-hooks/useFocusTrap/UseFocusTrapCO.js +10 -0
  104. package/ds-hooks/useKeyboardNavigation/DSHook.useKeyboardNavigation.func.spec.js +145 -0
  105. package/ds-hooks/useKeyboardNavigation/UseKeyboardNavigationCO.js +33 -0
  106. package/ds-hooks/useOnBlurOut/UseOnBlurOut.axe-core.func.spec.js +29 -0
  107. package/ds-hooks/useOnBlurOut/UseOnBlurOut.func.spec.js +83 -0
  108. package/ds-hooks/useOnBlurOut/UseOnBlurOutCO.js +11 -0
  109. package/ds-icons/DSIcons.visual.spec.js +45 -0
  110. package/ds-icons/DSIconsCO.js +30 -0
  111. package/ds-indeterminate-progress-indicator/DSIndetermintateProgressIndicator.axe-core.func.spec.js +31 -0
  112. package/ds-menu-item/DSMenuItems.func.spec.js +16 -16
  113. package/ds-menu-item/DSMenuItems.visual.spec.js +8 -32
  114. package/ds-menu-item/DSMenuItemsCO.js +4 -0
  115. package/ds-menu-item/aria-disabled/DSMenuItems.aria-disabled.axe-core.func.spec.js +35 -0
  116. package/ds-menu-item/aria-disabled/DSMenuItems.aria-disabled.visual.spec.js +68 -0
  117. package/ds-menu-item/read-only/DSMenuItems.read-only.axe-core.func.spec.js +35 -0
  118. package/ds-menu-item/read-only/DSMenuItems.read-only.visual.spec.js +66 -0
  119. package/ds-query-builder/DSQueryBuilderCO.js +1 -1
  120. package/ds-shuttle-v2/items/DSShuttleV2.items.func.spec.js +4 -2
  121. package/ds-system/DSSystem.visual.spec.js +19 -0
  122. package/ds-system/DSSystemCO.js +15 -0
  123. package/ds-typography/DSTypography.func.spec.js +5 -5
  124. package/ds-typography/DSTypography.visual.spec.js +50 -48
  125. package/ds-typography/DSTypographyCO.js +25 -5
  126. package/ds-typography/theme-font/DSTypography.theme-font.func.spec.js +30 -0
  127. package/package.json +121 -119
  128. package/ds-button-v2/DSButtonV2.axe-core.func.spec.js +0 -22
  129. package/ds-button-v2/DSButtonV2.func.spec.js +0 -139
  130. package/ds-button-v2/DSButtonV2.visual.spec.js +0 -153
  131. package/ds-button-v2/DSButtonV2CO.js +0 -43
  132. package/ds-controlled-form/ds-controlled-checkbox/DSControlledCheckbox.smoke.spec.js +0 -125
  133. package/ds-indeterminate-progress-indicator/DSIndetermintateProgressIndicator.func.spec.js +0 -17
  134. /package/ds-typography/{DSTypography.resize.visual.spec.js → DSTypography.resize.skipped.js} +0 -0
package/CHANGELOG.md CHANGED
@@ -3,6 +3,24 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [1.2.0](https://github.com/intcx/PLATFORM-UI.dimsum-legacy/compare/v1.0.37...v1.2.0) (2026-10-16)
7
+
8
+ ### Features
9
+
10
+ - ds-dropdownmenu-v2:: ported at parity from live [PUI-19097](https://jira.elliemae.io/browse/PUI-19097) ([#75](https://github.com/intcx/PLATFORM-UI.dimsum-legacy/issues/75)) ([9a78e0a](https://github.com/intcx/PLATFORM-UI.dimsum-legacy/commit/9a78e0a7f0abf8460d52f194fb69178d0a332c1b))
11
+
12
+ ## [1.1.0](https://github.com/intcx/PLATFORM-UI.dimsum-legacy/compare/v1.0.37...v1.1.0) (2026-10-14)
13
+
14
+ ### Features
15
+
16
+ - ds-legacy-dropdownmenu-v2:: ported at parity from live lossless ([e66d53d](https://github.com/intcx/PLATFORM-UI.dimsum-legacy/commit/e66d53df1a090d286fca6774bd2ed7c63bb11618))
17
+
18
+ ## [1.0.37](https://github.com/intcx/PLATFORM-UI.dimsum-legacy/compare/v1.0.35...v1.0.37) (2026-10-14)
19
+
20
+ ### Bug Fixes
21
+
22
+ - dimsum:: e2e page objects and story paths aligned to the current Storybook ([#74](https://github.com/intcx/PLATFORM-UI.dimsum-legacy/issues/74)) ([b27626a](https://github.com/intcx/PLATFORM-UI.dimsum-legacy/commit/b27626ac6e2204b72c8a3bbb1980ce577a978416))
23
+
6
24
  ## [1.0.36](https://github.com/intcx/PLATFORM-UI.dimsum-legacy/compare/v1.0.35...v1.0.36) (2026-10-14)
7
25
 
8
26
  ### Bug Fixes
@@ -10,6 +10,24 @@ if (
10
10
  browser.capabilities.browserName === 'chrome') ||
11
11
  browser.capabilities.browserName === 'Chrome'
12
12
  ) {
13
+ describe('PUI-10994 - Accordion, header controls & subtitle -AxeCore', () => {
14
+ before('loading page', async () => {
15
+ const errorOnGo = await DSAccordionCO.headerControls.go();
16
+ if (errorOnGo) throw errorOnGo;
17
+ });
18
+ it('01: should display accordion expanded with header props (and subtitle) and pass axecore scan', async () => {
19
+ await (await DSAccordionCO.getAccordionHeader(1)).waitForDisplayed();
20
+ await (await DSAccordionCO.getAccordionHeader(1)).click();
21
+ await (await DSAccordionCO.getContents('1-a')).waitForDisplayed();
22
+ const result = await axeCoreCheck();
23
+ expect(result.length).toBe(0);
24
+ });
25
+ it('02: should display accordion with open toolbar and pass axecore scan', async () => {
26
+ await (await DSAccordionCO.getToolbarByIndex(1)).click();
27
+ const result = await axeCoreCheck();
28
+ expect(result.length).toBe(0);
29
+ });
30
+ });
13
31
  describe('PUI-10990 - Accordion, basic -AxeCore', () => {
14
32
  before('loading page', async () => {
15
33
  const errorOnGo = await DSAccordionCO.basicURL.go();
@@ -87,25 +105,6 @@ if (
87
105
  expect(result.length).toBe(0);
88
106
  });
89
107
  });
90
- // Unskip after PUI-11922 is fixed
91
- describe.skip('PUI-10994 - Accordion, header controls & subtitle -AxeCore', () => {
92
- before('loading page', async () => {
93
- const errorOnGo = await DSAccordionCO.headerControls.go();
94
- if (errorOnGo) throw errorOnGo;
95
- });
96
- it('01: should display accordion expanded with header props (and subtitle) and pass axecore scan', async () => {
97
- await (await DSAccordionCO.getAccordionHeader(1)).waitForDisplayed();
98
- await (await DSAccordionCO.getAccordionHeader(1)).click();
99
- await (await DSAccordionCO.getContents('1-a')).waitForDisplayed();
100
- const result = await axeCoreCheck();
101
- expect(result.length).toBe(0);
102
- });
103
- it('02: should display accordion with open toolbar and pass axecore scan', async () => {
104
- await (await DSAccordionCO.getToolbarByIndex(1)).click();
105
- const result = await axeCoreCheck();
106
- expect(result.length).toBe(0);
107
- });
108
- });
109
108
 
110
109
  describe('PUI-10995 - Accordion, Actionable within -AxeCore', () => {
111
110
  before('loading page', async () => {
@@ -164,20 +164,20 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
164
164
  if (errorOnGo) throw errorOnGo;
165
165
  });
166
166
  it('01: should have accordion closed and content existing by default', async () => {
167
- const accordionContent = await CellCO.getCells();
167
+ const accordionContent = await CellCO.getCellByIndex(1);
168
168
  await expect(accordionContent).not.toBeDisplayed();
169
169
  await expect(accordionContent).toExist();
170
170
  });
171
171
  it('02: should have accordion expanded and content existing', async () => {
172
172
  const firstAccordion = await DSAccordionCO.getAccordionHeader(0);
173
173
  await firstAccordion.click();
174
- const accordionContent = await CellCO.getCells();
174
+ const accordionContent = await CellCO.getCellByIndex(1);
175
175
  await expect(accordionContent).toBeDisplayed();
176
176
  });
177
177
  it('03: should have accordion closed and content still existing', async () => {
178
178
  const firstAccordion = await DSAccordionCO.getAccordionHeader(0);
179
179
  await firstAccordion.click();
180
- const accordionContent = await CellCO.getCells();
180
+ const accordionContent = await CellCO.getCellByIndex(1);
181
181
  await expect(accordionContent).not.toBeDisplayed();
182
182
  await expect(accordionContent).toExist();
183
183
  });
@@ -81,6 +81,12 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
81
81
  if (errorOnGo) throw errorOnGo;
82
82
  });
83
83
  it('01: should display accordion with global height, not trimmed', async () => {
84
+ const addRow = await $('[data-testid="add-row"]');
85
+ await addRow.click();
86
+ await addRow.click();
87
+ await addRow.click();
88
+ const content = await DSAccordionCO.getContents(0);
89
+ await content.waitForDisplayed();
84
90
  const snapshot = await browser.checkSnapshot(DSAccordionCO.snapshotPath('accordion-globalheight'));
85
91
  await expect(snapshot).toEqual(0);
86
92
  });
@@ -144,6 +150,7 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
144
150
  });
145
151
  });
146
152
  }
153
+ // legacy-only: ds-mobile is still shipped in legacy (live removed this block with the ds-mobile deprecation)
147
154
  if (browser.capabilities['ice:options'].isPhone) {
148
155
  describe('PUI-7981 - Accordion, desktop to mobile -visual', () => {
149
156
  before('loading page', async () => {
@@ -1,20 +1,18 @@
1
1
  /* eslint-disable import/no-relative-packages */
2
- import { PATH_ACCORDION_EXAMPLES, PATH_E2E_ACCORDION } from '../../environments/storybook/paths';
2
+ // legacy-only: path
3
+ import { PATH_ACCORDION_EXAMPLES, PATH_E2E_ACCORDION, PATH_E2E_ACCORDION_PITFALLS } from '../../environments/storybook/paths';
3
4
  import { PageObject, Urlbuilder, getElementByIndex } from '../helpers';
4
5
 
5
6
  export default class DSAccordionCO extends PageObject {
6
7
  // Desktop
7
- static basicURL = new Urlbuilder(PATH_ACCORDION_EXAMPLES, 'basic');
8
+ static basicURL = new Urlbuilder(PATH_E2E_ACCORDION, 'basic');
8
9
 
9
- static expandableURL = new Urlbuilder(PATH_ACCORDION_EXAMPLES, 'expandable');
10
-
11
- static multipleURL = new Urlbuilder(PATH_ACCORDION_EXAMPLES, 'multiple');
10
+ static multipleURL = new Urlbuilder(PATH_E2E_ACCORDION, 'multiple');
12
11
 
12
+ // legacy-only: ds-mobile is still shipped in legacy (live removed this example with the ds-mobile deprecation)
13
13
  static toMobileURL = new Urlbuilder(PATH_ACCORDION_EXAMPLES, 'desktop-to-mobile');
14
14
 
15
- static customActions = new Urlbuilder(PATH_ACCORDION_EXAMPLES, 'render-custom-actions');
16
-
17
- static headerProps = new Urlbuilder(PATH_ACCORDION_EXAMPLES, 'header-props');
15
+ static customActions = new Urlbuilder(PATH_E2E_ACCORDION, 'render-custom-actions');
18
16
 
19
17
  static headerControls = new Urlbuilder(PATH_E2E_ACCORDION, 'header-control-examples-test');
20
18
 
@@ -24,10 +22,14 @@ export default class DSAccordionCO extends PageObject {
24
22
 
25
23
  static tooltip = new Urlbuilder(PATH_E2E_ACCORDION, 'tooltip');
26
24
 
27
- static inputInside = new Urlbuilder(PATH_E2E_ACCORDION, 'PUI-9261-input-inside');
25
+ static inputInside = new Urlbuilder(PATH_E2E_ACCORDION, 'pui-9261-input-inside');
26
+
27
+ static controlled = new Urlbuilder(PATH_E2E_ACCORDION, 'controlled-test');
28
28
 
29
29
  static datepickerInside = new Urlbuilder(PATH_E2E_ACCORDION, 'actionable-within');
30
30
 
31
+ static slotsURL = new Urlbuilder(PATH_E2E_ACCORDION, 'slots-test');
32
+
31
33
  static disabled = new Urlbuilder(PATH_E2E_ACCORDION, 'disabled-test');
32
34
 
33
35
  static subtitle = new Urlbuilder(PATH_E2E_ACCORDION, 'with-secondary-title-test');
@@ -36,9 +38,13 @@ export default class DSAccordionCO extends PageObject {
36
38
 
37
39
  static keepContentURL = new Urlbuilder(PATH_E2E_ACCORDION, 'keep-content-mounted');
38
40
 
39
- static focusOnItemURL = new Urlbuilder(PATH_E2E_ACCORDION, 'focus-on-item');
41
+ static focusOnItemURL = new Urlbuilder(PATH_E2E_ACCORDION_PITFALLS, 'focus-on-item-test');
42
+
43
+ static applyAriaDisabled = new Urlbuilder(PATH_E2E_ACCORDION, 'apply-aria-disabled-test');
40
44
 
41
- static getUrl = (example = 'basic') => PageObject.getUrl(PATH_ACCORDION_EXAMPLES, example);
45
+ static scrollableContent = new Urlbuilder(PATH_E2E_ACCORDION, 'scrollable-content');
46
+
47
+ static wrapLabel = new Urlbuilder(PATH_E2E_ACCORDION, 'wrap-label');
42
48
 
43
49
  // Snapshots
44
50
  static snapshotPath(example = 'basic') {
@@ -97,4 +103,62 @@ export default class DSAccordionCO extends PageObject {
97
103
  static getButtonsByIndex = async (index) => getElementByIndex(this.getButtons, index);
98
104
 
99
105
  static getToolbarByIndex = async (index) => getElementByIndex(this.getToolbarTriggers, index);
106
+
107
+ static async getToolbarMenuByIndex(index = 0) {
108
+ return $$('[data-testid="ds-menuitem-menu-item-wrapper"]')[index];
109
+ }
110
+
111
+ static getAccordionItemHeaderContainers = async () => $$('[data-testid="ds-accordion-item-header-container"]');
112
+
113
+ static getAccordionItemHeaderContainerByIndex = async (index) =>
114
+ getElementByIndex(this.getAccordionItemHeaderContainers, index);
115
+
116
+ static getAccordionItemHeaderCustomActionsContainers = async () =>
117
+ $$('[data-testid="ds-accordion-item-header-custom-actions-container"]');
118
+
119
+ static getAccordionItemHeaderCustomActionsContainerByIndex = async (index) =>
120
+ getElementByIndex(this.getAccordionItemHeaderCustomActionsContainers, index);
121
+
122
+ // slots
123
+
124
+ static async getAccordionContainerSlotByIndex(index = 0) {
125
+ return $$('[data-dimsum-slot="dsAccordionRoot"]')[index];
126
+ }
127
+
128
+ static async getAccordionItemContainerSlotByIndex(index = 0) {
129
+ return $$('[data-dimsum-slot="dsAccordionItemContainer"]')[index];
130
+ }
131
+
132
+ static async getAccordionItemHeaderContainerSlotByIndex(index = 0) {
133
+ return $$('[data-dimsum-slot="dsAccordionItemHeaderContainer"]')[index];
134
+ }
135
+
136
+ static async getAccordionItemHeaderSlotByIndex(index = 0) {
137
+ return $$('[data-dimsum-slot="dsAccordionItemHeader"]')[index];
138
+ }
139
+
140
+ static async getAccordionItemHeaderAddonSlotByIndex(index = 0) {
141
+ return $$('[data-dimsum-slot="dsAccordionItemHeaderAddon"]')[index];
142
+ }
143
+
144
+ static async getAccordionItemHeaderTitlesContainerSlotByIndex(index = 0) {
145
+ return $$('[data-dimsum-slot="dsAccordionItemHeaderTitlesContainer"]')[index];
146
+ }
147
+
148
+ static async getAccordionItemHeaderPrimaryTitleSlotByIndex(index = 0) {
149
+ return $$('[data-dimsum-slot="dsAccordionItemHeaderPrimaryTitle"]')[index];
150
+ }
151
+
152
+ static async getAccordionItemContentContainerSlotByIndex(index = 0) {
153
+ return $$('[data-dimsum-slot="dsAccordionItemContentContainer"]')[index];
154
+ }
155
+
156
+ static async getAccordionItemHeaderSecondaryTitleSlotByIndex(index = 0) {
157
+ return $$('[data-dimsum-slot="dsAccordionItemHeaderSecondaryTitle"]')[index];
158
+ }
159
+
160
+ static async getAccordionItemHeaderTooltipSlotByIndex(index = 0) {
161
+ // not used on example
162
+ return $$('[data-dimsum-slot="dsAccordionItemHeaderTooltip"]')[index];
163
+ }
100
164
  }
@@ -0,0 +1,105 @@
1
+ # QA Notes — ds-accordion E2E
2
+
3
+ Durable QA knowledge for the `accordion` suite. Carried over from the `ds-accordion-native` POC
4
+ notes ([PUI-18083](https://jira.elliemae.io/browse/PUI-18083)) when that parallel suite was removed —
5
+ see "Native migration" below.
6
+
7
+ ## Native migration ([PUI-18742](https://jira.elliemae.io/browse/PUI-18742))
8
+
9
+ `ds-accordion` now renders a native `<details>` / `<summary>` disclosure instead of the previous
10
+ WAI-ARIA button pattern. Public API, slot names and `data-testid` values are unchanged; only the DOM
11
+ engine changed. Full contract: [`stories/ds-accordion/docs/NativeDisclosureMigration.md`](../../environments/storybook/stories/ds-accordion/docs/NativeDisclosureMigration.md).
12
+
13
+ ```html
14
+ <div data-testid="ds-accordion_item">
15
+ <details data-testid="ds-accordion-item-details">
16
+ <summary data-testid="ds-accordion_item-header" aria-expanded aria-controls="ds-accordion-content-0">
17
+ <div data-testid="ds-accordion-item-header-container">… chevron + title(s) …</div>
18
+ </summary>
19
+ <div data-testid="ds-accordion_item-content" role="region" aria-labelledby="ds-accordion-header-0">…</div>
20
+ </details>
21
+ <div data-testid="ds-accordion-item-header-custom-actions-container">… custom actions …</div>
22
+ </div>
23
+ ```
24
+
25
+ **What this changes for specs:**
26
+
27
+ - The trigger is a `<summary>`, **not** a `<button>`. `getAccordionHeader(i)` returns the `<summary>`.
28
+ - The heading container lives **inside** the summary (inverse of the pre-migration nesting).
29
+ - `role="heading"` + `aria-level` are **not** emitted by the component. They are opt-in per consumer
30
+ through the `dsAccordionItemHeaderContainer` slot prop. Only stories that set that prop
31
+ (e.g. `WithSecondaryTitleTest`, `AdvancedHeadingStructureCustomization`) expose heading semantics —
32
+ `HeaderControlExamplesTest` does not. Assert the role only on a story that opts in
33
+ (`role/DSAccordion.role-heading.func.spec.js`).
34
+ - Custom actions render as a **sibling of `<details>`**, outside the trigger. Nothing interactive is
35
+ nested inside the `<summary>`.
36
+ - `ds-accordion-item-details` is an additive slot/testid introduced by the migration.
37
+
38
+ The former `ds-accordion-native` E2E suite was deleted here — `ds-accordion` **is** the native engine
39
+ now, so the parity suite had no stories left to point at (`stories/ds-accordion-native` and
40
+ `PATH_E2E_ACCORDION_NATIVE` were removed in PUI-18742).
41
+
42
+ ## header-structure func — test 04 flaky "Login not displayed" (cloud)
43
+
44
+ **Status:** spec hardened (spec-only + one additive CO helper). Investigated 2026-07-02 on the native
45
+ suite; the same hardening now lives in `header-structure/DSAccordion.header-structure.func.spec.js`.
46
+
47
+ **Symptom:** in the cloud run (`E2E_BACKEND=cloud`, `BASE_URL`=NEXT/d3, Chrome-only) test
48
+ `04: toolbar trigger in custom actions should open dropdown menu on click` broke with
49
+ `element ("*=Login") still not displayed after 10000ms`. Only that browser runs it (the spec is
50
+ Chrome-guarded), so it surfaces as 1 broken.
51
+
52
+ **Not a defect.** Reproduced against NEXT/d3 at the SDK viewport (1920×1080): the click opens the
53
+ `DSDropdownMenuV2` (`dropdown-menu-listbox` + `ds-floating-wrapper-root` present), `Login` resolves to
54
+ a single visible `<p>`, not clipped by any overflow ancestor and not occluded (`elementFromPoint` at
55
+ its center returns the element), and it stays open at 3s. Selectors, story and package are correct.
56
+ Passed 100% locally, broke 100% in cloud → the delta is real-Chrome + BrowserStack +
57
+ `browser.maximizeWindow()` (cloud-only).
58
+
59
+ **Root cause:** the pattern "one-shot click on a toggle + `waitForDisplayed` on a deep descendant" is
60
+ fragile. If the click doesn't leave the menu open in that driver, the wait sits the full 10s on a menu
61
+ that never opened.
62
+
63
+ **Fix:** wait for the trigger to be clickable, click it, then assert the `DSDropdownMenuV2` item
64
+ wrapper (`getToolbarMenuByIndex` → `ds-menuitem-menu-item-wrapper`) is displayed _before_ checking the
65
+ first option, and tag-qualify the option selector as `p*=Login` (`DSTypography variant="b1"` renders a
66
+ `<p>`). The SDK's retries absorb residual flakiness. Optional broader mitigation: enable
67
+ `config.specFileRetries` in `wdio.config.mjs`.
68
+
69
+ ## input-inside func — `data-testid` is on the `<input>`, not a wrapper
70
+
71
+ `DSInputText` forwards `data-testid` through its global attributes straight onto `StyledInput`, i.e.
72
+ the `<input>` element. A descendant selector like `[data-testid="task-name"] input` matches nothing
73
+ and breaks on every browser. Target the testid directly.
74
+
75
+ ## Open defects from the native POC — re-verify against ds-accordion
76
+
77
+ These were logged against `ds-accordion-native` while it was a separate POC package. Now that
78
+ `ds-accordion` ships the native engine, **each needs re-verification against `ds-accordion`** before
79
+ being closed or re-pointed — they are listed here so the findings are not lost with the deleted suite,
80
+ not as confirmed `ds-accordion` defects.
81
+
82
+ | Ticket | Summary |
83
+ | ------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
84
+ | [PUI-18640](https://jira.elliemae.io/browse/PUI-18640) | Content-container slot did not apply style-props — `maxHeight`/`overflow` (scrollable-content) and padding `p` (XstyledpropsInContent) — the way pre-migration `ds-accordion` did. Breaking for consumers styling content via the slot. |
85
+ | [PUI-18641](https://jira.elliemae.io/browse/PUI-18641) | Default title behavior changed from truncate-with-tooltip to wrap. With `wrapLabel={false}` the title truncates but shows no tooltip on hover → full text unreadable. Backwards-incompatible default + readability gap. |
86
+ | [PUI-18642](https://jira.elliemae.io/browse/PUI-18642) | Arrow Icon visual spec violations (Accordion Draft v1.5.0): region width is not the spec'd 20px; when the title wraps the icon is center-aligned instead of top-aligned ("Fixed Top-aligned — Region A"). |
87
+ | [PUI-18695](https://jira.elliemae.io/browse/PUI-18695) | _Safari-only:_ Tab does not move focus between accordion headers after a click. Click-focus, focus ring and Enter all work; only Tab traversal is broken. Found by E2E visual PUI-14324 - 02 (Safari). |
88
+
89
+ Related upstream: [WebKit bug #319162](https://bugs.webkit.org/show_bug.cgi?id=319162) — in Safari,
90
+ tabbing away from a `<summary>` that contains nested elements after **mouse** activation does not
91
+ advance focus correctly. Keyboard-only navigation is unaffected. Unresolved upstream.
92
+
93
+ ## Known visual baseline note — slots (`PUI-15348 - 01`)
94
+
95
+ Percy flagged a ~0.05% diff: a small lavender box at the left of each "… Secondary" row. Not a
96
+ regression. `StyledHeading` moved from `display: contents` → `display: flex`; an element with
97
+ `display: contents` generates no box and therefore never paints its `background`, so the `SlotsTest`
98
+ story's lavender `item-heading` background was silently dropped before and paints now. Only visible in
99
+ that synthetic story (every slot painted a loud color). Re-approve the baseline if it resurfaces.
100
+
101
+ ---
102
+
103
+ _Historical detail (A/B/C/D divergence audit, Percy mechanism, run commands) lived in
104
+ `stories/ds-accordion-native/POC_FINDINGS.md`, removed in PUI-18742. Recover with
105
+ `git show 3468ca3ccb4^:stories/ds-accordion-native/POC_FINDINGS.md`._
@@ -0,0 +1,25 @@
1
+ /* eslint-disable max-lines */
2
+ import { Key } from 'webdriverio';
3
+ import DSAccordionCO from '../DSAccordionCO';
4
+ import { axeCoreCheck } from '../../helpers';
5
+
6
+ if (
7
+ (!browser.capabilities['ice:options'].isPhone &&
8
+ !browser.capabilities['ice:options'].isTablet &&
9
+ browser.capabilities.browserName === 'chrome') ||
10
+ browser.capabilities.browserName === 'Chrome'
11
+ ) {
12
+ describe('PUI-14353 - Accordion:: ApplyAriaDisabled prop - axe-core', () => {
13
+ before('loading page', async () => {
14
+ const errorOnGo = await DSAccordionCO.applyAriaDisabled.go();
15
+ if (errorOnGo) throw errorOnGo;
16
+ });
17
+ it('01: should display accordion with aria-disabled and pass axecore scan', async () => {
18
+ const firstItem = await DSAccordionCO.getAccordionHeader(0);
19
+ await firstItem.waitForDisplayed();
20
+ await browser.keys(Key.Tab);
21
+ const result = await axeCoreCheck();
22
+ expect(result.length).toBe(0);
23
+ });
24
+ });
25
+ }
@@ -0,0 +1,23 @@
1
+ import { Key } from 'webdriverio';
2
+ import DSAccordionCO from '../DSAccordionCO';
3
+
4
+ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
5
+ describe('PUI-14324 - Accordion:: ApplyAriaDisabled prop - visual tests', () => {
6
+ before('loading page', async () => {
7
+ const errorOnGo = await DSAccordionCO.applyAriaDisabled.go();
8
+ if (errorOnGo) throw errorOnGo;
9
+ });
10
+ it('01: first Accordion item should be focused and content not displayed - click', async () => {
11
+ const firstItem = await DSAccordionCO.getAccordionHeader(0);
12
+ await firstItem.click();
13
+ const snapshot = await browser.checkSnapshot(DSAccordionCO.snapshotPath('accordion-aria-disabled-focused-mouse'));
14
+ await expect(snapshot).toEqual(0);
15
+ });
16
+ it('02: second Accordion item should be focused and content not displayed - Tab + Enter', async () => {
17
+ await browser.keys(Key.Tab);
18
+ await browser.keys(Key.Enter);
19
+ const snapshot = await browser.checkSnapshot(DSAccordionCO.snapshotPath('accordion-aria-disabled-focused-keys'));
20
+ await expect(snapshot).toEqual(0);
21
+ });
22
+ });
23
+ }
@@ -0,0 +1,23 @@
1
+ import DSAccordionCO from '../DSAccordionCO';
2
+
3
+ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
4
+ // New coverage for the ControlledTest story (previously untested).
5
+ describe('PUI-18650 - Accordion, controlled -func', () => {
6
+ before('loading page', async () => {
7
+ const errorOnGo = await DSAccordionCO.controlled.go();
8
+ if (errorOnGo) throw errorOnGo;
9
+ });
10
+ it('01: single-open: opening another item collapses the previously open one', async () => {
11
+ await expect(await DSAccordionCO.getAccordionHeader(0)).toHaveAttribute('aria-expanded', 'true');
12
+ await (await DSAccordionCO.getAccordionHeader(1)).click();
13
+ await expect(await DSAccordionCO.getAccordionHeader(1)).toHaveAttribute('aria-expanded', 'true');
14
+ await expect(await DSAccordionCO.getAccordionHeader(0)).toHaveAttribute('aria-expanded', 'false');
15
+ });
16
+ it('02: multiple-open: opening two items keeps both expanded', async () => {
17
+ await (await DSAccordionCO.getAccordionHeader(3)).click();
18
+ await (await DSAccordionCO.getAccordionHeader(4)).click();
19
+ await expect(await DSAccordionCO.getAccordionHeader(3)).toHaveAttribute('aria-expanded', 'true');
20
+ await expect(await DSAccordionCO.getAccordionHeader(4)).toHaveAttribute('aria-expanded', 'true');
21
+ });
22
+ });
23
+ }
@@ -0,0 +1,65 @@
1
+ import DSAccordionCO from '../DSAccordionCO';
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
+ // Structural coverage for custom actions living OUTSIDE the disclosure trigger.
10
+ // Originally written for PUI-17912 (custom actions moved out of the role="heading" container).
11
+ // PUI-18742 migrated ds-accordion to a native <details>/<summary> disclosure, which supersedes
12
+ // that fix: the <summary> IS the toggle, the heading container now sits INSIDE it, and heading
13
+ // semantics (role="heading" + aria-level) are opt-in per consumer via the
14
+ // dsAccordionItemHeaderContainer slot prop — see role/DSAccordion.role-heading.func.spec.js.
15
+ // The invariant that still matters here: nothing interactive is nested inside the trigger.
16
+ describe('PUI-18621 - DSAccordion:: heading container structure after renderCustomActions fix - func', () => {
17
+ before('loading page', async () => {
18
+ const errorOnGo = await DSAccordionCO.headerControls.go();
19
+ if (errorOnGo) throw errorOnGo;
20
+ });
21
+
22
+ it('01: summary trigger should wrap the heading container and no other interactive elements', async () => {
23
+ const trigger = await DSAccordionCO.getAccordionHeader(0);
24
+ await expect(await trigger.getTagName()).toBe('summary');
25
+
26
+ const headingContainer = await DSAccordionCO.getAccordionItemHeaderContainerByIndex(0);
27
+ await expect(headingContainer).toExist();
28
+
29
+ // The <summary> is the toggle itself, so no nested <button> may live inside it.
30
+ const buttonsInsideTrigger = await trigger.$$('button');
31
+ await expect(buttonsInsideTrigger.length).toBe(0);
32
+ });
33
+
34
+ it('02: custom actions container should exist outside the heading container', async () => {
35
+ const customActionsContainer = await DSAccordionCO.getAccordionItemHeaderCustomActionsContainerByIndex(0);
36
+ await expect(customActionsContainer).toExist();
37
+ });
38
+
39
+ it('03: action buttons in custom actions container should reflect correct enabled/disabled state', async () => {
40
+ const enabledContainer = await DSAccordionCO.getAccordionItemHeaderCustomActionsContainerByIndex(0);
41
+ const enabledButton = await enabledContainer.$('[data-testid="ds-button"]');
42
+ await expect(enabledButton).toBeDisplayed();
43
+ await expect(enabledButton).toBeEnabled();
44
+
45
+ const disabledContainer = await DSAccordionCO.getAccordionItemHeaderCustomActionsContainerByIndex(2);
46
+ const disabledButton = await disabledContainer.$('[data-testid="ds-button"]');
47
+ await expect(disabledButton).toBeDisplayed();
48
+ await expect(disabledButton).not.toBeEnabled();
49
+ });
50
+
51
+ it('04: toolbar trigger in custom actions should open dropdown menu on click', async () => {
52
+ // Hardened after the cloud-only "Login not displayed" flake (see QA_NOTES.md): wait for the
53
+ // trigger to be clickable, then assert the DSDropdownMenuV2 item wrapper is displayed before
54
+ // reaching for the option, so a menu that never opened fails fast instead of burning the
55
+ // 10s waitForDisplayed. `p*=Login` is tag-qualified — DSTypography variant="b1" renders a <p>.
56
+ const toolbar = await DSAccordionCO.getToolbarByIndex(0);
57
+ await toolbar.waitForClickable({ timeout: 10000 });
58
+ await toolbar.click();
59
+ const menu = await DSAccordionCO.getToolbarMenuByIndex(0);
60
+ await expect(menu).toBeDisplayed();
61
+ const firstMenuOption = await $('p*=Login');
62
+ await expect(firstMenuOption).toBeDisplayed();
63
+ });
64
+ });
65
+ }
@@ -0,0 +1,19 @@
1
+ import DSAccordionCO from '../DSAccordionCO';
2
+
3
+ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
4
+ // New coverage for the PUI9261InputInside story (previously untested).
5
+ describe('PUI-18651 - Accordion, input inside content -func', () => {
6
+ before('loading page', async () => {
7
+ const errorOnGo = await DSAccordionCO.inputInside.go();
8
+ if (errorOnGo) throw errorOnGo;
9
+ });
10
+ it('01: should type into an input rendered inside the open accordion item', async () => {
11
+ // DSInputText forwards `data-testid` through its global attributes onto the <input> itself
12
+ // (StyledInput), not onto the wrapper — so the testid IS the input, never its ancestor.
13
+ const input = await $('[data-testid="task-name"]');
14
+ await input.waitForDisplayed();
15
+ await input.setValue('Test task');
16
+ await expect(input).toHaveValue('Test task');
17
+ });
18
+ });
19
+ }
@@ -0,0 +1,21 @@
1
+ /* eslint-disable max-lines */
2
+ import DSAccordionCO from '../DSAccordionCO';
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-17165 - Accordion: Role heading', () => {
11
+ before('loading page', async () => {
12
+ const errorOnGo = await DSAccordionCO.subtitle.go();
13
+ if (errorOnGo) throw errorOnGo;
14
+ });
15
+ it('01: should have role heading on accordion item header', async () => {
16
+ const header = await DSAccordionCO.getAccordionItemHeaderContainerByIndex(0);
17
+ await expect(header).toHaveAttribute('role', 'heading');
18
+ await expect(header).toHaveAttribute('aria-level', '2');
19
+ });
20
+ });
21
+ }
@@ -0,0 +1,42 @@
1
+ /* eslint-disable wdio/no-pause */
2
+ import { Key } from 'webdriverio';
3
+ import DSAccordionCO from '../DSAccordionCO';
4
+
5
+ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
6
+ describe('PUI-17174 - Accordion: Scrollable content -Visual', () => {
7
+ before('loading page', async () => {
8
+ const errorOnGo = await DSAccordionCO.scrollableContent.go();
9
+ if (errorOnGo) throw errorOnGo;
10
+ });
11
+ it('01: should display first accordion header focused', async () => {
12
+ await browser.eyesOpen();
13
+ await (await DSAccordionCO.getAccordionHeader(1)).waitForDisplayed();
14
+ await browser.keys(Key.Tab);
15
+ await browser.keys(Key.Return);
16
+ const snapshot = await browser.eyesCheckSnapshot(DSAccordionCO.snapshotPath('accordion-scrollable-default'));
17
+ await expect(snapshot).toEqual(0);
18
+ });
19
+ it('02: should display scrollable content focused', async () => {
20
+ await browser.eyesOpen();
21
+ await browser.keys(Key.ArrowDown);
22
+ await browser.keys(Key.ArrowUp);
23
+ await browser.keys(Key.Tab);
24
+ await (await DSAccordionCO.getAccordionHeader(1)).waitForDisplayed();
25
+ const snapshot = await browser.eyesCheckSnapshot(DSAccordionCO.snapshotPath('accordion-scrollable-top'));
26
+ await expect(snapshot).toEqual(0);
27
+ });
28
+ it('03: should display scrollable content scrolled to the bottom', async () => {
29
+ await browser.eyesOpen();
30
+ await browser.keys(Key.ArrowDown);
31
+ await browser.keys(Key.ArrowDown);
32
+ await browser.keys(Key.ArrowDown);
33
+ await browser.keys(Key.ArrowDown);
34
+ await browser.keys(Key.ArrowDown);
35
+ await browser.keys(Key.ArrowDown);
36
+ await browser.keys(Key.ArrowDown);
37
+ await (await DSAccordionCO.getAccordionHeader(1)).waitForDisplayed();
38
+ const snapshot = await browser.eyesCheckSnapshot(DSAccordionCO.snapshotPath('accordion-scrollable-bottom'));
39
+ await expect(snapshot).toEqual(0);
40
+ });
41
+ });
42
+ }
@@ -0,0 +1,25 @@
1
+ /* eslint-disable max-lines */
2
+ import DSAccordionCO from '../DSAccordionCO';
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-15347 - Accordion: Slots -AxeCore', () => {
12
+ before('loading page', async () => {
13
+ const errorOnGo = await DSAccordionCO.slotsURL.go();
14
+ if (errorOnGo) throw errorOnGo;
15
+ });
16
+ it('01: should have accordion with custom slots (aria & data) and pass axe-core scan', async () => {
17
+ const header = await DSAccordionCO.getAccordionItemHeaderPrimaryTitleSlotByIndex(0);
18
+ await header.click();
19
+ const content = await DSAccordionCO.getAccordionItemContentContainerSlotByIndex(0);
20
+ await content.waitForDisplayed();
21
+ const result = await axeCoreCheck();
22
+ expect(result.length).toBe(0);
23
+ });
24
+ });
25
+ }