dimsum-e2e-tests 3.70.0-next.4 → 3.70.0-next.41
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 +210 -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 +18 -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-data-table-async/textwrapping/DSDataTable.header-wrap-alignment.axe-core.func.spec.js +23 -0
- package/ds-data-table-async/textwrapping/DSDataTable.header-wrap-alignment.visual.spec.js +106 -0
- package/ds-data-table-async/textwrapping/DSDataTable.text-wrap-toolbar.visual.spec.js +27 -0
- 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 -153
- 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,64 @@
|
|
|
1
|
+
import { Key } from 'webdriverio';
|
|
2
|
+
import DateRangePickerCO from '../DateRangePickerCO';
|
|
3
|
+
|
|
4
|
+
// Tests for the fix introduced in PUI-15568 — each day/month/year segment now exposes a
|
|
5
|
+
// name-only aria-label ("day"/"month"/"year") with no native role word and no sibling-field
|
|
6
|
+
// state; per-field state lives on role="spinbutton" + aria-valuetext.
|
|
7
|
+
// Chrome-only: pure DOM-attribute assertions are identical across browsers.
|
|
8
|
+
|
|
9
|
+
// Asserts a single segment input is name-only: aria-label === field name, spinbutton role,
|
|
10
|
+
// empty value-text, and none of the leaked phrases the defect used to inject into the label.
|
|
11
|
+
const assertNameOnlyEmptySegment = async (input, name) => {
|
|
12
|
+
await expect(input).toHaveAttribute('aria-label', name);
|
|
13
|
+
await expect(input).toHaveAttribute('role', 'spinbutton');
|
|
14
|
+
await expect(input).toHaveAttribute('aria-valuetext', 'empty');
|
|
15
|
+
const label = await input.getAttribute('aria-label');
|
|
16
|
+
expect(label).not.toContain('input field');
|
|
17
|
+
expect(label).not.toContain('current values');
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
if (
|
|
21
|
+
(!browser.capabilities['ice:options'].isPhone &&
|
|
22
|
+
!browser.capabilities['ice:options'].isTablet &&
|
|
23
|
+
browser.capabilities.browserName === 'chrome') ||
|
|
24
|
+
browser.capabilities.browserName === 'Chrome'
|
|
25
|
+
) {
|
|
26
|
+
describe('PUI-18653 - DSControlledDateRangePicker:: date segment aria-labels - Func', () => {
|
|
27
|
+
before('loading page', async () => {
|
|
28
|
+
const errorOnGo = await DateRangePickerCO.basic.go();
|
|
29
|
+
if (errorOnGo) throw errorOnGo;
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
// Static reads on the empty initial state — consolidated into one it() (no interaction).
|
|
33
|
+
// index 0 = Start date group, index 1 = End date group.
|
|
34
|
+
it('01: each segment exposes a name-only aria-label, spinbutton role and empty value-text', async () => {
|
|
35
|
+
// Start date group
|
|
36
|
+
await assertNameOnlyEmptySegment(await DateRangePickerCO.getMonthInputByIndex(0), 'month');
|
|
37
|
+
await assertNameOnlyEmptySegment(await DateRangePickerCO.getDayInputByIndex(0), 'day');
|
|
38
|
+
await assertNameOnlyEmptySegment(await DateRangePickerCO.getYearInputByIndex(0), 'year');
|
|
39
|
+
// End date group
|
|
40
|
+
await assertNameOnlyEmptySegment(await DateRangePickerCO.getMonthInputByIndex(1), 'month');
|
|
41
|
+
await assertNameOnlyEmptySegment(await DateRangePickerCO.getDayInputByIndex(1), 'day');
|
|
42
|
+
await assertNameOnlyEmptySegment(await DateRangePickerCO.getYearInputByIndex(1), 'year');
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
it('02: filling one segment does not leak its value into sibling aria-labels', async () => {
|
|
46
|
+
const month = await DateRangePickerCO.getMonthInputByIndex(0);
|
|
47
|
+
await month.click();
|
|
48
|
+
await browser.keys(Key.ArrowUp); // 01 / January
|
|
49
|
+
await browser.keys(Key.ArrowUp); // 02 / February
|
|
50
|
+
|
|
51
|
+
// filled field announces its OWN value via aria-valuetext; label stays name-only
|
|
52
|
+
await expect(month).toHaveAttribute('aria-label', 'month');
|
|
53
|
+
await expect(month).toHaveAttribute('aria-valuetext', 'February');
|
|
54
|
+
|
|
55
|
+
// siblings stay name-only + empty — no "February" leaks into their names
|
|
56
|
+
const day = await DateRangePickerCO.getDayInputByIndex(0);
|
|
57
|
+
const year = await DateRangePickerCO.getYearInputByIndex(0);
|
|
58
|
+
await expect(day).toHaveAttribute('aria-label', 'day');
|
|
59
|
+
await expect(day).toHaveAttribute('aria-valuetext', 'empty');
|
|
60
|
+
await expect(year).toHaveAttribute('aria-label', 'year');
|
|
61
|
+
await expect(year).toHaveAttribute('aria-valuetext', 'empty');
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
}
|
|
@@ -54,4 +54,43 @@ if (
|
|
|
54
54
|
expect(result.length).toBe(0);
|
|
55
55
|
});
|
|
56
56
|
});
|
|
57
|
+
|
|
58
|
+
describe('PUI-16464 - NativeSelect: ApplyAriaDisabled -AxeCore', () => {
|
|
59
|
+
before(async () => {
|
|
60
|
+
const errorOnGo = await NativeSelect.applyAriaDisabledURL.go();
|
|
61
|
+
if (errorOnGo) throw errorOnGo;
|
|
62
|
+
});
|
|
63
|
+
it('01: should have applyAriaDisabled native select and pass axe-core scan', async () => {
|
|
64
|
+
const nativeSelect = await NativeSelect.getRootByIndex(0);
|
|
65
|
+
await nativeSelect.waitForDisplayed();
|
|
66
|
+
const result = await axeCoreCheck();
|
|
67
|
+
expect(result.length).toBe(0);
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
describe('PUI-16464 - NativeSelect: ReadOnly -AxeCore', () => {
|
|
72
|
+
before(async () => {
|
|
73
|
+
const errorOnGo = await NativeSelect.readOnlyURL.go();
|
|
74
|
+
if (errorOnGo) throw errorOnGo;
|
|
75
|
+
});
|
|
76
|
+
it('01: should have readOnly native select and pass axe-core scan', async () => {
|
|
77
|
+
const nativeSelect = await NativeSelect.getRootByIndex(0);
|
|
78
|
+
await nativeSelect.waitForDisplayed();
|
|
79
|
+
const result = await axeCoreCheck();
|
|
80
|
+
expect(result.length).toBe(0);
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
describe('PUI-16464 - NativeSelect: ApplyAriaDisabled + hasError -AxeCore', () => {
|
|
85
|
+
before(async () => {
|
|
86
|
+
const errorOnGo = await NativeSelect.applyAriaDisabledWithErrorURL.go();
|
|
87
|
+
if (errorOnGo) throw errorOnGo;
|
|
88
|
+
});
|
|
89
|
+
it('01: should have applyAriaDisabled + hasError native select and pass axe-core scan', async () => {
|
|
90
|
+
const nativeSelect = await NativeSelect.getRootByIndex(0);
|
|
91
|
+
await nativeSelect.waitForDisplayed();
|
|
92
|
+
const result = await axeCoreCheck();
|
|
93
|
+
expect(result.length).toBe(0);
|
|
94
|
+
});
|
|
95
|
+
});
|
|
57
96
|
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import NativeSelect from './NativeSelectCO';
|
|
2
|
+
|
|
3
|
+
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
4
|
+
describe('PUI-18537 - NativeSelect:: basic state -Visual', () => {
|
|
5
|
+
before('loading page', async () => {
|
|
6
|
+
const errorOnGo = await NativeSelect.controlledURL.go();
|
|
7
|
+
if (errorOnGo) throw errorOnGo;
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
it('01: should render the basic controlled native select', async () => {
|
|
11
|
+
const root = await NativeSelect.getRootByIndex(0);
|
|
12
|
+
await root.waitForDisplayed();
|
|
13
|
+
const snapshot = await browser.percyCheckScreenshot(NativeSelect.snapshotPath('basic'));
|
|
14
|
+
await expect(snapshot).toEqual(0);
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
// Coverage for the fix introduced in PUI-14617
|
|
19
|
+
// (disabled-state colors aligned with Combobox disabled-state colors to meet WCAG 1.4.3).
|
|
20
|
+
describe('PUI-18538 - NativeSelect:: disabled state -Visual', () => {
|
|
21
|
+
before('loading page', async () => {
|
|
22
|
+
const errorOnGo = await NativeSelect.disabledURL.go();
|
|
23
|
+
if (errorOnGo) throw errorOnGo;
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
it('01: should render the disabled native select', async () => {
|
|
27
|
+
const root = await NativeSelect.getRootByIndex(0);
|
|
28
|
+
await root.waitForDisplayed();
|
|
29
|
+
const snapshot = await browser.percyCheckScreenshot(NativeSelect.snapshotPath('disabled'));
|
|
30
|
+
await expect(snapshot).toEqual(0);
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
}
|
|
@@ -11,6 +11,12 @@ export default class NativeSelect extends PageObject {
|
|
|
11
11
|
|
|
12
12
|
static disabledURL = new Urlbuilder(PATH_E2E_NATIVE_SELECT, 'disabled-test');
|
|
13
13
|
|
|
14
|
+
static applyAriaDisabledURL = new Urlbuilder(PATH_E2E_NATIVE_SELECT, 'apply-aria-disabled-test');
|
|
15
|
+
|
|
16
|
+
static readOnlyURL = new Urlbuilder(PATH_E2E_NATIVE_SELECT, 'read-only-test');
|
|
17
|
+
|
|
18
|
+
static applyAriaDisabledWithErrorURL = new Urlbuilder(PATH_E2E_NATIVE_SELECT, 'apply-aria-disabled-with-error-test');
|
|
19
|
+
|
|
14
20
|
// Selectors
|
|
15
21
|
static async getInputSlotByIndex(index = 0) {
|
|
16
22
|
return $$(`[data-dimsum-slot="dsNativeselectInput"]`)[index];
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import NativeSelect from '../NativeSelectCO';
|
|
2
|
+
|
|
3
|
+
// Tests for the option selection behavior of the native select introduced in PUI-14617.
|
|
4
|
+
// Selecting an option must update the <select> value (options use value={index}).
|
|
5
|
+
// Uses the WebDriver native select command (selectByIndex) so the native popup is opened and an
|
|
6
|
+
// option committed the same way in every browser — simulated keystrokes on the OS-drawn popup are
|
|
7
|
+
// not reachable by WebDriver on macOS/Safari, which is why a keystroke-based assertion is not portable.
|
|
8
|
+
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
9
|
+
describe('PUI-18563 - NativeSelect:: Option selection updates value -Func', () => {
|
|
10
|
+
before(async () => {
|
|
11
|
+
const errorOnGo = await NativeSelect.controlledURL.go();
|
|
12
|
+
if (errorOnGo) throw errorOnGo;
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
it('01: should update the value when selecting an option from the popup', async () => {
|
|
16
|
+
const nativeSelect = await NativeSelect.getRootByIndex(0);
|
|
17
|
+
await nativeSelect.waitForDisplayed();
|
|
18
|
+
|
|
19
|
+
const input = await NativeSelect.getInputSlotByIndex(0);
|
|
20
|
+
await input.selectByIndex(2);
|
|
21
|
+
|
|
22
|
+
await expect(input).toHaveValue('2');
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
}
|
|
@@ -71,11 +71,11 @@ export default class LeftNavCO extends PageObject {
|
|
|
71
71
|
}
|
|
72
72
|
|
|
73
73
|
static async getTruncatedText(index) {
|
|
74
|
-
return $$('[data-testid="
|
|
74
|
+
return $$('[data-testid="leftnav-list-item-label"]')[index];
|
|
75
75
|
}
|
|
76
76
|
|
|
77
77
|
static async getTooltip() {
|
|
78
|
-
return $('[data-testid="
|
|
78
|
+
return $('[data-testid="ds-floating-wrapper-root"]');
|
|
79
79
|
}
|
|
80
80
|
|
|
81
81
|
static async getSubItemBtn() {
|
|
@@ -21,6 +21,8 @@ export default class DSMenuButtonCO extends PageObject {
|
|
|
21
21
|
|
|
22
22
|
static skeletonMenuItem = new Urlbuilder(PATH_E2E_MENU_BUTTON, 'skeleton-menu-item-test');
|
|
23
23
|
|
|
24
|
+
static slotsTest = new Urlbuilder(PATH_E2E_MENU_BUTTON, 'slots-test');
|
|
25
|
+
|
|
24
26
|
// UseCases (E2E simplified versions)
|
|
25
27
|
static cardExample = new Urlbuilder(PATH_MENU_BUTTON_USECASES, 'card-example-test');
|
|
26
28
|
|
|
@@ -85,6 +87,27 @@ export default class DSMenuButtonCO extends PageObject {
|
|
|
85
87
|
return $(`${item} div span`);
|
|
86
88
|
}
|
|
87
89
|
|
|
90
|
+
// Slots test selectors (by data-dimsum-slot)
|
|
91
|
+
static async getSlotsOpinionatedButtonRoot() {
|
|
92
|
+
return $('[data-dimsum-parent-slot="dsOpinionatedbuttonRoot"');
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
static async getSlotsFloatingWrapper() {
|
|
96
|
+
return $('[data-dimsum-parent-slot="dsFlyoutmenuFloatingWrapper"');
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
static async getSlotsFlyoutMenuRoot() {
|
|
100
|
+
return $('[data-dimsum-slot="dsFlyoutmenuRoot"]');
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
static async getSlotsListWrapper() {
|
|
104
|
+
return $('[data-dimsum-slot="dsFlyoutmenuListWrapper"]');
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
static async getSlotsMenuItemWrappers(index = 0) {
|
|
108
|
+
return $$('[data-dimsum-slot="dsMenuitemMenuItemWrapper"]')[index];
|
|
109
|
+
}
|
|
110
|
+
|
|
88
111
|
// Snapshots
|
|
89
112
|
static snapshotPath(example = 'basic') {
|
|
90
113
|
return PageObject.getSnapshotPathBuilder('DSMenuItems', example, 'ds-menu-items');
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import DSMenuButtonCO from '../DSMenuButtonCO';
|
|
2
|
+
|
|
3
|
+
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
4
|
+
describe('PUI-18356 - DSMenuButton:: Slots - Func', () => {
|
|
5
|
+
before('loading page', async () => {
|
|
6
|
+
const errorOnGo = await DSMenuButtonCO.slotsTest.go();
|
|
7
|
+
if (errorOnGo) throw errorOnGo;
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
it('01: should have custom aria-label to each slot', async () => {
|
|
11
|
+
const triggerBtn = await DSMenuButtonCO.getSlotsOpinionatedButtonRoot();
|
|
12
|
+
await expect(triggerBtn).toHaveAttribute('aria-label', 'im dsOpinionatedbuttonRoot aria');
|
|
13
|
+
await triggerBtn.click();
|
|
14
|
+
|
|
15
|
+
const flyoutRoot = await DSMenuButtonCO.getSlotsFlyoutMenuRoot();
|
|
16
|
+
await flyoutRoot.waitForDisplayed();
|
|
17
|
+
const listWrapper = await DSMenuButtonCO.getSlotsListWrapper();
|
|
18
|
+
const floatingWrapper = await DSMenuButtonCO.getSlotsFloatingWrapper();
|
|
19
|
+
const menuItem = await DSMenuButtonCO.getSlotsMenuItemWrappers();
|
|
20
|
+
await expect(listWrapper).toHaveAttribute('aria-label', 'im dsFlyoutmenuListWrapper aria');
|
|
21
|
+
await expect(flyoutRoot).toHaveAttribute('aria-label', 'im dsFlyoutmenuRoot aria');
|
|
22
|
+
await expect(floatingWrapper).toHaveAttribute('aria-label', 'im dsFlyoutmenuFloatingWrapper aria');
|
|
23
|
+
await expect(menuItem).toHaveAttribute('aria-label', 'im dsMenuitemMenuItemWrapper aria');
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
it('02: should apply custom data-testid to each slot', async () => {
|
|
27
|
+
const triggerBtn = await DSMenuButtonCO.getSlotsOpinionatedButtonRoot();
|
|
28
|
+
const flyoutRoot = await DSMenuButtonCO.getSlotsFlyoutMenuRoot();
|
|
29
|
+
const listWrapper = await DSMenuButtonCO.getSlotsListWrapper();
|
|
30
|
+
const floatingWrapper = await DSMenuButtonCO.getSlotsFloatingWrapper();
|
|
31
|
+
const menuItem = await DSMenuButtonCO.getSlotsMenuItemWrappers();
|
|
32
|
+
|
|
33
|
+
await expect(triggerBtn).toHaveAttribute('data-testid', 'im dsOpinionatedbuttonRoot data');
|
|
34
|
+
await expect(flyoutRoot).toHaveAttribute('data-testid', 'im dsFlyoutmenuRoot data');
|
|
35
|
+
await expect(listWrapper).toHaveAttribute('data-testid', 'im dsFlyoutmenuListWrapper data');
|
|
36
|
+
await expect(floatingWrapper).toHaveAttribute('data-testid', 'im dsFlyoutmenuFloatingWrapper data');
|
|
37
|
+
await expect(menuItem).toHaveAttribute('data-testid', 'im dsMenuitemMenuItemWrapper data');
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import DSMenuButtonCO from '../DSMenuButtonCO';
|
|
2
|
+
|
|
3
|
+
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
4
|
+
describe('PUI-18357 - DSMenuButton:: Slots - Visual', () => {
|
|
5
|
+
before('loading page', async () => {
|
|
6
|
+
const errorOnGo = await DSMenuButtonCO.slotsTest.go();
|
|
7
|
+
if (errorOnGo) throw errorOnGo;
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
it('01: should display slots story in dark theme default state correctly', async () => {
|
|
11
|
+
const triggerBtn = await DSMenuButtonCO.getSlotsOpinionatedButtonRoot();
|
|
12
|
+
await triggerBtn.waitForDisplayed();
|
|
13
|
+
const snapshot = await browser.percyCheckScreenshot(DSMenuButtonCO.snapshotPath('slots-default'));
|
|
14
|
+
await expect(snapshot).toEqual(0);
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
it('02: should display slots story with menu open in dark theme correctly', async () => {
|
|
18
|
+
const triggerBtn = await DSMenuButtonCO.getSlotsOpinionatedButtonRoot();
|
|
19
|
+
await triggerBtn.click();
|
|
20
|
+
const flyoutRoot = await DSMenuButtonCO.getSlotsFlyoutMenuRoot();
|
|
21
|
+
await flyoutRoot.waitForDisplayed();
|
|
22
|
+
const snapshot = await browser.percyCheckScreenshot(DSMenuButtonCO.snapshotPath('slots-open'));
|
|
23
|
+
await expect(snapshot).toEqual(0);
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
}
|
|
@@ -31,6 +31,8 @@ export default class ModalSlideCO extends PageObject {
|
|
|
31
31
|
|
|
32
32
|
static applyAriaDisabledFooterURL = new Urlbuilder(PATH_E2E_MODALSLIDE, 'apply-aria-disabled-footer-test');
|
|
33
33
|
|
|
34
|
+
static slotsTest = new Urlbuilder(PATH_E2E_MODALSLIDE, 'slots-test');
|
|
35
|
+
|
|
34
36
|
static async getModalSlide() {
|
|
35
37
|
return $('[data-testid="ds-modal-slide"]');
|
|
36
38
|
}
|
|
@@ -95,6 +97,43 @@ export default class ModalSlideCO extends PageObject {
|
|
|
95
97
|
await browser.pause(500); // pause to allow animation to finish
|
|
96
98
|
}
|
|
97
99
|
|
|
100
|
+
// Slots
|
|
101
|
+
static async getSlotActualContent() {
|
|
102
|
+
return $('[data-dimsum-slot="dsModalslideActualContent"]');
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
static async getSlotContent() {
|
|
106
|
+
return $('[data-dimsum-slot="dsModalslideContent"]');
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
static async getSlotContentWrapper() {
|
|
110
|
+
return $('[data-dimsum-slot="dsModalslideContentWrapper"]');
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
static async getSlotFooterSeparator() {
|
|
114
|
+
return $('[data-dimsum-slot="dsModalslideFooterSeparator"]');
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
static async getSlotGridContent() {
|
|
118
|
+
return $('[data-dimsum-slot="dsModalslideGridContent"]');
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
static async getSlotHeaderSeparator() {
|
|
122
|
+
return $('[data-dimsum-slot="dsModalslideHeaderSeparator"]');
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
static async getSlotOverlay() {
|
|
126
|
+
return $('[data-dimsum-slot="dsModalslideOverlay"]');
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
static async getSlotRoot() {
|
|
130
|
+
return $('[data-dimsum-slot="dsModalslideRoot"]');
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
static async getSlotHeader() {
|
|
134
|
+
return $('[data-dimsum-parent-slot="dsModalslideTitle"]');
|
|
135
|
+
}
|
|
136
|
+
|
|
98
137
|
// Snapshots
|
|
99
138
|
static snapshotPath(example = 'basic') {
|
|
100
139
|
return PageObject.getSnapshotPathBuilder('ModalSlide', example, 'ds-modal-slide');
|
|
@@ -10,7 +10,8 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
10
10
|
});
|
|
11
11
|
|
|
12
12
|
it('01: should show consistent focus ring on modal body (5th tab stop)', async () => {
|
|
13
|
-
await ModalSlideCO.
|
|
13
|
+
const trigger = await ModalSlideCO.getOpenModalSlideBtn();
|
|
14
|
+
await trigger.click();
|
|
14
15
|
// Tab through CustomHeader: backarrow(1) -> breadcrumb items(2,3,4) -> body(5)
|
|
15
16
|
await browser.keys(Key.Tab);
|
|
16
17
|
await browser.keys(Key.Tab);
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/* eslint-disable max-lines */
|
|
2
|
+
import { Key } from 'webdriverio';
|
|
3
|
+
import ModalSlideCO from '../ModalSlideCO';
|
|
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-18428 - SquareIndicator: Slots - Func Test', () => {
|
|
12
|
+
before('loading page', async () => {
|
|
13
|
+
const errorOnGo = await ModalSlideCO.slotsTest.go();
|
|
14
|
+
if (errorOnGo) throw errorOnGo;
|
|
15
|
+
});
|
|
16
|
+
it('01: each SquareIndicator slot to have custom aria-* attribute', async () => {
|
|
17
|
+
await browser.keys(Key.Tab);
|
|
18
|
+
await browser.keys(Key.Tab);
|
|
19
|
+
await browser.keys(Key.Return);
|
|
20
|
+
const actualContent = await ModalSlideCO.getSlotActualContent();
|
|
21
|
+
const content = await ModalSlideCO.getSlotContent();
|
|
22
|
+
const contentWrapper = await ModalSlideCO.getSlotContentWrapper();
|
|
23
|
+
const footerSeparator = await ModalSlideCO.getSlotFooterSeparator();
|
|
24
|
+
const gridContent = await ModalSlideCO.getSlotGridContent();
|
|
25
|
+
const headerSeparator = await ModalSlideCO.getSlotHeaderSeparator();
|
|
26
|
+
const overlay = await ModalSlideCO.getSlotOverlay();
|
|
27
|
+
const root = await ModalSlideCO.getSlotRoot();
|
|
28
|
+
await expect(actualContent).toHaveAttribute('aria-label', 'actual content aria');
|
|
29
|
+
await expect(content).toHaveAttribute('aria-label', 'content aria');
|
|
30
|
+
await expect(contentWrapper).toHaveAttribute('aria-label', 'content wrapper aria');
|
|
31
|
+
await expect(footerSeparator).toHaveAttribute('aria-label', 'footer separator aria');
|
|
32
|
+
await expect(gridContent).toHaveAttribute('aria-label', 'grid content aria');
|
|
33
|
+
await expect(headerSeparator).toHaveAttribute('aria-label', 'header separator aria');
|
|
34
|
+
await expect(overlay).toHaveAttribute('aria-label', 'overlay aria');
|
|
35
|
+
await expect(root).toHaveAttribute('aria-label', 'root aria');
|
|
36
|
+
});
|
|
37
|
+
it('02: each SquareIndicator slot to have custom data-* attribute', async () => {
|
|
38
|
+
const actualContent = await ModalSlideCO.getSlotActualContent();
|
|
39
|
+
const content = await ModalSlideCO.getSlotContent();
|
|
40
|
+
const contentWrapper = await ModalSlideCO.getSlotContentWrapper();
|
|
41
|
+
const footerSeparator = await ModalSlideCO.getSlotFooterSeparator();
|
|
42
|
+
const gridContent = await ModalSlideCO.getSlotGridContent();
|
|
43
|
+
const headerSeparator = await ModalSlideCO.getSlotHeaderSeparator();
|
|
44
|
+
const overlay = await ModalSlideCO.getSlotOverlay();
|
|
45
|
+
const root = await ModalSlideCO.getSlotRoot();
|
|
46
|
+
await expect(actualContent).toHaveAttribute('data-testid', 'actual content data');
|
|
47
|
+
await expect(content).toHaveAttribute('data-testid', 'content data');
|
|
48
|
+
await expect(contentWrapper).toHaveAttribute('data-testid', 'content wrapper data');
|
|
49
|
+
await expect(footerSeparator).toHaveAttribute('data-testid', 'footer separator data');
|
|
50
|
+
await expect(gridContent).toHaveAttribute('data-testid', 'grid content data');
|
|
51
|
+
await expect(headerSeparator).toHaveAttribute('data-testid', 'header separator data');
|
|
52
|
+
await expect(overlay).toHaveAttribute('data-testid', 'overlay data');
|
|
53
|
+
await expect(root).toHaveAttribute('data-testid', 'root data');
|
|
54
|
+
});
|
|
55
|
+
it('03: each ModalSlide slot to have custom lang attribute', async () => {
|
|
56
|
+
const actualContent = await ModalSlideCO.getSlotActualContent();
|
|
57
|
+
const content = await ModalSlideCO.getSlotContent();
|
|
58
|
+
const contentWrapper = await ModalSlideCO.getSlotContentWrapper();
|
|
59
|
+
const footerSeparator = await ModalSlideCO.getSlotFooterSeparator();
|
|
60
|
+
const gridContent = await ModalSlideCO.getSlotGridContent();
|
|
61
|
+
const headerSeparator = await ModalSlideCO.getSlotHeaderSeparator();
|
|
62
|
+
const overlay = await ModalSlideCO.getSlotOverlay();
|
|
63
|
+
const root = await ModalSlideCO.getSlotRoot();
|
|
64
|
+
await expect(actualContent).toHaveAttribute('lang', 'en');
|
|
65
|
+
await expect(content).toHaveAttribute('lang', 'es');
|
|
66
|
+
await expect(contentWrapper).toHaveAttribute('lang', 'fr');
|
|
67
|
+
await expect(footerSeparator).toHaveAttribute('lang', 'de');
|
|
68
|
+
await expect(gridContent).toHaveAttribute('lang', 'it');
|
|
69
|
+
await expect(headerSeparator).toHaveAttribute('lang', 'pt');
|
|
70
|
+
await expect(overlay).toHaveAttribute('lang', 'ja');
|
|
71
|
+
await expect(root).toHaveAttribute('lang', 'zh');
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/* eslint-disable max-lines */
|
|
2
|
+
import { Key } from 'webdriverio';
|
|
3
|
+
import ModalSlideCO from '../ModalSlideCO';
|
|
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-18429 - ModalSlide: Slots Test - Visual', () => {
|
|
12
|
+
before('loading page', async () => {
|
|
13
|
+
const errorOnGo = await ModalSlideCO.slotsTest.go();
|
|
14
|
+
if (errorOnGo) throw errorOnGo;
|
|
15
|
+
});
|
|
16
|
+
it('01: should display ModalSlide with customized slots', async () => {
|
|
17
|
+
await browser.eyesOpen();
|
|
18
|
+
await browser.keys(Key.Tab);
|
|
19
|
+
await browser.keys(Key.Tab);
|
|
20
|
+
await browser.keys(Key.Return);
|
|
21
|
+
const root = await ModalSlideCO.getSlotRoot();
|
|
22
|
+
await root.waitForDisplayed();
|
|
23
|
+
const snapshot = await browser.eyesCheckSnapshot(ModalSlideCO.snapshotPath('modal-slide-slots'));
|
|
24
|
+
await expect(snapshot).toEqual(0);
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
}
|
|
@@ -7,8 +7,8 @@ describe('PUI-9354:: Notification Badge: Relate to component', () => {
|
|
|
7
7
|
if (errorOnGo) throw errorOnGo;
|
|
8
8
|
});
|
|
9
9
|
it('01: Should display relate to component', async () => {
|
|
10
|
-
await
|
|
11
|
-
const snapshot = await browser.
|
|
10
|
+
await DSNotificationBadgeCO.getNotificationBadgeByIndex(0).waitForDisplayed();
|
|
11
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
12
12
|
await expect(snapshot).toEqual(0);
|
|
13
13
|
});
|
|
14
14
|
});
|
|
@@ -19,8 +19,8 @@ describe('PUI-9353:: Notification Badge: Disabled', () => {
|
|
|
19
19
|
if (errorOnGo) throw errorOnGo;
|
|
20
20
|
});
|
|
21
21
|
it('01: Should display disabled badge', async () => {
|
|
22
|
-
await
|
|
23
|
-
const snapshot = await browser.
|
|
22
|
+
await DSNotificationBadgeCO.getNotificationBadgeByIndex(0).waitForDisplayed();
|
|
23
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
24
24
|
await expect(snapshot).toEqual(0);
|
|
25
25
|
});
|
|
26
26
|
});
|
|
@@ -31,8 +31,8 @@ describe('PUI-9352:: Notification Badge: Background color', () => {
|
|
|
31
31
|
if (errorOnGo) throw errorOnGo;
|
|
32
32
|
});
|
|
33
33
|
it('01: Should display custom background color badges', async () => {
|
|
34
|
-
await
|
|
35
|
-
const snapshot = await browser.
|
|
34
|
+
await DSNotificationBadgeCO.getNotificationBadgeByIndex(0).waitForDisplayed();
|
|
35
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
36
36
|
await expect(snapshot).toEqual(0);
|
|
37
37
|
});
|
|
38
38
|
});
|
|
@@ -43,8 +43,8 @@ describe('PUI-9355:: Notification Badge: Alphanumerical', () => {
|
|
|
43
43
|
if (errorOnGo) throw errorOnGo;
|
|
44
44
|
});
|
|
45
45
|
it('01: Should display custom background color badges', async () => {
|
|
46
|
-
await
|
|
47
|
-
const snapshot = await browser.
|
|
46
|
+
await DSNotificationBadgeCO.getNotificationBadgeByIndex(0).waitForDisplayed();
|
|
47
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
48
48
|
await expect(snapshot).toEqual(0);
|
|
49
49
|
});
|
|
50
50
|
});
|
|
@@ -55,8 +55,8 @@ describe('PUI-11412:: Notification Badge: Chip, Icon and Button integration -Vis
|
|
|
55
55
|
if (errorOnGo) throw errorOnGo;
|
|
56
56
|
});
|
|
57
57
|
it('01: Should display integration with Chips and Button components correctly', async () => {
|
|
58
|
-
await
|
|
59
|
-
const snapshot = await browser.
|
|
58
|
+
await DSNotificationBadgeCO.getNotificationBadgeByIndex(0).waitForDisplayed();
|
|
59
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
60
60
|
await expect(snapshot).toEqual(0);
|
|
61
61
|
});
|
|
62
62
|
});
|
|
@@ -66,8 +66,8 @@ describe('PUI-11413:: Notification Badge: Custom Component Integration -Visual T
|
|
|
66
66
|
if (errorOnGo) throw errorOnGo;
|
|
67
67
|
});
|
|
68
68
|
it('01: Should display integration with custom components correctly', async () => {
|
|
69
|
-
await
|
|
70
|
-
const snapshot = await browser.
|
|
69
|
+
await DSNotificationBadgeCO.getNotificationBadgeByIndex(0).waitForDisplayed();
|
|
70
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
71
71
|
await expect(snapshot).toEqual(0);
|
|
72
72
|
});
|
|
73
73
|
});
|
|
@@ -81,7 +81,7 @@ describe('PUI-11817:: NotificationBadge: with LeftNavigation example -Visual', (
|
|
|
81
81
|
await browser.eyesOpen();
|
|
82
82
|
const notification = await DSNotificationBadgeCO.getNotificationBadgeByIndex(1);
|
|
83
83
|
await notification.waitForDisplayed();
|
|
84
|
-
const snapshot = await browser.
|
|
84
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
85
85
|
await expect(snapshot).toEqual(0);
|
|
86
86
|
});
|
|
87
87
|
it('02: should display left nav with badged items selected, one focused correctly', async () => {
|
|
@@ -89,7 +89,7 @@ describe('PUI-11817:: NotificationBadge: with LeftNavigation example -Visual', (
|
|
|
89
89
|
|
|
90
90
|
const item = await DSNotificationBadgeCO.getIconByIndex(2);
|
|
91
91
|
await item.click();
|
|
92
|
-
const snapshot = await browser.
|
|
92
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
93
93
|
await expect(snapshot).toEqual(0);
|
|
94
94
|
});
|
|
95
95
|
});
|
|
@@ -99,10 +99,8 @@ describe('PUI-14185:: NotificationBadge: textColor prop - Visual Test ', () => {
|
|
|
99
99
|
if (errorOnGo) throw errorOnGo;
|
|
100
100
|
});
|
|
101
101
|
it('01: should display notification badge with custom textColor', async () => {
|
|
102
|
-
await
|
|
103
|
-
const
|
|
104
|
-
await notification.waitForDisplayed();
|
|
105
|
-
const snapshot = await browser.eyesCheckSnapshot(DSNotificationBadgeCO.snapshotPath('badge-with-custom-textColor'));
|
|
102
|
+
await DSNotificationBadgeCO.getNotificationBadgeByIndex(1).waitForDisplayed();
|
|
103
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
106
104
|
await expect(snapshot).toEqual(0);
|
|
107
105
|
});
|
|
108
106
|
});
|
|
@@ -114,12 +112,11 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
114
112
|
if (errorOnGo) throw errorOnGo;
|
|
115
113
|
});
|
|
116
114
|
it('01: should display toolbar with toolbar correctly', async () => {
|
|
117
|
-
await browser.eyesOpen();
|
|
118
115
|
const notification = await DSNotificationBadgeCO.getNotificationBadgeByIndex(1);
|
|
119
116
|
await notification.waitForDisplayed();
|
|
120
117
|
await browser.keys(Key.Tab);
|
|
121
118
|
await browser.keys(Key.ArrowRight);
|
|
122
|
-
const snapshot = await browser.
|
|
119
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
123
120
|
await expect(snapshot).toEqual(0);
|
|
124
121
|
});
|
|
125
122
|
});
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { PATH_E2E_PAGE_LAYOUT } from '../paths';
|
|
2
2
|
import { PageObject, Urlbuilder } from '../helpers';
|
|
3
3
|
|
|
4
4
|
export default class PageLayoutCO extends PageObject {
|
|
5
|
-
static basicURL = new Urlbuilder(
|
|
5
|
+
static basicURL = new Urlbuilder(PATH_E2E_PAGE_LAYOUT, 'basic-test');
|
|
6
6
|
|
|
7
|
-
static complexURL = new Urlbuilder(
|
|
7
|
+
static complexURL = new Urlbuilder(PATH_E2E_PAGE_LAYOUT, 'complex-page-test');
|
|
8
8
|
|
|
9
|
-
static integratedURL = new Urlbuilder(
|
|
9
|
+
static integratedURL = new Urlbuilder(PATH_E2E_PAGE_LAYOUT, 'integrated-example-test');
|
|
10
10
|
|
|
11
11
|
// Snapshots
|
|
12
12
|
static snapshotPath(example = 'basic') {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/* eslint-disable wdio/no-pause */
|
|
1
2
|
import DSProgressIndicatorCO from './DSProgressIndicatorCO';
|
|
2
3
|
import { axeCoreCheck } from '../helpers';
|
|
3
4
|
|
|
@@ -14,6 +15,7 @@ if (
|
|
|
14
15
|
});
|
|
15
16
|
it('01: should display basic progress indicator and pass axe-core', async () => {
|
|
16
17
|
await (await DSProgressIndicatorCO.getUploadLabel()).waitForDisplayed();
|
|
18
|
+
await browser.pause(500);
|
|
17
19
|
const result = await axeCoreCheck();
|
|
18
20
|
expect(result.length).toBe(0);
|
|
19
21
|
});
|