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
@@ -0,0 +1,67 @@
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-15349 - Accordion: Slots -Func', () => {
11
+ before('loading page', async () => {
12
+ const errorOnGo = await DSAccordionCO.slotsURL.go();
13
+ if (errorOnGo) throw errorOnGo;
14
+ });
15
+ it('01: should have a custom aria-label for each slot', async () => {
16
+ const root = await DSAccordionCO.getAccordionContainerSlotByIndex();
17
+ const itemHeader = await DSAccordionCO.getAccordionItemHeaderSlotByIndex();
18
+ const itemContainer = await DSAccordionCO.getAccordionItemContainerSlotByIndex();
19
+ const itemHeaderAddon = await DSAccordionCO.getAccordionItemHeaderAddonSlotByIndex();
20
+ const itemHeaderContainer = await DSAccordionCO.getAccordionItemHeaderContainerSlotByIndex();
21
+ const headerPrimaryTitle = await DSAccordionCO.getAccordionItemHeaderPrimaryTitleSlotByIndex();
22
+ const headerSecondaryTitle = await DSAccordionCO.getAccordionItemHeaderSecondaryTitleSlotByIndex();
23
+ const headerTitlesContainer = await DSAccordionCO.getAccordionItemHeaderTitlesContainerSlotByIndex();
24
+ await itemHeader.click();
25
+ const itemContentContainer = await DSAccordionCO.getAccordionItemContentContainerSlotByIndex();
26
+ await itemContentContainer.waitForDisplayed();
27
+ await expect(root).toHaveAttribute('aria-label', 'im container aria');
28
+ await expect(itemHeader).toHaveAttribute('aria-label', 'im itemheader aria');
29
+ await expect(itemContainer).toHaveAttribute('aria-label', 'im item container aria');
30
+ await expect(itemHeaderAddon).toHaveAttribute('aria-label', 'im itemheaderaddon aria');
31
+ await expect(itemHeaderContainer).toHaveAttribute('aria-label', 'im itemheadercontainer aria');
32
+ await expect(itemContentContainer).toHaveAttribute('aria-label', 'im itemcontentcontainer aria');
33
+ await expect(headerPrimaryTitle).toHaveAttribute('aria-label', 'im itemheaderprimarytitle aria');
34
+ await expect(headerSecondaryTitle).toHaveAttribute('aria-label', 'im itemheadersecondarytitle aria');
35
+ await expect(headerTitlesContainer).toHaveAttribute('aria-label', 'im itemheadertitlecontainer aria');
36
+ });
37
+ it('02: should have a custom data-testid for each slot', async () => {
38
+ const root = await DSAccordionCO.getAccordionContainerSlotByIndex();
39
+ const itemHeader = await DSAccordionCO.getAccordionItemHeaderSlotByIndex();
40
+ const itemContainer = await DSAccordionCO.getAccordionItemContainerSlotByIndex();
41
+ const itemHeaderAddon = await DSAccordionCO.getAccordionItemHeaderAddonSlotByIndex();
42
+ const itemHeaderContainer = await DSAccordionCO.getAccordionItemHeaderContainerSlotByIndex();
43
+ const headerPrimaryTitle = await DSAccordionCO.getAccordionItemHeaderPrimaryTitleSlotByIndex();
44
+ const headerSecondaryTitle = await DSAccordionCO.getAccordionItemHeaderSecondaryTitleSlotByIndex();
45
+ const headerTitlesContainer = await DSAccordionCO.getAccordionItemHeaderTitlesContainerSlotByIndex();
46
+ const itemContentContainer = await DSAccordionCO.getAccordionItemContentContainerSlotByIndex();
47
+ await itemContentContainer.waitForDisplayed();
48
+ await expect(root).toHaveAttribute('data-testid', 'im container data');
49
+ await expect(itemHeader).toHaveAttribute('data-testid', 'im itemheader data');
50
+ await expect(itemContainer).toHaveAttribute('data-testid', 'im item container data');
51
+ await expect(itemHeaderAddon).toHaveAttribute('data-testid', 'im itemheaderaddon data');
52
+ await expect(itemHeaderContainer).toHaveAttribute('data-testid', 'im itemheadercontainer data');
53
+ await expect(itemContentContainer).toHaveAttribute('data-testid', 'im itemcontentcontainer data');
54
+ await expect(headerPrimaryTitle).toHaveAttribute('data-testid', 'im itemheaderprimarytitle data');
55
+ await expect(headerSecondaryTitle).toHaveAttribute('data-testid', 'im itemheadersecondarytitle data');
56
+ await expect(headerTitlesContainer).toHaveAttribute('data-testid', 'im itemheadertitlecontainer data');
57
+ });
58
+ it('03: should have a custom lang attribute for header, primary and secondary titles', async () => {
59
+ const headerPrimaryTitle = await DSAccordionCO.getAccordionItemHeaderPrimaryTitleSlotByIndex();
60
+ const headerSecondaryTitle = await DSAccordionCO.getAccordionItemHeaderSecondaryTitleSlotByIndex();
61
+ const itemHeader = await DSAccordionCO.getAccordionItemHeaderSlotByIndex();
62
+ await expect(headerPrimaryTitle).toHaveAttribute('lang', 'en-US');
63
+ await expect(headerSecondaryTitle).toHaveAttribute('lang', 'es-ES');
64
+ await expect(itemHeader).toHaveAttribute('lang', 'en-US');
65
+ });
66
+ });
67
+ }
@@ -0,0 +1,18 @@
1
+ import DSAccordionCO from '../DSAccordionCO';
2
+
3
+ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
4
+ describe('PUI-15348 - Accordion: Slots -Visual', () => {
5
+ before('loading page', async () => {
6
+ const errorOnGo = await DSAccordionCO.slotsURL.go();
7
+ if (errorOnGo) throw errorOnGo;
8
+ });
9
+ it('01: should display visually customized-slots (colors) accordion and matchbaseline', async () => {
10
+ const header = await DSAccordionCO.getAccordionItemHeaderPrimaryTitleSlotByIndex(0);
11
+ await header.click();
12
+ const content = await DSAccordionCO.getAccordionItemContentContainerSlotByIndex(0);
13
+ await content.waitForDisplayed();
14
+ const snapshot = await browser.checkSnapshot(DSAccordionCO.snapshotPath('accordion-slots'));
15
+ await expect(snapshot).toEqual(0);
16
+ });
17
+ });
18
+ }
@@ -0,0 +1,20 @@
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-17178 - Accordion: wrapLabel -Visual', () => {
7
+ before('loading page', async () => {
8
+ const errorOnGo = await DSAccordionCO.wrapLabel.go();
9
+ if (errorOnGo) throw errorOnGo;
10
+ });
11
+ it('01: should display accordion title and secondary title wrapped', 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-wrap-label'));
17
+ await expect(snapshot).toEqual(0);
18
+ });
19
+ });
20
+ }
@@ -15,11 +15,11 @@ export default class DSAutocompleteCO extends PageObject {
15
15
 
16
16
  // selectors
17
17
  static async getAutocompleteInput() {
18
- return $('[data-testid="ds-input-text-input"]');
18
+ return $('[data-testid="ds-inputtext-input"]');
19
19
  }
20
20
 
21
21
  static async getClearBtn() {
22
- return $('[data-testid="ds-input-text-clear-button"]');
22
+ return $('[data-testid="ds-inputtext-input-clear-button"]');
23
23
  }
24
24
 
25
25
  static async getAutocompleteMenuList() {
@@ -27,7 +27,7 @@ export default class DSAutocompleteCO extends PageObject {
27
27
  }
28
28
 
29
29
  static async getAutocompleteOptionLabel() {
30
- return $('[data-testid="ds-menu-item-menu-item-label"]');
30
+ return $('[data-testid="ds-menuitem-menu-item-label"]');
31
31
  }
32
32
 
33
33
  static async getAutocompleteOptions() {
@@ -0,0 +1,22 @@
1
+ import DSButtonV3CO from './DSButtonV3CO';
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-14396 - [ButtonV3] applyAriaDisabled prop - axe-core test', () => {
11
+ before('loading page', async () => {
12
+ const errorOnGo = await DSButtonV3CO.applyAriaDisabled.go();
13
+ if (errorOnGo) throw errorOnGo;
14
+ });
15
+ it('01: should display ButtonV3 with aria-disabled and pass axe-core scan', async () => {
16
+ const button = await DSButtonV3CO.getButtonByIndex(0);
17
+ await button.click();
18
+ const result = await axeCoreCheck();
19
+ expect(result.length).toBe(0);
20
+ });
21
+ });
22
+ }
@@ -0,0 +1,33 @@
1
+ import DSButtonV3CO from './DSButtonV3CO';
2
+
3
+ // Tests for the fix introduced in PUI-17909:
4
+ // aria-disabled is no longer emitted as "false" on interactive buttons. A default (enabled) button
5
+ // carries no aria-disabled at all, and a native `disabled` button conveys its state via the native
6
+ // `disabled` attribute, so aria-disabled is intentionally absent there too (it was dropped from the
7
+ // emission condition, which is now applyAriaDisabled || readOnly).
8
+ // Both states already exist in the ShowcaseTest story (index 0 = enabled, index 3 = disabled).
9
+ // Pure DOM-attribute assertions produce identical results in every browser, so this runs Chrome-only.
10
+ if (
11
+ (!browser.capabilities['ice:options'].isPhone &&
12
+ !browser.capabilities['ice:options'].isTablet &&
13
+ browser.capabilities.browserName === 'chrome') ||
14
+ browser.capabilities.browserName === 'Chrome'
15
+ ) {
16
+ describe('PUI-18796 - DSButtonV3:: aria-disabled absent on enabled and disabled buttons - Func', () => {
17
+ before('loading page', async () => {
18
+ const errorOnGo = await DSButtonV3CO.showcaseURL.go();
19
+ if (errorOnGo) throw errorOnGo;
20
+ });
21
+
22
+ it('01: should not emit aria-disabled on enabled or native-disabled buttons', async () => {
23
+ // Enabled (default): aria-disabled must be entirely absent — the core PUI-17909 fix.
24
+ const enabled = await DSButtonV3CO.getButtonByIndex(0);
25
+ await expect(enabled).not.toHaveAttribute('aria-disabled');
26
+
27
+ // Native disabled: relies on the native `disabled` attribute, aria-disabled stays absent.
28
+ const disabled = await DSButtonV3CO.getButtonByIndex(3);
29
+ await expect(disabled).toHaveAttribute('disabled');
30
+ await expect(disabled).not.toHaveAttribute('aria-disabled');
31
+ });
32
+ });
33
+ }
@@ -0,0 +1,48 @@
1
+ import { Key } from 'webdriverio';
2
+ import DSButtonV3CO from './DSButtonV3CO';
3
+ import { mouseOver } from '../helpers';
4
+
5
+ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
6
+ describe('PUI-13515 - ButtonV3 - tooltip on disabled and focus with aria-disabled -Visual', () => {
7
+ before('loading page', async () => {
8
+ const errorOnGo = await DSButtonV3CO.disabledURL.go();
9
+ if (errorOnGo) throw errorOnGo;
10
+ });
11
+ it('01: should display a tooltip when hovering over a disabled button', async () => {
12
+ const button = await DSButtonV3CO.getButtonByIndex(0);
13
+ await button.waitForDisplayed({ timeout: 5000 });
14
+ await mouseOver(button);
15
+ // legacy-only: live imports DSTooltipV3CO from e2e/ds-tooltip-v3, which has no legacy twin (ds-tooltip-v3 is not ported); DSButtonV3CO.getTooltip() reads the same data-testid as live (ds-tooltip-v3-tooltip-text-wrapper)
16
+ const tooltip = await DSButtonV3CO.getTooltip();
17
+ await tooltip.waitForDisplayed({ timeout: 5000 });
18
+ const snapshot = await browser.checkSnapshot(DSButtonV3CO.snapshotPath('ds-button-v3-disabled-tooltip'));
19
+ await expect(snapshot).toEqual(0);
20
+ });
21
+ it('02: should display a focus ring in aria-disabled button', async () => {
22
+ await browser.keys(Key.Tab);
23
+ const snapshot = await browser.checkSnapshot(DSButtonV3CO.snapshotPath('ds-button-v3-aria-disabled-focus'));
24
+ await expect(snapshot).toEqual(0);
25
+ });
26
+ });
27
+ describe('PUI-14397 - ButtonV3 - applyAriaDisabled prop - visual Test', () => {
28
+ before('loading page', async () => {
29
+ const errorOnGo = await DSButtonV3CO.applyAriaDisabled.go();
30
+ if (errorOnGo) throw errorOnGo;
31
+ });
32
+ it('01: the first aria-disabled button should be focused and counter should not increase', async () => {
33
+ await browser.eyesOpen();
34
+ const firstButton = await DSButtonV3CO.getButtonByIndex(0);
35
+ await firstButton.click();
36
+ const snapshot = await browser.eyesCheckSnapshot(DSButtonV3CO.snapshotPath('buttonV3-aria-disabled-mouse'));
37
+ await expect(snapshot).toEqual(0);
38
+ });
39
+ it('02: The fifth aria-disabled button should be focused and counter should not increase', async () => {
40
+ await browser.eyesOpen();
41
+ const fourthButton = await DSButtonV3CO.getButtonByIndex(3);
42
+ await fourthButton.click();
43
+ await browser.keys(Key.Tab);
44
+ const snapshot = await browser.eyesCheckSnapshot(DSButtonV3CO.snapshotPath('buttonV3-aria-disabled-kb-nav'));
45
+ await expect(snapshot).toEqual(0);
46
+ });
47
+ });
48
+ }
@@ -0,0 +1,27 @@
1
+ import DSButtonV3CO from './DSButtonV3CO';
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-15109 - ButtonV3 - Slots -Func', () => {
10
+ before('loading page', async () => {
11
+ const errorOnGo = await DSButtonV3CO.slotsTest.go();
12
+ if (errorOnGo) throw errorOnGo;
13
+ });
14
+ it('01: should find the expected SLOTS for all the present buttons', async () => {
15
+ const buttonSlots = (await DSButtonV3CO.getRootSlots()).length;
16
+ await expect(buttonSlots).toEqual(40);
17
+ });
18
+ it('02: should find custom aria for the SLOT', async () => {
19
+ const button = await DSButtonV3CO.getRootSlotByIdnex(1);
20
+ await expect(button).toHaveAttribute('aria-label', 'im root aria');
21
+ });
22
+ it('03: should find custom data for the SLOT', async () => {
23
+ const button = await DSButtonV3CO.getRootSlotByIdnex(1);
24
+ await expect(button).toHaveAttribute('data-testid', 'im root data');
25
+ });
26
+ });
27
+ }
@@ -0,0 +1,28 @@
1
+ import DSButtonV3CO from './DSButtonV3CO';
2
+
3
+ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
4
+ describe('PUI-17055 - ButtonV3 - Type submit -Func', () => {
5
+ beforeEach('loading page', async () => {
6
+ const errorOnGo = await DSButtonV3CO.submitBtn.go();
7
+ if (errorOnGo) throw errorOnGo;
8
+ });
9
+ it('01: should submit on pressing Enter', async () => {
10
+ await browser.keys('Tab');
11
+ await browser.keys('Enter');
12
+ const didSubmit = await $('[data-testid="did-submit"]');
13
+ await expect(didSubmit).toHaveText('yes');
14
+ });
15
+ it('02: should submit on pressing Space', async () => {
16
+ await browser.keys('Tab');
17
+ await browser.keys('Enter');
18
+ const didSubmit = await $('[data-testid="did-submit"]');
19
+ await expect(didSubmit).toHaveText('yes');
20
+ });
21
+ it('03: should submit on click', async () => {
22
+ const button = await DSButtonV3CO.getButton();
23
+ await button.click();
24
+ const didSubmit = await $('[data-testid="did-submit"]');
25
+ await expect(didSubmit).toHaveText('yes');
26
+ });
27
+ });
28
+ }
@@ -0,0 +1,92 @@
1
+ import DSButtonV3CO from './DSButtonV3CO';
2
+ import { setTextSize, mouseOver } from '../helpers';
3
+
4
+ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
5
+ describe('PUI-12269 - ButtonV3 - Resize, long label -Visual', () => {
6
+ before('loading page', async () => {
7
+ const errorOnGo = await DSButtonV3CO.longlabelURL.go();
8
+ if (errorOnGo) throw errorOnGo;
9
+ });
10
+ beforeEach('maximize window', async () => {
11
+ await browser.maximizeWindow();
12
+ });
13
+ it('should display default long-labelled buttons showcase correctly', async () => {
14
+ await browser.eyesOpen();
15
+ const button = await DSButtonV3CO.getButtonByIndex(0);
16
+ await button.waitForDisplayed({ timeout: 5000 });
17
+ const snapshot = await browser.eyesCheckSnapshot(DSButtonV3CO.snapshotPath('ds-button-v3-longlabel-default'));
18
+ await expect(snapshot).toEqual(0);
19
+ });
20
+ it('should display default long-labelled buttons showcase after resize', async () => {
21
+ await browser.eyesOpen();
22
+ const button = await DSButtonV3CO.getButtonByIndex(0);
23
+ await button.waitForDisplayed({ timeout: 5000 });
24
+ await setTextSize(32);
25
+ const snapshot = await browser.eyesCheckSnapshot(DSButtonV3CO.snapshotPath('ds-button-v3-longlabel-resize'));
26
+ await expect(snapshot).toEqual(0);
27
+ });
28
+ });
29
+
30
+ describe('PUI-12268 - ButtonV3 - Resize, basic -Visual', () => {
31
+ before('loading page', async () => {
32
+ const errorOnGo = await DSButtonV3CO.showcaseURL.go();
33
+ if (errorOnGo) throw errorOnGo;
34
+ });
35
+ it('should display button showcase correctly', async () => {
36
+ const button = await DSButtonV3CO.getButtonByIndex(0);
37
+ await button.waitForDisplayed({ timeout: 5000 });
38
+ const snapshot = await browser.checkSnapshot(DSButtonV3CO.snapshotPath('ds-button-v3-showcase-default'));
39
+ await expect(snapshot).toEqual(0);
40
+ });
41
+ it('should display button showcase correctly after resize', async () => {
42
+ const button = await DSButtonV3CO.getButtonByIndex(0);
43
+ await button.waitForDisplayed({ timeout: 5000 });
44
+ await setTextSize(32);
45
+ const snapshot = await browser.checkSnapshot(DSButtonV3CO.snapshotPath('ds-button-v3-showcase-resize'));
46
+ await expect(snapshot).toEqual(0);
47
+ });
48
+ });
49
+
50
+ describe('PUI-13241 - ButtonV3 - Slot Customization -Visual', () => {
51
+ before('loading page', async () => {
52
+ const errorOnGo = await DSButtonV3CO.slotCustomizationURL.go();
53
+ if (errorOnGo) throw errorOnGo;
54
+ });
55
+ it('01: should custom focused, custom hovered and custom disabled buttons', async () => {
56
+ await browser.eyesOpen();
57
+ await browser.keys('Tab');
58
+ await browser.keys('Tab');
59
+ const button = await DSButtonV3CO.getButtonByIndex(0);
60
+ await button.waitForDisplayed({ timeout: 5000 });
61
+ await mouseOver(button);
62
+ const snapshot = await browser.eyesCheckSnapshot(
63
+ DSButtonV3CO.snapshotPath('ds-button-v3-customization-interacted'),
64
+ );
65
+ await expect(snapshot).toEqual(0);
66
+ });
67
+ it('02: should display two custom default buttons and disabled button hovered without changes', async () => {
68
+ await browser.eyesOpen();
69
+ await browser.keys('Tab');
70
+ const button = await DSButtonV3CO.getButtonByIndex(2);
71
+ await button.waitForDisplayed({ timeout: 5000 });
72
+ await mouseOver(button);
73
+ const snapshot = await browser.eyesCheckSnapshot(
74
+ DSButtonV3CO.snapshotPath('ds-button-v3-customization-defaults'),
75
+ );
76
+ await expect(snapshot).toEqual(0);
77
+ });
78
+ });
79
+ }
80
+
81
+ describe('PUI-12267 - ButtonV3 - Responsive -Visual', () => {
82
+ before('loading page', async () => {
83
+ const errorOnGo = await DSButtonV3CO.responsiveURL.go();
84
+ if (errorOnGo) throw errorOnGo;
85
+ });
86
+ it('should display button showcase with responsive behavior (small viewport, bigger font)', async () => {
87
+ const button = await DSButtonV3CO.getButtonByIndex(0);
88
+ await button.waitForDisplayed({ timeout: 5000 });
89
+ const snapshot = await browser.checkSnapshot(DSButtonV3CO.snapshotPath('ds-button-v3-responsive'));
90
+ await expect(snapshot).toEqual(0);
91
+ });
92
+ });
@@ -0,0 +1,60 @@
1
+ import { PATH_E2E_BUTTON_V3 } from '../../environments/storybook/paths';
2
+ import { PageObject, Urlbuilder } from '../helpers';
3
+ export default class DSButtonV3CO extends PageObject {
4
+ static showcaseURL = new Urlbuilder(PATH_E2E_BUTTON_V3, 'showcase-test');
5
+
6
+ static responsiveURL = new Urlbuilder(PATH_E2E_BUTTON_V3, 'responsive-test');
7
+
8
+ static longlabelURL = new Urlbuilder(PATH_E2E_BUTTON_V3, 'long-labels-test');
9
+
10
+ static slotCustomizationURL = new Urlbuilder(PATH_E2E_BUTTON_V3, 'custom-hardcoded-test');
11
+
12
+ static disabledURL = new Urlbuilder(PATH_E2E_BUTTON_V3, 'disabled-and-aria-disabled-button-with-tooltip');
13
+
14
+ static applyAriaDisabled = new Urlbuilder(PATH_E2E_BUTTON_V3, 'apply-aria-disabled-test');
15
+
16
+ static slotsTest = new Urlbuilder(PATH_E2E_BUTTON_V3, 'slots-test');
17
+
18
+ static submitBtn = new Urlbuilder(PATH_E2E_BUTTON_V3, 'pui-16729-buttons-can-submit-forms');
19
+
20
+ static themeFontURL = new Urlbuilder(PATH_E2E_BUTTON_V3, 'theme-font-family-test');
21
+
22
+ // selectors
23
+ static async getButtonByIndex(index) {
24
+ return $$('[data-testid="ds-button"]')[index];
25
+ }
26
+
27
+ static async getButton() {
28
+ return $('[data-testid="ds-button"]');
29
+ }
30
+
31
+ static async getRootSlots() {
32
+ return $$('[data-dimsum-slot="dsButtonRoot"]');
33
+ }
34
+
35
+ static async getRootSlotByIdnex(index = 0) {
36
+ return $$('[data-dimsum-slot="dsButtonRoot"]')[index];
37
+ }
38
+
39
+ // legacy-only: no legacy twin of DSTooltipV3CO (ds-tooltip-v3 is not ported); same data-testid selector as live DSTooltipV3CO.getTooltip()
40
+ static async getTooltip() {
41
+ return $('[data-testid="ds-tooltip-v3-tooltip-text-wrapper"]');
42
+ }
43
+
44
+ static async getButtonByLabel(label) {
45
+ return $(`button*=${label}`);
46
+ }
47
+
48
+ static async getThemedButton() {
49
+ return $('[data-testid="theme-font-sentinel"] [data-testid="ds-button"]');
50
+ }
51
+
52
+ static async getFallbackButton() {
53
+ return $('[data-testid="theme-font-fallback"] [data-testid="ds-button"]');
54
+ }
55
+
56
+ // Snapshot
57
+ static snapshotPath(example = 'basic') {
58
+ return PageObject.getSnapshotPathBuilder('ButtonV3', example);
59
+ }
60
+ }
@@ -0,0 +1,30 @@
1
+ import DSButtonV3CO from '../DSButtonV3CO';
2
+
3
+ // Tests the theme-driven font-family support shipped under PUI-18210
4
+ // (V3 buttons reuse the b1 typography base → typographyFontFamily → theme.fonts.default,
5
+ // falling back to proxima-nova). Theme-agnostic: uses a sentinel font, never the
6
+ // dsConsumer POC theme values, so it survives any future theme change.
7
+ if (
8
+ (!browser.capabilities['ice:options'].isPhone &&
9
+ !browser.capabilities['ice:options'].isTablet &&
10
+ browser.capabilities.browserName === 'chrome') ||
11
+ browser.capabilities.browserName === 'Chrome'
12
+ ) {
13
+ describe('PUI-18708 - DSButtonV3:: theme font-family wiring - Func', () => {
14
+ before('loading page', async () => {
15
+ const errorOnGo = await DSButtonV3CO.themeFontURL.go();
16
+ if (errorOnGo) throw errorOnGo;
17
+ });
18
+
19
+ it('01: should read font-family from theme with proxima-nova fallback', async () => {
20
+ const themed = await DSButtonV3CO.getThemedButton();
21
+ await themed.waitForDisplayed();
22
+ const themedFont = (await themed.getCSSProperty('font-family')).value.toLowerCase();
23
+ await expect(themedFont).toContain('sentinelfont');
24
+
25
+ const fallback = await DSButtonV3CO.getFallbackButton();
26
+ const fallbackFont = (await fallback.getCSSProperty('font-family')).value.toLowerCase();
27
+ await expect(fallbackFont).toContain('proxima-nova');
28
+ });
29
+ });
30
+ }
@@ -19,24 +19,24 @@ if (
19
19
  const checkbox = await DSControlledCheckboxCO.getCustomCheckbox();
20
20
  await checkbox.waitForExist();
21
21
  const result = await axeCoreCheck();
22
- expect(result.length).toBe(0);
22
+ await expect(result).toHaveLength(0);
23
23
  });
24
24
  it('02: Evaluate checkbox accessibility with axe-core (focused)', async () => {
25
25
  await browser.keys(Key.Tab);
26
26
  const result = await axeCoreCheck();
27
- expect(result.length).toBe(0);
27
+ await expect(result).toHaveLength(0);
28
28
  });
29
29
  it('03: Evaluate checkbox accessibility with axe-core (hovered)', async () => {
30
30
  const checkbox = await DSControlledCheckboxCO.getCustomCheckbox();
31
31
  await mouseOver(checkbox);
32
32
  const result = await axeCoreCheck();
33
- expect(result.length).toBe(0);
33
+ await expect(result).toHaveLength(0);
34
34
  });
35
35
  it('04: Evaluate checkbox accessibility with axe-core (clicked)', async () => {
36
36
  const checkbox = await DSControlledCheckboxCO.getCustomCheckbox();
37
37
  await checkbox.click();
38
38
  const result = await axeCoreCheck();
39
- expect(result.length).toBe(0);
39
+ await expect(result).toHaveLength(0);
40
40
  });
41
41
  });
42
42
  }
@@ -0,0 +1,56 @@
1
+ import { Key } from 'webdriverio';
2
+ import { mouseOver } from '../../../helpers';
3
+ import DSControlledCheckboxCO from '../DSControlledCheckboxCO';
4
+
5
+ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
6
+ describe('PUI-18822 - DSControlledCheckbox: update to latest spec and typography- visual test', () => {
7
+ before('loading page', async () => {
8
+ const errorOnGo = await DSControlledCheckboxCO.basicURL.go();
9
+ if (errorOnGo) throw errorOnGo;
10
+ });
11
+
12
+ it('01: the checked checkbox is not focused', async () => {
13
+ const checkbox = await DSControlledCheckboxCO.getCustomCheckbox();
14
+ await checkbox.waitForExist();
15
+ const snapshot = await browser.percyCheckScreenshot();
16
+ await expect(snapshot).toEqual(0);
17
+ });
18
+
19
+ it('02: checkbox hover even when checked', async () => {
20
+ const controlBox = await DSControlledCheckboxCO.getCheckboxInputWrapper();
21
+ await controlBox.moveTo();
22
+ const snapshot = await browser.percyCheckScreenshot();
23
+ await expect(snapshot).toEqual(0);
24
+ });
25
+
26
+ it('03: the checked checkbox is focused', async () => {
27
+ await browser.keys(Key.Tab);
28
+ const checkbox = await DSControlledCheckboxCO.getCustomCheckbox();
29
+ await expect(checkbox).toBeFocused();
30
+ const snapshot = await browser.percyCheckScreenshot();
31
+ await expect(snapshot).toEqual(0);
32
+ });
33
+
34
+ it('04: checkbox is focused but unchecked', async () => {
35
+ await browser.keys(Key.Space);
36
+ const checkbox = await DSControlledCheckboxCO.getCustomCheckbox();
37
+ await expect(checkbox).toBeFocused();
38
+ const snapshot = await browser.percyCheckScreenshot();
39
+ await expect(snapshot).toEqual(0);
40
+ });
41
+
42
+ it('05: checkbox not focused, not hovered when unchecked', async () => {
43
+ await browser.keys(Key.Tab);
44
+ await mouseOver(null, 400, 300);
45
+ const snapshot = await browser.percyCheckScreenshot();
46
+ await expect(snapshot).toEqual(0);
47
+ });
48
+
49
+ it('06: checkbox hover even when unchecked', async () => {
50
+ const controlBox = await DSControlledCheckboxCO.getCheckboxInputWrapper();
51
+ await controlBox.moveTo();
52
+ const snapshot = await browser.percyCheckScreenshot();
53
+ await expect(snapshot).toEqual(0);
54
+ });
55
+ });
56
+ }
@@ -1,5 +1,5 @@
1
1
  /* eslint-disable import/no-relative-packages */
2
- import { PATH_E2E_CHECKBOX } from '../../../environments/storybook/paths';
2
+ import { PATH_E2E_CHECKBOX, PATH_E2E_CHECKBOX_SLOTS } from '../../../environments/storybook/paths';
3
3
  import { PageObject, Urlbuilder, getElementByIndex } from '../../helpers';
4
4
 
5
5
  export default class DSControlledCheckboxCO extends PageObject {
@@ -21,10 +21,20 @@ export default class DSControlledCheckboxCO extends PageObject {
21
21
 
22
22
  static layoutURL = new Urlbuilder(PATH_E2E_CHECKBOX, 'layout-test');
23
23
 
24
+ static applyAriaDisabled = new Urlbuilder(PATH_E2E_CHECKBOX, 'apply-aria-disabled-test');
25
+
26
+ static themeFontURL = new Urlbuilder(PATH_E2E_CHECKBOX, 'theme-font-family-test');
27
+
28
+ static slotsTest = new Urlbuilder(PATH_E2E_CHECKBOX_SLOTS, 'slots-test');
29
+
24
30
  static async getCheckbox() {
25
31
  return $('[data-testid="ds-checkbox"]');
26
32
  }
27
33
 
34
+ static async getCheckboxInputWrapper() {
35
+ return $('[data-testid="ds-checkbox-input-wrapper"]');
36
+ }
37
+
28
38
  static async getCustomCheckbox() {
29
39
  return $('[data-testid="custom-data-testid"]');
30
40
  }
@@ -56,7 +66,7 @@ export default class DSControlledCheckboxCO extends PageObject {
56
66
  static getCheckboxByIndex = async (index) => getElementByIndex(this.getCheckboxes, index);
57
67
 
58
68
  static async getCheckboxLabels() {
59
- return $$('[data-testid="DS-SimpleTruncateText"]');
69
+ return $$('[data-testid="ds-checkbox-label"]');
60
70
  }
61
71
 
62
72
  static getCheckboxLabelByIndex = async (index) => getElementByIndex(this.getCheckboxLabels, index);
@@ -64,4 +74,49 @@ export default class DSControlledCheckboxCO extends PageObject {
64
74
  static snapshotPath(example = 'basic') {
65
75
  return PageObject.getSnapshotPathBuilder('DSControlledCheckbox', example, 'ds-controlled-checkbox');
66
76
  }
77
+
78
+ static async getThemedCheckboxLabel() {
79
+ return $('[data-testid="theme-font-sentinel"] [data-testid="ds-checkbox-label-typography"]');
80
+ }
81
+
82
+ static async getFallbackCheckboxLabel() {
83
+ return $('[data-testid="theme-font-fallback"] [data-testid="ds-checkbox-label-typography"]');
84
+ }
85
+
86
+ // Slots rendered through styled(DSTypography) expose the owner slot on
87
+ // `data-dimsum-parent-slot` (the element's own `data-dimsum-slot` is the typography root),
88
+ // while plain-tag slots expose it on `data-dimsum-slot`.
89
+ static async getSlotsRoot() {
90
+ return $('[data-testid="slots-wrapped"] [data-dimsum-slot="dsCheckboxRoot"]');
91
+ }
92
+
93
+ static async getSlotsInputWrapper() {
94
+ return $('[data-testid="slots-wrapped"] [data-dimsum-slot="dsCheckboxInputWrapper"]');
95
+ }
96
+
97
+ static async getSlotsInput() {
98
+ return $('[data-testid="slots-wrapped"] [data-dimsum-slot="dsCheckboxInput"]');
99
+ }
100
+
101
+ static async getSlotsLabel() {
102
+ return $('[data-testid="slots-wrapped"] [data-dimsum-slot="dsCheckboxLabel"]');
103
+ }
104
+
105
+ static async getSlotsLabelTypography() {
106
+ return $('[data-testid="slots-wrapped"] [data-dimsum-parent-slot="dsCheckboxLabelTypography"]');
107
+ }
108
+
109
+ static async getSlotsTruncatedLabel() {
110
+ return $('[data-testid="slots-truncated"] [data-dimsum-parent-slot="dsCheckboxTruncatedLabel"]');
111
+ }
112
+
113
+ // The truncation tooltip renders through a portal, outside the story wrapper, so both tooltip
114
+ // slots are queried document-wide instead of scoped to the instance.
115
+ static async getSlotsTooltipContainer() {
116
+ return $('[data-dimsum-slot="dsCheckboxTooltipContainer"]');
117
+ }
118
+
119
+ static async getSlotsTooltipText() {
120
+ return $('[data-dimsum-parent-slot="dsCheckboxTooltipText"]');
121
+ }
67
122
  }