dimsum-e2e-tests 3.70.0-next.4 → 3.70.0-next.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +204 -0
- package/ds-accordion/DSAccordion.visual.spec.js +6 -0
- package/ds-accordion/DSAccordionCO.js +11 -3
- package/ds-accordion/controlled/DSAccordion.controlled.func.spec.js +23 -0
- package/ds-accordion/header-structure/DSAccordion.header-structure.func.spec.js +49 -0
- package/ds-accordion/input-inside/DSAccordion.input-inside.func.spec.js +17 -0
- package/ds-accordion-native/DSAccordionNative.axe-core.func.spec.js +135 -0
- package/ds-accordion-native/DSAccordionNative.func.spec.js +200 -0
- package/ds-accordion-native/DSAccordionNative.visual.spec.js +158 -0
- package/ds-accordion-native/DSAccordionNativeCO.js +161 -0
- package/ds-accordion-native/QA_NOTES.md +88 -0
- package/ds-accordion-native/aria-disabled/DSAccordionNative.aria-disabled.axe-core.func.spec.js +25 -0
- package/ds-accordion-native/aria-disabled/DSAccordionNative.aria-disabled.visual.spec.js +28 -0
- package/ds-accordion-native/controlled/DSAccordionNative.controlled.func.spec.js +22 -0
- package/ds-accordion-native/header-structure/DSAccordionNative.header-structure.func.spec.js +53 -0
- package/ds-accordion-native/input-inside/DSAccordionNative.input-inside.func.spec.js +16 -0
- package/ds-accordion-native/role/DSAccordionNative.role-heading.func.spec.js +27 -0
- package/ds-accordion-native/scrollable-content/DSAccordionNative.scrollable-content.visual.spec.js +49 -0
- package/ds-accordion-native/slots/DSAccordionNative.slots.axe-core.func.spec.js +25 -0
- package/ds-accordion-native/slots/DSAccordionNative.slots.func.spec.js +73 -0
- package/ds-accordion-native/slots/DSAccordionNative.slots.visual.spec.js +21 -0
- package/ds-accordion-native/wrapLabel/DSAccordionNative.wrap-label.visual.spec.js +21 -0
- package/ds-apppicker/DSAppPickerCO.js +1 -1
- package/ds-autocomplete/DSAutocomplete.visual.spec.js +34 -0
- package/ds-autocomplete/DSAutocompleteCO.js +2 -0
- package/ds-card-v3/DSCardV3CO.js +14 -0
- package/ds-card-v3/accordion/DSCardV3.accordion-aria-structure.func.spec.js +41 -0
- package/ds-card-v3/disabled/DSCardV3.disabled-non-interactive.func.spec.js +25 -0
- package/ds-card-v3/multi-select/DSCardV3.multi-select.aria-grouping.func.spec.js +24 -0
- package/ds-card-v3/single-select/DSCardV3.single-select.aria-grouping.func.spec.js +24 -0
- package/ds-chat/DSChat.axe-core.func.spec.js +2 -2
- package/ds-chat/DSChat.visual.spec.js +3 -3
- package/ds-chat/DSChatCO.js +17 -23
- package/ds-chat/bubbles/slots/DSChatBubble.slots.axe-core.func.spec.js +24 -0
- package/ds-chat/bubbles/slots/DSChatBubble.slots.func.spec.js +49 -0
- package/ds-chat/bubbles/slots/DSChatBubble.slots.visual.spec.js +25 -0
- package/ds-chat/card/slots/DSChatCard.slots.axe-core.func.spec.js +24 -0
- package/ds-chat/card/slots/DSChatCard.slots.func.spec.js +47 -0
- package/ds-chat/card/slots/DSChatCard.slots.visual.spec.js +18 -0
- package/ds-chat/card/truncated-text/DSChatCard.truncated-text.func.spec.js +32 -0
- package/ds-chat/card/truncated-text/DSChatCard.truncated-text.visual.spec.js +26 -0
- package/ds-chat/card/with-notification-badges/DSChatCard.with-notification-badges.axe-core.func.spec.js +23 -0
- package/ds-chat/card/with-notification-badges/DSChatCard.with-notification-badges.visual.spec.js +17 -0
- package/ds-chat/components/BubbleCO.js +46 -3
- package/ds-chat/components/CardCO.js +77 -0
- package/ds-chat/components/ComposerCO.js +6 -6
- package/ds-chat/components/FloatingButtonCO.js +2 -2
- package/ds-chat/components/HeaderCO.js +2 -2
- package/ds-chat/components/TileCO.js +82 -0
- package/ds-chat/components/index.js +3 -2
- package/ds-chat/loadmore/DSChat-loadmore.func.spec.js +1 -1
- package/{ds-chat-tile → ds-chat/tile}/DSChat-tile.axe-core.func.spec.js +2 -2
- package/{ds-chat-tile → ds-chat/tile}/DSChat-tile.func.spec.js +1 -1
- package/{ds-chat-tile → ds-chat/tile}/DSChat-tile.visual.spec.js +2 -2
- package/{ds-chat-tile → ds-chat/tile}/aria-disabled/DSChat-tile.aria-disabled.axe-core.func.spec.js +2 -2
- package/{ds-chat-tile → ds-chat/tile}/aria-disabled/DSChat-tile.aria-disabled.visual.spec.js +1 -1
- package/ds-chat/tile/slots/DSChatTile.slots.func.spec.js +53 -0
- package/ds-chat/tile/slots/DSChatTile.slots.visual.spec.js +18 -0
- package/ds-controlled-form/ds-combobox/DSComboboxCO.js +2 -2
- package/ds-controlled-form/ds-controlled-checkbox/DSControlledCheckboxCO.js +1 -1
- package/ds-controlled-form/ds-controlled-inputgroup/DSControlledInputGroupCO.js +1 -1
- package/ds-data-table-async/DSDataTableCO.js +14 -12
- package/ds-data-table-async/basic/DSDataTable.basic.visual.spec.js +1 -1
- package/ds-data-table-async/components/FiltersCO.js +1 -1
- package/ds-data-table-async/menubutton/DSDataTable.MenuButton.keyboard.func.spec.js +8 -7
- package/ds-data-table-async/menubutton/DSDataTable.MenuButton.mouse.func.spec.js +6 -7
- package/ds-floating-context/DSFloatingContextCO.js +10 -0
- package/ds-floating-context/placement/DSFloatingContext.placement.visual.spec.js +48 -0
- package/ds-form-combobox-multi/DSComboboxMultiCO.js +11 -3
- package/ds-form-combobox-multi/aria-busy-loading/DSComboboxMulti.aria-busy-loading.axe-core.func.spec.js +55 -0
- package/ds-form-combobox-multi/aria-busy-loading/DSComboboxMulti.aria-busy-loading.func.spec.js +57 -0
- package/ds-form-combobox-multi/aria-disabled/DSComboboxMulti.aria-disabled.visual.spec.js +15 -0
- package/ds-form-combobox-multi/disabled/DSComboboxMulti.disabled.axe-core.func.spec.js +24 -0
- package/ds-form-combobox-multi/disabled/DSComboboxMulti.disabled.visual.spec.js +22 -0
- package/ds-form-combobox-multi/grouped/DSComboboxMulti.grouped.visual.spec.js +42 -0
- package/ds-form-combobox-multi/inline/DSComboboxMulti.inline.visual.spec.js +21 -0
- package/ds-form-combobox-multi/skeleton/DSComboboxMulti.skeleton.visual.spec.js +25 -0
- package/ds-form-combobox-single/DSComboboxSingleCO.js +11 -3
- package/ds-form-combobox-single/aria-busy-loading/DSComboboxSingle.aria-busy-loading.axe-core.func.spec.js +49 -0
- package/ds-form-combobox-single/aria-busy-loading/DSComboboxSingle.aria-busy-loading.func.spec.js +54 -0
- package/ds-form-combobox-single/aria-disabled/DSComboboxSingle.aria-disabled.visual.spec.js +18 -0
- package/ds-form-combobox-single/disabled/DSComboboxSingle.disabled.axe-core.func.spec.js +24 -0
- package/ds-form-combobox-single/disabled/DSComboboxSingle.disabled.visual.spec.js +22 -0
- package/ds-form-combobox-single/grouped/DSComboboxSingle.grouped.visual.spec.js +45 -0
- package/ds-form-combobox-single/inline/DSComboboxSingle.inline.visual.spec.js +23 -0
- package/ds-form-combobox-single/skeleton/DSComboboxSingle.skeleton.visual.spec.js +25 -0
- package/ds-form-date-range-picker/date-segment-aria-labels/DateRangePicker.date-segment-aria-labels.func.spec.js +64 -0
- package/ds-form-native-select/NativeSelect.axe-core.func.spec.js +39 -0
- package/ds-form-native-select/NativeSelect.visual.spec.js +33 -0
- package/ds-form-native-select/NativeSelectCO.js +6 -0
- package/ds-form-native-select/option-selection/NativeSelect.option-selection.func.spec.js +25 -0
- package/ds-leftnavigation/LeftNavigationCO.js +2 -2
- package/ds-menu-button/DSMenuButtonCO.js +23 -0
- package/ds-menu-button/slots/DSMenuButton.slots.func.spec.js +40 -0
- package/ds-menu-button/slots/DSMenuButton.slots.visual.spec.js +26 -0
- package/ds-modal-slide/ModalSlideCO.js +39 -0
- package/ds-modal-slide/custom-header/ModalSlide.customHeader.focusRing.visual.spec.js +2 -1
- package/ds-modal-slide/slots/ModalSlide.slots.func.spec.js +74 -0
- package/ds-modal-slide/slots/ModalSlide.slots.visual.spec.js +27 -0
- package/ds-notification-badge/DSNotificationBadge.visual.spec.js +17 -20
- package/ds-page-layout/PageLayoutCO.js +4 -4
- package/ds-progress-indicator/DSProgressIndicator.axe-core.func.spec.js +2 -0
- package/ds-progress-indicator/DSProgressIndicatorCO.js +1 -1
- package/ds-shuttle-v2/DSShuttleV2CO.js +11 -1
- package/ds-shuttle-v2/explicit-selection-ui/DSShuttleV2.explicit-selection-ui.func.spec.js +37 -0
- package/ds-shuttle-v2/explicit-selection-ui/DSShuttleV2.explicit-selection-ui.visual.spec.js +27 -0
- package/ds-shuttle-v2/skipped/DSShuttleV2.extra.axe-core.skipped.js +1 -1
- package/ds-shuttle-v2/skipped/DSShuttleV2.filter.axe-core.skipped.js +1 -1
- package/ds-shuttle-v2/skipped/DSShuttleV2.globalcheckbox.axe-core.skipped.js +1 -1
- package/ds-shuttle-v2/skipped/DSShuttleV2.items.axe-core.skipped.js +3 -3
- package/ds-shuttle-v2/skipped/DSShuttleV2.skipped.js +5 -5
- package/ds-tab-button/DSTabButton.func.spec.js +1 -1
- package/ds-tooltip-v3/DSTooltipV3CO.js +21 -0
- package/ds-tooltip-v3/aria-tooltip-pattern/DSTooltipV3.aria-tooltip-pattern.axe-core.func.spec.js +23 -0
- package/ds-tooltip-v3/aria-tooltip-pattern/DSTooltipV3.aria-tooltip-pattern.func.spec.js +29 -0
- package/ds-tooltip-v3/dialog/DSTooltipV3.dialog.func.spec.js +45 -0
- package/ds-tooltip-v3/dialog/DSTooltipV3.dialog.visual.spec.js +29 -0
- package/ds-treeview/DSTreeViewCO.js +25 -2
- package/ds-treeview/dragAndDrop/TreeView-dnd_keyboard.func.spec.js +96 -0
- package/package.json +150 -152
- package/paths.js +9 -1
- package/ds-chat-tile/TileCO.js +0 -35
- package/ds-treeview/dragAndDrop/TreeView-dnd_mouse.func.spec.js +0 -61
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Key } from 'webdriverio';
|
|
2
|
+
import DSAccordionNativeCO from '../DSAccordionNativeCO';
|
|
3
|
+
|
|
4
|
+
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
5
|
+
// Percy-aligned with ds-accordion (story content identical). See POC_FINDINGS.md.
|
|
6
|
+
describe('PUI-14324 - Accordion:: ApplyAriaDisabled prop - visual tests', () => {
|
|
7
|
+
before('loading page', async () => {
|
|
8
|
+
const errorOnGo = await DSAccordionNativeCO.applyAriaDisabled.go();
|
|
9
|
+
if (errorOnGo) throw errorOnGo;
|
|
10
|
+
});
|
|
11
|
+
it('01: first Accordion item should be focused and content not displayed - click', async () => {
|
|
12
|
+
const firstItem = await DSAccordionNativeCO.getAccordionHeader(0);
|
|
13
|
+
await firstItem.click();
|
|
14
|
+
const snapshot = await browser.checkSnapshot(
|
|
15
|
+
DSAccordionNativeCO.snapshotPath('accordion-native-aria-disabled-focused-mouse'),
|
|
16
|
+
);
|
|
17
|
+
await expect(snapshot).toEqual(0);
|
|
18
|
+
});
|
|
19
|
+
it('02: second Accordion item should be focused and content not displayed - Tab + Enter', async () => {
|
|
20
|
+
await browser.keys(Key.Tab);
|
|
21
|
+
await browser.keys(Key.Enter);
|
|
22
|
+
const snapshot = await browser.checkSnapshot(
|
|
23
|
+
DSAccordionNativeCO.snapshotPath('accordion-native-aria-disabled-focused-keys'),
|
|
24
|
+
);
|
|
25
|
+
await expect(snapshot).toEqual(0);
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import DSAccordionNativeCO from '../DSAccordionNativeCO';
|
|
2
|
+
|
|
3
|
+
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
4
|
+
describe('PUI-18083 - AccordionNative, controlled -func', () => {
|
|
5
|
+
before('loading page', async () => {
|
|
6
|
+
const errorOnGo = await DSAccordionNativeCO.controlled.go();
|
|
7
|
+
if (errorOnGo) throw errorOnGo;
|
|
8
|
+
});
|
|
9
|
+
it('01: single-open: opening another item collapses the previously open one', async () => {
|
|
10
|
+
await expect(await DSAccordionNativeCO.getAccordionHeader(0)).toHaveAttribute('aria-expanded', 'true');
|
|
11
|
+
await (await DSAccordionNativeCO.getAccordionHeader(1)).click();
|
|
12
|
+
await expect(await DSAccordionNativeCO.getAccordionHeader(1)).toHaveAttribute('aria-expanded', 'true');
|
|
13
|
+
await expect(await DSAccordionNativeCO.getAccordionHeader(0)).toHaveAttribute('aria-expanded', 'false');
|
|
14
|
+
});
|
|
15
|
+
it('02: multiple-open: opening two items keeps both expanded', async () => {
|
|
16
|
+
await (await DSAccordionNativeCO.getAccordionHeader(3)).click();
|
|
17
|
+
await (await DSAccordionNativeCO.getAccordionHeader(4)).click();
|
|
18
|
+
await expect(await DSAccordionNativeCO.getAccordionHeader(3)).toHaveAttribute('aria-expanded', 'true');
|
|
19
|
+
await expect(await DSAccordionNativeCO.getAccordionHeader(4)).toHaveAttribute('aria-expanded', 'true');
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import DSAccordionNativeCO from '../DSAccordionNativeCO';
|
|
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
|
+
// Native equivalent of the ds-accordion PUI-18621 structural test. In native the heading is a real
|
|
10
|
+
// <h3> inside <summary> and custom actions render as a SIBLING of <details>, so the heading contains
|
|
11
|
+
// NO interactive elements (the toggle IS the <summary>) and the actions live outside it.
|
|
12
|
+
describe('PUI-18083 - AccordionNative:: heading structure (custom actions outside heading) - func', () => {
|
|
13
|
+
before('loading page', async () => {
|
|
14
|
+
const errorOnGo = await DSAccordionNativeCO.headerControls.go();
|
|
15
|
+
if (errorOnGo) throw errorOnGo;
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
it('01: heading (h3) should contain no interactive elements', async () => {
|
|
19
|
+
const heading = await DSAccordionNativeCO.getHeadingByIndex(0);
|
|
20
|
+
await expect(await heading.getTagName()).toBe('h3');
|
|
21
|
+
const buttonsInsideHeading = await heading.$$('button');
|
|
22
|
+
await expect(buttonsInsideHeading.length).toBe(0);
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
it('02: custom actions container should exist outside the heading', async () => {
|
|
26
|
+
const customActionsContainer = await DSAccordionNativeCO.getAccordionItemCustomActionsContainerSlotByIndex(0);
|
|
27
|
+
await expect(customActionsContainer).toExist();
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
it('03: action buttons in custom actions container should reflect correct enabled/disabled state', async () => {
|
|
31
|
+
const enabledContainer = await DSAccordionNativeCO.getAccordionItemCustomActionsContainerSlotByIndex(0);
|
|
32
|
+
const enabledButton = await enabledContainer.$('[data-testid="ds-button"]');
|
|
33
|
+
await expect(enabledButton).toBeDisplayed();
|
|
34
|
+
await expect(enabledButton).toBeEnabled();
|
|
35
|
+
|
|
36
|
+
const disabledContainer = await DSAccordionNativeCO.getAccordionItemCustomActionsContainerSlotByIndex(2);
|
|
37
|
+
const disabledButton = await disabledContainer.$('[data-testid="ds-button"]');
|
|
38
|
+
await expect(disabledButton).toBeDisplayed();
|
|
39
|
+
await expect(disabledButton).not.toBeEnabled();
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
it('04: toolbar trigger in custom actions should open dropdown menu on click', async () => {
|
|
43
|
+
const toolbar = await DSAccordionNativeCO.getToolbarByIndex(0);
|
|
44
|
+
// The native ellipsis sits at the far-right edge of the header (custom actions are a sibling
|
|
45
|
+
// of <details>); a WebDriver coordinate click is flaky there and the menu doesn't open. A
|
|
46
|
+
// direct DOM click reliably toggles the DSDropdownMenuV2 (verified in the rendered DOM).
|
|
47
|
+
await browser.execute((el) => el.click(), toolbar);
|
|
48
|
+
const firstMenuOption = await $('*=Login');
|
|
49
|
+
await firstMenuOption.waitForDisplayed();
|
|
50
|
+
await expect(firstMenuOption).toBeDisplayed();
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import DSAccordionNativeCO from '../DSAccordionNativeCO';
|
|
2
|
+
|
|
3
|
+
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
4
|
+
describe('PUI-18083 - AccordionNative, input inside content -func', () => {
|
|
5
|
+
before('loading page', async () => {
|
|
6
|
+
const errorOnGo = await DSAccordionNativeCO.inputInside.go();
|
|
7
|
+
if (errorOnGo) throw errorOnGo;
|
|
8
|
+
});
|
|
9
|
+
it('01: should type into an input rendered inside the open accordion item', async () => {
|
|
10
|
+
const input = await $('[data-testid="task-name"]');
|
|
11
|
+
await input.waitForDisplayed();
|
|
12
|
+
await input.setValue('Test task');
|
|
13
|
+
await expect(input).toHaveValue('Test task');
|
|
14
|
+
});
|
|
15
|
+
});
|
|
16
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import DSAccordionNativeCO from '../DSAccordionNativeCO';
|
|
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-18083 - AccordionNative: Role heading', () => {
|
|
10
|
+
before('loading page', async () => {
|
|
11
|
+
const errorOnGo = await DSAccordionNativeCO.subtitle.go();
|
|
12
|
+
if (errorOnGo) throw errorOnGo;
|
|
13
|
+
});
|
|
14
|
+
// Prod accordion asserts role="heading" + aria-level via custom slot
|
|
15
|
+
// attributes because its wrapper is a <div>. The POC uses a real heading
|
|
16
|
+
// element (default <h3>), so neither attribute is present as a DOM string
|
|
17
|
+
// — the role and aria-level are *implicit* in the tag itself, conveyed by
|
|
18
|
+
// the browser's accessibility tree. Asserting on getTagName() is the
|
|
19
|
+
// correct contract for the native variant.
|
|
20
|
+
it('01: should be a native heading element with implicit ARIA role + level', async () => {
|
|
21
|
+
const heading = await DSAccordionNativeCO.getHeadingByIndex(0);
|
|
22
|
+
const tagName = await heading.getTagName();
|
|
23
|
+
// <h3> => implicit role="heading", aria-level=3.
|
|
24
|
+
await expect(tagName.toLowerCase()).toEqual('h3');
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
}
|
package/ds-accordion-native/scrollable-content/DSAccordionNative.scrollable-content.visual.spec.js
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/* eslint-disable wdio/no-pause */
|
|
2
|
+
import { Key } from 'webdriverio';
|
|
3
|
+
import DSAccordionNativeCO from '../DSAccordionNativeCO';
|
|
4
|
+
|
|
5
|
+
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
6
|
+
// Percy-aligned with ds-accordion (story content equivalent). See POC_FINDINGS.md.
|
|
7
|
+
describe('PUI-17174 - Accordion: Scrollable content -Visual', () => {
|
|
8
|
+
before('loading page', async () => {
|
|
9
|
+
const errorOnGo = await DSAccordionNativeCO.scrollableContent.go();
|
|
10
|
+
if (errorOnGo) throw errorOnGo;
|
|
11
|
+
});
|
|
12
|
+
it('01: should display first accordion header focused', async () => {
|
|
13
|
+
await browser.eyesOpen();
|
|
14
|
+
await (await DSAccordionNativeCO.getAccordionHeader(1)).waitForDisplayed();
|
|
15
|
+
await browser.keys(Key.Tab);
|
|
16
|
+
await browser.keys(Key.Return);
|
|
17
|
+
const snapshot = await browser.eyesCheckSnapshot(
|
|
18
|
+
DSAccordionNativeCO.snapshotPath('accordion-native-scrollable-default'),
|
|
19
|
+
);
|
|
20
|
+
await expect(snapshot).toEqual(0);
|
|
21
|
+
});
|
|
22
|
+
it('02: should display scrollable content focused', async () => {
|
|
23
|
+
await browser.eyesOpen();
|
|
24
|
+
await browser.keys(Key.ArrowDown);
|
|
25
|
+
await browser.keys(Key.ArrowUp);
|
|
26
|
+
await browser.keys(Key.Tab);
|
|
27
|
+
await (await DSAccordionNativeCO.getAccordionHeader(1)).waitForDisplayed();
|
|
28
|
+
const snapshot = await browser.eyesCheckSnapshot(
|
|
29
|
+
DSAccordionNativeCO.snapshotPath('accordion-native-scrollable-top'),
|
|
30
|
+
);
|
|
31
|
+
await expect(snapshot).toEqual(0);
|
|
32
|
+
});
|
|
33
|
+
it('03: should display scrollable content scrolled to the bottom', async () => {
|
|
34
|
+
await browser.eyesOpen();
|
|
35
|
+
await browser.keys(Key.ArrowDown);
|
|
36
|
+
await browser.keys(Key.ArrowDown);
|
|
37
|
+
await browser.keys(Key.ArrowDown);
|
|
38
|
+
await browser.keys(Key.ArrowDown);
|
|
39
|
+
await browser.keys(Key.ArrowDown);
|
|
40
|
+
await browser.keys(Key.ArrowDown);
|
|
41
|
+
await browser.keys(Key.ArrowDown);
|
|
42
|
+
await (await DSAccordionNativeCO.getAccordionHeader(1)).waitForDisplayed();
|
|
43
|
+
const snapshot = await browser.eyesCheckSnapshot(
|
|
44
|
+
DSAccordionNativeCO.snapshotPath('accordion-native-scrollable-bottom'),
|
|
45
|
+
);
|
|
46
|
+
await expect(snapshot).toEqual(0);
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/* eslint-disable max-lines */
|
|
2
|
+
import DSAccordionNativeCO from '../DSAccordionNativeCO';
|
|
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-18083 - AccordionNative: Slots -AxeCore', () => {
|
|
12
|
+
before('loading page', async () => {
|
|
13
|
+
const errorOnGo = await DSAccordionNativeCO.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 summary = await DSAccordionNativeCO.getAccordionItemSummarySlotByIndex(0);
|
|
18
|
+
await summary.click();
|
|
19
|
+
const content = await DSAccordionNativeCO.getAccordionItemContentContainerSlotByIndex(0);
|
|
20
|
+
await content.waitForDisplayed();
|
|
21
|
+
const result = await axeCoreCheck();
|
|
22
|
+
expect(result.length).toBe(0);
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/* eslint-disable max-lines, max-statements */
|
|
2
|
+
import DSAccordionNativeCO from '../DSAccordionNativeCO';
|
|
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-18083 - AccordionNative: Slots -Func', () => {
|
|
11
|
+
before('loading page', async () => {
|
|
12
|
+
const errorOnGo = await DSAccordionNativeCO.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 DSAccordionNativeCO.getAccordionContainerSlotByIndex();
|
|
17
|
+
const itemContainer = await DSAccordionNativeCO.getAccordionItemContainerSlotByIndex();
|
|
18
|
+
const itemDetails = await DSAccordionNativeCO.getAccordionItemDetailsSlotByIndex();
|
|
19
|
+
const itemSummary = await DSAccordionNativeCO.getAccordionItemSummarySlotByIndex();
|
|
20
|
+
const itemHeading = await DSAccordionNativeCO.getAccordionItemHeadingSlotByIndex();
|
|
21
|
+
const itemChevron = await DSAccordionNativeCO.getAccordionItemChevronSlotByIndex();
|
|
22
|
+
const titlesContainer = await DSAccordionNativeCO.getAccordionItemTitlesContainerSlotByIndex();
|
|
23
|
+
const primaryTitle = await DSAccordionNativeCO.getAccordionItemPrimaryTitleSlotByIndex();
|
|
24
|
+
const secondaryTitle = await DSAccordionNativeCO.getAccordionItemSecondaryTitleSlotByIndex();
|
|
25
|
+
await itemSummary.click();
|
|
26
|
+
const contentContainer = await DSAccordionNativeCO.getAccordionItemContentContainerSlotByIndex();
|
|
27
|
+
await contentContainer.waitForDisplayed();
|
|
28
|
+
await expect(root).toHaveAttribute('aria-label', 'im container aria');
|
|
29
|
+
await expect(itemContainer).toHaveAttribute('aria-label', 'im item container aria');
|
|
30
|
+
await expect(itemDetails).toHaveAttribute('aria-label', 'im itemdetails aria');
|
|
31
|
+
await expect(itemSummary).toHaveAttribute('aria-label', 'im itemsummary aria');
|
|
32
|
+
await expect(itemHeading).toHaveAttribute('aria-label', 'im itemheading aria');
|
|
33
|
+
await expect(itemChevron).toHaveAttribute('aria-label', 'im itemchevron aria');
|
|
34
|
+
await expect(titlesContainer).toHaveAttribute('aria-label', 'im itemtitlecontainer aria');
|
|
35
|
+
await expect(primaryTitle).toHaveAttribute('aria-label', 'im itemprimarytitle aria');
|
|
36
|
+
await expect(secondaryTitle).toHaveAttribute('aria-label', 'im itemsecondarytitle aria');
|
|
37
|
+
await expect(contentContainer).toHaveAttribute('aria-label', 'im itemcontentcontainer aria');
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
it('02: should have a custom data-testid for each slot', async () => {
|
|
41
|
+
const root = await DSAccordionNativeCO.getAccordionContainerSlotByIndex();
|
|
42
|
+
const itemContainer = await DSAccordionNativeCO.getAccordionItemContainerSlotByIndex();
|
|
43
|
+
const itemDetails = await DSAccordionNativeCO.getAccordionItemDetailsSlotByIndex();
|
|
44
|
+
const itemSummary = await DSAccordionNativeCO.getAccordionItemSummarySlotByIndex();
|
|
45
|
+
const itemHeading = await DSAccordionNativeCO.getAccordionItemHeadingSlotByIndex();
|
|
46
|
+
const itemChevron = await DSAccordionNativeCO.getAccordionItemChevronSlotByIndex();
|
|
47
|
+
const titlesContainer = await DSAccordionNativeCO.getAccordionItemTitlesContainerSlotByIndex();
|
|
48
|
+
const primaryTitle = await DSAccordionNativeCO.getAccordionItemPrimaryTitleSlotByIndex();
|
|
49
|
+
const secondaryTitle = await DSAccordionNativeCO.getAccordionItemSecondaryTitleSlotByIndex();
|
|
50
|
+
const contentContainer = await DSAccordionNativeCO.getAccordionItemContentContainerSlotByIndex();
|
|
51
|
+
await contentContainer.waitForDisplayed();
|
|
52
|
+
await expect(root).toHaveAttribute('data-testid', 'im container data');
|
|
53
|
+
await expect(itemContainer).toHaveAttribute('data-testid', 'im item container data');
|
|
54
|
+
await expect(itemDetails).toHaveAttribute('data-testid', 'im itemdetails data');
|
|
55
|
+
await expect(itemSummary).toHaveAttribute('data-testid', 'im itemsummary data');
|
|
56
|
+
await expect(itemHeading).toHaveAttribute('data-testid', 'im itemheading data');
|
|
57
|
+
await expect(itemChevron).toHaveAttribute('data-testid', 'im itemchevron data');
|
|
58
|
+
await expect(titlesContainer).toHaveAttribute('data-testid', 'im itemtitlecontainer data');
|
|
59
|
+
await expect(primaryTitle).toHaveAttribute('data-testid', 'im itemprimarytitle data');
|
|
60
|
+
await expect(secondaryTitle).toHaveAttribute('data-testid', 'im itemsecondarytitle data');
|
|
61
|
+
await expect(contentContainer).toHaveAttribute('data-testid', 'im itemcontentcontainer data');
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
it('03: should have a custom lang attribute for summary, primary and secondary titles', async () => {
|
|
65
|
+
const primaryTitle = await DSAccordionNativeCO.getAccordionItemPrimaryTitleSlotByIndex();
|
|
66
|
+
const secondaryTitle = await DSAccordionNativeCO.getAccordionItemSecondaryTitleSlotByIndex();
|
|
67
|
+
const summary = await DSAccordionNativeCO.getAccordionItemSummarySlotByIndex();
|
|
68
|
+
await expect(primaryTitle).toHaveAttribute('lang', 'en-US');
|
|
69
|
+
await expect(secondaryTitle).toHaveAttribute('lang', 'es-ES');
|
|
70
|
+
await expect(summary).toHaveAttribute('lang', 'en-US');
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import DSAccordionNativeCO from '../DSAccordionNativeCO';
|
|
2
|
+
|
|
3
|
+
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
4
|
+
// Percy-aligned with ds-accordion: native consumes the same styleOverrides colors (verified in the
|
|
5
|
+
// DOM). The diff reflects the slot-tree mapping (native summary/heading/chevron vs accordion
|
|
6
|
+
// header/header-container/addon), not broken theming. See QA_NOTES.
|
|
7
|
+
describe('PUI-15348 - Accordion: Slots -Visual', () => {
|
|
8
|
+
before('loading page', async () => {
|
|
9
|
+
const errorOnGo = await DSAccordionNativeCO.slotsURL.go();
|
|
10
|
+
if (errorOnGo) throw errorOnGo;
|
|
11
|
+
});
|
|
12
|
+
it('01: should display visually customized-slots (colors) accordion and matchbaseline', async () => {
|
|
13
|
+
const header = await DSAccordionNativeCO.getAccordionItemPrimaryTitleSlotByIndex(0);
|
|
14
|
+
await header.click();
|
|
15
|
+
const content = await DSAccordionNativeCO.getAccordionItemContentContainerSlotByIndex(0);
|
|
16
|
+
await content.waitForDisplayed();
|
|
17
|
+
const snapshot = await browser.checkSnapshot(DSAccordionNativeCO.snapshotPath('accordion-native-slots'));
|
|
18
|
+
await expect(snapshot).toEqual(0);
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/* eslint-disable wdio/no-pause */
|
|
2
|
+
import { Key } from 'webdriverio';
|
|
3
|
+
import DSAccordionNativeCO from '../DSAccordionNativeCO';
|
|
4
|
+
|
|
5
|
+
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
6
|
+
// Percy-aligned with ds-accordion (story content equivalent). See POC_FINDINGS.md.
|
|
7
|
+
describe('PUI-17178 - Accordion: wrapLabel -Visual', () => {
|
|
8
|
+
before('loading page', async () => {
|
|
9
|
+
const errorOnGo = await DSAccordionNativeCO.wrapLabel.go();
|
|
10
|
+
if (errorOnGo) throw errorOnGo;
|
|
11
|
+
});
|
|
12
|
+
it('01: should display accordion title and secondary title wrapped', async () => {
|
|
13
|
+
await browser.eyesOpen();
|
|
14
|
+
await (await DSAccordionNativeCO.getAccordionHeader(1)).waitForDisplayed();
|
|
15
|
+
await browser.keys(Key.Tab);
|
|
16
|
+
await browser.keys(Key.Return);
|
|
17
|
+
const snapshot = await browser.eyesCheckSnapshot(DSAccordionNativeCO.snapshotPath('accordion-native-wrap-label'));
|
|
18
|
+
await expect(snapshot).toEqual(0);
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
}
|
|
@@ -18,4 +18,38 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
18
18
|
await expect(snapshot).toEqual(0);
|
|
19
19
|
});
|
|
20
20
|
});
|
|
21
|
+
describe('PUI-17180 - Autocomplete:: Floating After Filtering -Visual', () => {
|
|
22
|
+
before('loading page', async () => {
|
|
23
|
+
const errorOnGo = await DSAutocompleteCO.floatingAfterFiltering.go();
|
|
24
|
+
if (errorOnGo) throw errorOnGo;
|
|
25
|
+
});
|
|
26
|
+
it('01: should display menu correctly - after filtering', async () => {
|
|
27
|
+
await browser.keys(Key.Tab);
|
|
28
|
+
await type('44444-');
|
|
29
|
+
const menulist = await DSAutocompleteCO.getAutocompleteMenuList();
|
|
30
|
+
await menulist.waitForDisplayed({ timeout: 2000 });
|
|
31
|
+
const snapshot = await browser.percyCheckScreenshot(
|
|
32
|
+
DSAutocompleteCO.snapshotPath('autocomplete-floating-after-filtering'),
|
|
33
|
+
);
|
|
34
|
+
await expect(snapshot).toEqual(0);
|
|
35
|
+
});
|
|
36
|
+
it('02: should display menu correctly - after re filtering', async () => {
|
|
37
|
+
await type('6');
|
|
38
|
+
const menulist = await DSAutocompleteCO.getAutocompleteMenuList();
|
|
39
|
+
await menulist.waitForDisplayed({ timeout: 2000 });
|
|
40
|
+
const snapshot = await browser.percyCheckScreenshot(
|
|
41
|
+
DSAutocompleteCO.snapshotPath('autocomplete-floating-after-re-filtering'),
|
|
42
|
+
);
|
|
43
|
+
await expect(snapshot).toEqual(0);
|
|
44
|
+
});
|
|
45
|
+
it('03: should display menu correctly - after backspace', async () => {
|
|
46
|
+
await browser.keys(Key.Backspace);
|
|
47
|
+
const menulist = await DSAutocompleteCO.getAutocompleteMenuList();
|
|
48
|
+
await menulist.waitForDisplayed({ timeout: 2000 });
|
|
49
|
+
const snapshot = await browser.percyCheckScreenshot(
|
|
50
|
+
DSAutocompleteCO.snapshotPath('autocomplete-floating-after-backspace'),
|
|
51
|
+
);
|
|
52
|
+
await expect(snapshot).toEqual(0);
|
|
53
|
+
});
|
|
54
|
+
});
|
|
21
55
|
}
|
|
@@ -12,6 +12,8 @@ export default class DSAutocompleteCO extends PageObject {
|
|
|
12
12
|
|
|
13
13
|
static sectionTitles = new Urlbuilder(PATH_E2E_AUTOCOMPLETE, 'with-section-titles-test');
|
|
14
14
|
|
|
15
|
+
static floatingAfterFiltering = new Urlbuilder(PATH_E2E_AUTOCOMPLETE, 'floating-after-filtering');
|
|
16
|
+
|
|
15
17
|
// Snapshots
|
|
16
18
|
static snapshotPath(example = 'basic') {
|
|
17
19
|
return PageObject.getSnapshotPathBuilder('Autocomplete', example);
|
package/ds-card-v3/DSCardV3CO.js
CHANGED
|
@@ -7,6 +7,8 @@ export default class DSCardV3CO extends PageObject {
|
|
|
7
7
|
// URL's
|
|
8
8
|
static accordionURL = new Urlbuilder(PATH_E2E_CARD_V3, 'accordion-test');
|
|
9
9
|
|
|
10
|
+
static accordionAriaURL = new Urlbuilder(PATH_E2E_CARD_V3, 'accordion-aria-test');
|
|
11
|
+
|
|
10
12
|
static actionURL = new Urlbuilder(PATH_E2E_CARD_V3, 'action-test');
|
|
11
13
|
|
|
12
14
|
static disabledURL = new Urlbuilder(PATH_E2E_CARD_V3, 'disabled-test');
|
|
@@ -90,6 +92,18 @@ export default class DSCardV3CO extends PageObject {
|
|
|
90
92
|
return $('[data-testid="ds-button"][aria-label="Expand Card Content"]');
|
|
91
93
|
}
|
|
92
94
|
|
|
95
|
+
static async getAccordionButton() {
|
|
96
|
+
return $('button[aria-expanded]');
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
static async getGroupContainer() {
|
|
100
|
+
return $('[role="group"]');
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
static async getRadioGroupContainer() {
|
|
104
|
+
return $('[role="radiogroup"]');
|
|
105
|
+
}
|
|
106
|
+
|
|
93
107
|
static async getCardHandlerByIndex(index) {
|
|
94
108
|
return $$('button[aria-label="drag and drop gripper"]')[index];
|
|
95
109
|
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import DSCardV3CO from '../DSCardV3CO';
|
|
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
|
+
// Tests for the fix introduced in PUI-17887 (accordion heading/button/panel ARIA relationship)
|
|
10
|
+
describe('PUI-18597 - DSCardV3:: accordion ARIA structure - Func', () => {
|
|
11
|
+
before('loading page', async () => {
|
|
12
|
+
const errorOnGo = await DSCardV3CO.accordionAriaURL.go();
|
|
13
|
+
if (errorOnGo) throw errorOnGo;
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
it('01: button and panel have correct ARIA relationship (controls, labelledby, region, h3 container)', async () => {
|
|
17
|
+
const button = await DSCardV3CO.getAccordionButton();
|
|
18
|
+
const panelId = await button.getAttribute('aria-controls');
|
|
19
|
+
expect(panelId).toBeTruthy();
|
|
20
|
+
const panel = await $(`#${panelId}`);
|
|
21
|
+
await expect(panel).toBeExisting();
|
|
22
|
+
const labelId = await button.getAttribute('aria-labelledby');
|
|
23
|
+
expect(labelId).toBeTruthy();
|
|
24
|
+
const title = await $(`#${labelId}`);
|
|
25
|
+
await expect(title).toBeExisting();
|
|
26
|
+
await expect(panel).toHaveAttribute('role', 'region');
|
|
27
|
+
const buttonId = await button.getAttribute('id');
|
|
28
|
+
await expect(panel).toHaveAttribute('aria-labelledby', buttonId);
|
|
29
|
+
const h3 = await $('h3');
|
|
30
|
+
const buttonInsideH3 = await h3.$('button');
|
|
31
|
+
await expect(buttonInsideH3).toBeExisting();
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
it('02: aria-expanded toggles from false to true after clicking the button', async () => {
|
|
35
|
+
const button = await DSCardV3CO.getAccordionButton();
|
|
36
|
+
await expect(button).toHaveAttribute('aria-expanded', 'false');
|
|
37
|
+
await button.click();
|
|
38
|
+
await expect(button).toHaveAttribute('aria-expanded', 'true');
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import DSCardV3CO from '../DSCardV3CO';
|
|
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
|
+
// Tests for the fix introduced in PUI-17888 (disabled attribute on non-interactive card)
|
|
10
|
+
describe('PUI-18598 - DSCardV3:: disabled variant has no HTML disabled attribute - Func', () => {
|
|
11
|
+
before('loading page', async () => {
|
|
12
|
+
const errorOnGo = await DSCardV3CO.disabledURL.go();
|
|
13
|
+
if (errorOnGo) throw errorOnGo;
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
it('01: disabled and accented-disabled cards do not have the HTML disabled attribute', async () => {
|
|
17
|
+
const card1 = await DSCardV3CO.getCardContainerByIndex(0);
|
|
18
|
+
const card2 = await DSCardV3CO.getCardContainerByIndex(1);
|
|
19
|
+
const disabledAttr1 = await card1.getAttribute('disabled');
|
|
20
|
+
const disabledAttr2 = await card2.getAttribute('disabled');
|
|
21
|
+
expect(disabledAttr1).toBeNull();
|
|
22
|
+
expect(disabledAttr2).toBeNull();
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import DSCardV3CO from '../DSCardV3CO';
|
|
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
|
+
// Tests for the fix introduced in PUI-17891 (checkbox group not programmatically grouped)
|
|
10
|
+
describe('PUI-18599 - DSCardV3:: multi-select ARIA group role - Func', () => {
|
|
11
|
+
before('loading page', async () => {
|
|
12
|
+
const errorOnGo = await DSCardV3CO.multiSelectURL.go();
|
|
13
|
+
if (errorOnGo) throw errorOnGo;
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
it('01: wrapper container has role="group" and an accessible label', async () => {
|
|
17
|
+
const wrapper = await DSCardV3CO.getGroupContainer();
|
|
18
|
+
await expect(wrapper).toBeExisting();
|
|
19
|
+
await expect(wrapper).toHaveAttribute('role', 'group');
|
|
20
|
+
const label = await wrapper.getAttribute('aria-label');
|
|
21
|
+
expect(label).toBeTruthy();
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import DSCardV3CO from '../DSCardV3CO';
|
|
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
|
+
// Tests for the fix introduced in PUI-17891 (radio button group not programmatically grouped)
|
|
10
|
+
describe('PUI-18600 - DSCardV3:: single-select ARIA radiogroup role - Func', () => {
|
|
11
|
+
before('loading page', async () => {
|
|
12
|
+
const errorOnGo = await DSCardV3CO.singleSelectURL.go();
|
|
13
|
+
if (errorOnGo) throw errorOnGo;
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
it('01: wrapper container has role="radiogroup" and an accessible label', async () => {
|
|
17
|
+
const wrapper = await DSCardV3CO.getRadioGroupContainer();
|
|
18
|
+
await expect(wrapper).toBeExisting();
|
|
19
|
+
await expect(wrapper).toHaveAttribute('role', 'radiogroup');
|
|
20
|
+
const label = await wrapper.getAttribute('aria-label');
|
|
21
|
+
expect(label).toBeTruthy();
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* eslint-disable no-plusplus */
|
|
2
2
|
/* eslint-disable max-lines */
|
|
3
|
-
import { ChatCO, BubbleCO, TileCO } from './components';
|
|
3
|
+
import { ChatCO, CardCO, BubbleCO, TileCO } from './components';
|
|
4
4
|
import { axeCoreCheck } from '../helpers';
|
|
5
5
|
|
|
6
6
|
if (
|
|
@@ -41,7 +41,7 @@ if (
|
|
|
41
41
|
|
|
42
42
|
describe('PUI-12504 - Chat, Chat Card -AxeCore', () => {
|
|
43
43
|
before('loading page', async () => {
|
|
44
|
-
const errorOnGo = await
|
|
44
|
+
const errorOnGo = await CardCO.cardBasicURL.go();
|
|
45
45
|
if (errorOnGo) throw errorOnGo;
|
|
46
46
|
});
|
|
47
47
|
it('01: should have a chat card and pass axe-core scan', async () => {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/* eslint-disable no-plusplus */
|
|
2
2
|
/* eslint-disable max-lines */
|
|
3
3
|
import { Key } from 'webdriverio';
|
|
4
|
-
import { ChatCO, BubbleCO, FloatingButtonCO, ComposerCO, TileCO } from './components';
|
|
4
|
+
import { ChatCO, CardCO, BubbleCO, FloatingButtonCO, ComposerCO, TileCO } from './components';
|
|
5
5
|
import { type } from '../helpers';
|
|
6
6
|
import DSBannerCO from '../ds-banner/DSBannerCO';
|
|
7
7
|
|
|
@@ -76,7 +76,7 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
76
76
|
|
|
77
77
|
describe('PUI-6712 - Chat, Chat Card, Visual Tests', () => {
|
|
78
78
|
before('loading page', async () => {
|
|
79
|
-
const errorOnGo = await
|
|
79
|
+
const errorOnGo = await CardCO.cardBasicURL.go();
|
|
80
80
|
if (errorOnGo) throw errorOnGo;
|
|
81
81
|
});
|
|
82
82
|
it('should display the chat card properly', async () => {
|
|
@@ -268,7 +268,7 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
268
268
|
});
|
|
269
269
|
});
|
|
270
270
|
|
|
271
|
-
describe('PUI-9333 - Chat, Scroll on send and not on enter
|
|
271
|
+
describe('PUI-9333 - Chat, Scroll on send and not on enter - Visual Tests', () => {
|
|
272
272
|
before('loading page', async () => {
|
|
273
273
|
const errorOnGo = await ChatCO.sidePanelIntegrationURL.go();
|
|
274
274
|
if (errorOnGo) throw errorOnGo;
|