dimsum-e2e-tests 3.70.0-next.2 → 3.70.0-next.21
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 +110 -0
- package/ds-autocomplete/DSAutocomplete.visual.spec.js +34 -0
- package/ds-autocomplete/DSAutocompleteCO.js +2 -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-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 +10 -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/components/HeaderCO.js +22 -10
- package/ds-dialog/DSDialog.visual.spec.js +16 -31
- package/ds-dialog/DSDialogCO.js +58 -0
- package/ds-dialog/alert-dialog/DSDialog.alert-dialog-critical.axe-core.func.spec.js +27 -0
- package/ds-dialog/alert-dialog/DSDialog.alert-dialog-critical.func.spec.js +56 -0
- package/ds-dialog/alert-dialog/DSDialog.alert-dialog-critical.visual.spec.js +20 -0
- package/ds-dialog/alert-dialog/DSDialog.alert-dialog-dismissible.axe-core.func.spec.js +25 -0
- package/ds-dialog/alert-dialog/DSDialog.alert-dialog-dismissible.func.spec.js +52 -0
- package/ds-dialog/alert-dialog/DSDialog.alert-dialog-dismissible.visual.spec.js +20 -0
- package/ds-dialog/axe-core/DSDialog.accessible-form.axe-core.func.spec.js +25 -0
- package/ds-dialog/axe-core/DSDialog.basic.axe-core.func.spec.js +25 -0
- package/ds-dialog/axe-core/DSDialog.centered.axe-core.func.spec.js +25 -0
- package/ds-dialog/axe-core/DSDialog.decision.axe-core.func.spec.js +57 -0
- package/ds-dialog/axe-core/DSDialog.long-body.axe-core.func.spec.js +25 -0
- package/ds-dialog/axe-core/DSDialog.warning.axe-core.func.spec.js +24 -0
- package/ds-dialog/axe-core/DSDialog.wizard.axe-core.func.spec.js +28 -0
- package/ds-dialog/click-outside/DSDialog.click-outside.func.spec.js +31 -0
- package/ds-dialog/esc-close/DSDialog.esc-close.func.spec.js +31 -0
- package/ds-dialog/flexible-heading-level/DSDialog.flexible-heading-level.axe-core.func.spec.js +46 -0
- package/ds-dialog/flexible-heading-level/DSDialog.flexible-heading-level.func.spec.js +50 -0
- package/ds-dialog/form-dialog-datepicker/DSDialog.form-datepicker.axe-core.func.spec.js +25 -0
- package/ds-dialog/form-dialog-datepicker/DSDialog.form-datepicker.visual.spec.js +37 -0
- package/ds-dialog/single-button-footer/DSDialog.single-button-footer.axe-core.func.spec.js +25 -0
- package/ds-dialog/single-button-footer/DSDialog.single-button-footer.visual.spec.js +20 -0
- package/ds-dialog/size-variants/DSDialog.size-variants.visual.spec.js +116 -0
- package/ds-form-combobox-multi/DSComboboxMultiCO.js +6 -2
- package/ds-form-combobox-multi/aria-busy-loading/DSComboboxMulti.aria-busy-loading.axe-core.func.spec.js +49 -0
- package/ds-form-combobox-multi/aria-busy-loading/DSComboboxMulti.aria-busy-loading.func.spec.js +57 -0
- package/ds-form-combobox-multi/disabled/DSComboboxMulti.disabled.axe-core.func.spec.js +24 -0
- package/ds-form-combobox-single/DSComboboxSingleCO.js +6 -2
- 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/disabled/DSComboboxSingle.disabled.axe-core.func.spec.js +24 -0
- package/ds-form-native-select/NativeSelect.axe-core.func.spec.js +39 -0
- package/ds-form-native-select/NativeSelectCO.js +6 -0
- package/ds-global-header/GlobalHeader.axe-core.func.spec.js +30 -0
- package/ds-global-header/GlobalHeader.visual.spec.js +31 -0
- package/ds-leftnavigation/LeftNavigationCO.js +2 -2
- 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-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-tab-button/DSTabButton.func.spec.js +1 -1
- package/ds-tabs/DSTabs.visual.spec.js +1 -2
- package/ds-tabs/DSTabsCO.js +2 -2
- package/ds-tabs/with-carousel/DSTabs.with-carousel.func.spec.js +22 -7
- package/ds-tabs/with-carousel/DSTabs.with-carousel.visual.spec.js +9 -9
- package/ds-tooltip-v3/DSTooltipV3CO.js +6 -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-treeview/DSTreeViewCO.js +2 -2
- package/package.json +149 -151
- package/paths.js +5 -1
- package/ds-chat-tile/TileCO.js +0 -35
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import DSDialog from '../DSDialogCO';
|
|
2
|
+
import DSWizardCO from '../../ds-wizard/DSWizardCO';
|
|
3
|
+
import { axeCoreCheck } from '../../helpers';
|
|
4
|
+
|
|
5
|
+
if (
|
|
6
|
+
(!browser.capabilities['ice:options'].isPhone &&
|
|
7
|
+
!browser.capabilities['ice:options'].isTablet &&
|
|
8
|
+
browser.capabilities.browserName === 'chrome') ||
|
|
9
|
+
browser.capabilities.browserName === 'Chrome'
|
|
10
|
+
) {
|
|
11
|
+
describe('PUI-18396 - DSDialog:: Wizard dialog -Axe-Core', () => {
|
|
12
|
+
before('loading page', async () => {
|
|
13
|
+
const errorOnGo = await DSDialog.wizardURL.go();
|
|
14
|
+
if (errorOnGo) throw errorOnGo;
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
it('01: should pass axe-core scan', async () => {
|
|
18
|
+
const triggerBtn = await DSDialog.getTriggerBtn();
|
|
19
|
+
await triggerBtn.click();
|
|
20
|
+
const dialog = await DSDialog.getDialog();
|
|
21
|
+
await dialog.waitForDisplayed();
|
|
22
|
+
const step1 = await DSWizardCO.getStep(1);
|
|
23
|
+
await step1.waitForDisplayed();
|
|
24
|
+
const result = await axeCoreCheck();
|
|
25
|
+
expect(result.length).toBe(0);
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import DSDialog from '../DSDialogCO';
|
|
2
|
+
|
|
3
|
+
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
4
|
+
// Tests for click-outside close behavior (onClickOutside callback)
|
|
5
|
+
describe('PUI-18397 - DSDialog:: click outside close -Func', () => {
|
|
6
|
+
before('loading page', async () => {
|
|
7
|
+
const errorOnGo = await DSDialog.clickOutsideURL.go();
|
|
8
|
+
if (errorOnGo) throw errorOnGo;
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
it('01: should open dialog after clicking trigger', async () => {
|
|
12
|
+
const triggerBtn = await DSDialog.getTriggerBtn();
|
|
13
|
+
await triggerBtn.click();
|
|
14
|
+
const dialog = await DSDialog.getDialog();
|
|
15
|
+
await dialog.waitForDisplayed();
|
|
16
|
+
await expect(dialog).toBeDisplayedInViewport();
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
it('02: should close dialog on click outside', async () => {
|
|
20
|
+
const background = await DSDialog.getDialogBackground();
|
|
21
|
+
await background.click({ x: 10, y: 10 });
|
|
22
|
+
const dialog = await DSDialog.getDialog();
|
|
23
|
+
await expect(dialog).not.toBeDisplayed();
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
it('03: should return focus to trigger after close', async () => {
|
|
27
|
+
const triggerBtn = await DSDialog.getTriggerBtn();
|
|
28
|
+
await expect(triggerBtn).toBeFocused();
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Key } from 'webdriverio';
|
|
2
|
+
import DSDialog from '../DSDialogCO';
|
|
3
|
+
|
|
4
|
+
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
5
|
+
// Tests for ESC key close behavior (onClose callback)
|
|
6
|
+
describe('PUI-18382 - DSDialog:: ESC key close -Func', () => {
|
|
7
|
+
before('loading page', async () => {
|
|
8
|
+
const errorOnGo = await DSDialog.escCloseURL.go();
|
|
9
|
+
if (errorOnGo) throw errorOnGo;
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
it('01: should open dialog after clicking trigger', async () => {
|
|
13
|
+
const triggerBtn = await DSDialog.getTriggerBtn();
|
|
14
|
+
await triggerBtn.click();
|
|
15
|
+
const dialog = await DSDialog.getDialog();
|
|
16
|
+
await dialog.waitForDisplayed();
|
|
17
|
+
await expect(dialog).toBeDisplayedInViewport();
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
it('02: should close dialog on ESC key press', async () => {
|
|
21
|
+
await browser.keys(Key.Escape);
|
|
22
|
+
const dialog = await DSDialog.getDialog();
|
|
23
|
+
await expect(dialog).not.toBeDisplayed();
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
it('03: should return focus to trigger after ESC close', async () => {
|
|
27
|
+
const triggerBtn = await DSDialog.getTriggerBtn();
|
|
28
|
+
await expect(triggerBtn).toBeFocused();
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
}
|
package/ds-dialog/flexible-heading-level/DSDialog.flexible-heading-level.axe-core.func.spec.js
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import DSDialogCO from '../DSDialogCO';
|
|
2
|
+
import { axeCoreCheck } from '../../helpers';
|
|
3
|
+
|
|
4
|
+
if (
|
|
5
|
+
(!browser.capabilities['ice:options'].isPhone &&
|
|
6
|
+
!browser.capabilities['ice:options'].isTablet &&
|
|
7
|
+
browser.capabilities.browserName === 'chrome') ||
|
|
8
|
+
browser.capabilities.browserName === 'Chrome'
|
|
9
|
+
) {
|
|
10
|
+
describe('PUI-18398 - DSDialog:: flexible heading level - Axe-Core', () => {
|
|
11
|
+
beforeEach(async () => {
|
|
12
|
+
const errorOnGo = await DSDialogCO.flexibleHeadingLevelURL.go();
|
|
13
|
+
if (errorOnGo) throw errorOnGo;
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
it('01: should have no accessibility violations with h2 title', async () => {
|
|
17
|
+
const triggerBtn = await DSDialogCO.getOpenDialogBtnByTestId('open-dialog-h2-button');
|
|
18
|
+
await triggerBtn.click();
|
|
19
|
+
const dialog = await DSDialogCO.getDialog();
|
|
20
|
+
await dialog.waitForDisplayed();
|
|
21
|
+
|
|
22
|
+
const result = await axeCoreCheck();
|
|
23
|
+
expect(result.length).toBe(0);
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
it('02: should have no accessibility violations with default h3 title', async () => {
|
|
27
|
+
const triggerBtn = await DSDialogCO.getOpenDialogBtnByTestId('open-dialog-h3-button');
|
|
28
|
+
await triggerBtn.click();
|
|
29
|
+
const dialog = await DSDialogCO.getDialog();
|
|
30
|
+
await dialog.waitForDisplayed();
|
|
31
|
+
|
|
32
|
+
const result = await axeCoreCheck();
|
|
33
|
+
expect(result.length).toBe(0);
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
it('03: should have no accessibility violations with h4 title', async () => {
|
|
37
|
+
const triggerBtn = await DSDialogCO.getOpenDialogBtnByTestId('open-dialog-h4-button');
|
|
38
|
+
await triggerBtn.click();
|
|
39
|
+
const dialog = await DSDialogCO.getDialog();
|
|
40
|
+
await dialog.waitForDisplayed();
|
|
41
|
+
|
|
42
|
+
const result = await axeCoreCheck();
|
|
43
|
+
expect(result.length).toBe(0);
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import DSDialogCO from '../DSDialogCO';
|
|
2
|
+
|
|
3
|
+
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
4
|
+
describe('PUI-18399 - DSDialog:: flexible heading level - Func', () => {
|
|
5
|
+
before('loading page', async () => {
|
|
6
|
+
const errorOnGo = await DSDialogCO.flexibleHeadingLevelURL.go();
|
|
7
|
+
if (errorOnGo) throw errorOnGo;
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
afterEach(async () => {
|
|
11
|
+
await browser.keys('Escape');
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
it('01: should render DSDialogTitle as h2 when as="h2" is passed', async () => {
|
|
15
|
+
const triggerBtn = await DSDialogCO.getOpenDialogBtnByTestId('open-dialog-h2-button');
|
|
16
|
+
await triggerBtn.click();
|
|
17
|
+
const dialog = await DSDialogCO.getDialog();
|
|
18
|
+
await dialog.waitForDisplayed();
|
|
19
|
+
|
|
20
|
+
const title = await DSDialogCO.getDialogTitleByTestId('dialog-title-h2');
|
|
21
|
+
await expect(title).toBeExisting();
|
|
22
|
+
await expect((await title.getTagName()).toLowerCase()).toBe('h2');
|
|
23
|
+
await expect(title).toHaveText('Dialog title as h2');
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
it('02: should render DSDialogTitle as h3 by default', async () => {
|
|
27
|
+
const triggerBtn = await DSDialogCO.getOpenDialogBtnByTestId('open-dialog-h3-button');
|
|
28
|
+
await triggerBtn.click();
|
|
29
|
+
const dialog = await DSDialogCO.getDialog();
|
|
30
|
+
await dialog.waitForDisplayed();
|
|
31
|
+
|
|
32
|
+
const title = await DSDialogCO.getDialogTitleByTestId('dialog-title-h3');
|
|
33
|
+
await expect(title).toBeExisting();
|
|
34
|
+
await expect((await title.getTagName()).toLowerCase()).toBe('h3');
|
|
35
|
+
await expect(title).toHaveText('Dialog title as h3 (default)');
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
it('03: should render DSDialogTitle as h4 when as="h4" is passed', async () => {
|
|
39
|
+
const triggerBtn = await DSDialogCO.getOpenDialogBtnByTestId('open-dialog-h4-button');
|
|
40
|
+
await triggerBtn.click();
|
|
41
|
+
const dialog = await DSDialogCO.getDialog();
|
|
42
|
+
await dialog.waitForDisplayed();
|
|
43
|
+
|
|
44
|
+
const title = await DSDialogCO.getDialogTitleByTestId('dialog-title-h4');
|
|
45
|
+
await expect(title).toBeExisting();
|
|
46
|
+
await expect((await title.getTagName()).toLowerCase()).toBe('h4');
|
|
47
|
+
await expect(title).toHaveText('Dialog title as h4');
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import DSDialog from '../DSDialogCO';
|
|
2
|
+
import { axeCoreCheck } from '../../helpers';
|
|
3
|
+
|
|
4
|
+
if (
|
|
5
|
+
(!browser.capabilities['ice:options'].isPhone &&
|
|
6
|
+
!browser.capabilities['ice:options'].isTablet &&
|
|
7
|
+
browser.capabilities.browserName === 'chrome') ||
|
|
8
|
+
browser.capabilities.browserName === 'Chrome'
|
|
9
|
+
) {
|
|
10
|
+
describe('PUI-18400 - DSDialog:: form dialog date picker -Axe-Core', () => {
|
|
11
|
+
before('loading page', async () => {
|
|
12
|
+
const errorOnGo = await DSDialog.formDialogDatePickerURL.go();
|
|
13
|
+
if (errorOnGo) throw errorOnGo;
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
it('01: should pass axe-core scan', async () => {
|
|
17
|
+
const triggerBtn = await DSDialog.getTriggerBtn();
|
|
18
|
+
await triggerBtn.click();
|
|
19
|
+
const dialog = await DSDialog.getDialog();
|
|
20
|
+
await dialog.waitForDisplayed();
|
|
21
|
+
const result = await axeCoreCheck();
|
|
22
|
+
expect(result.length).toBe(0);
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import DSDialog from '../DSDialogCO';
|
|
2
|
+
|
|
3
|
+
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
4
|
+
// Tests for form dialog with date picker integration
|
|
5
|
+
describe('PUI-18401 - DSDialog:: form dialog with date picker -Visual', () => {
|
|
6
|
+
before('loading page', async () => {
|
|
7
|
+
const errorOnGo = await DSDialog.formDialogDatePickerURL.go();
|
|
8
|
+
if (errorOnGo) throw errorOnGo;
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
it('01: should display form dialog with date picker correctly', async () => {
|
|
12
|
+
const triggerBtn = await DSDialog.getTriggerBtn();
|
|
13
|
+
await triggerBtn.click();
|
|
14
|
+
const dialog = await DSDialog.getDialog();
|
|
15
|
+
await dialog.waitForDisplayed();
|
|
16
|
+
const snapshot = await browser.percyCheckScreenshot(DSDialog.snapshotPath('form-dialog-datepicker'));
|
|
17
|
+
await expect(snapshot).toEqual(0);
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
// Tests for form dialog with date picker workaround
|
|
22
|
+
describe('PUI-18402 - DSDialog:: form dialog date picker workaround -Visual', () => {
|
|
23
|
+
before('loading page', async () => {
|
|
24
|
+
const errorOnGo = await DSDialog.formDialogDatePickerWorkaroundURL.go();
|
|
25
|
+
if (errorOnGo) throw errorOnGo;
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
it('01: should display form dialog with workaround correctly', async () => {
|
|
29
|
+
const triggerBtn = await DSDialog.getTriggerBtn();
|
|
30
|
+
await triggerBtn.click();
|
|
31
|
+
const dialog = await DSDialog.getDialog();
|
|
32
|
+
await dialog.waitForDisplayed();
|
|
33
|
+
const snapshot = await browser.percyCheckScreenshot(DSDialog.snapshotPath('form-dialog-datepicker-workaround'));
|
|
34
|
+
await expect(snapshot).toEqual(0);
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import DSDialog from '../DSDialogCO';
|
|
2
|
+
import { axeCoreCheck } from '../../helpers';
|
|
3
|
+
|
|
4
|
+
if (
|
|
5
|
+
(!browser.capabilities['ice:options'].isPhone &&
|
|
6
|
+
!browser.capabilities['ice:options'].isTablet &&
|
|
7
|
+
browser.capabilities.browserName === 'chrome') ||
|
|
8
|
+
browser.capabilities.browserName === 'Chrome'
|
|
9
|
+
) {
|
|
10
|
+
describe('PUI-18403 - DSDialog:: single button footer -Axe-Core', () => {
|
|
11
|
+
before('loading page', async () => {
|
|
12
|
+
const errorOnGo = await DSDialog.singleButtonFooterURL.go();
|
|
13
|
+
if (errorOnGo) throw errorOnGo;
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
it('01: should pass axe-core scan', async () => {
|
|
17
|
+
const triggerBtn = await DSDialog.getTriggerBtn();
|
|
18
|
+
await triggerBtn.click();
|
|
19
|
+
const dialog = await DSDialog.getDialog();
|
|
20
|
+
await dialog.waitForDisplayed();
|
|
21
|
+
const result = await axeCoreCheck();
|
|
22
|
+
expect(result.length).toBe(0);
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import DSDialog from '../DSDialogCO';
|
|
2
|
+
|
|
3
|
+
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
4
|
+
// Tests for UX use case: Modal Dialog with single button footer
|
|
5
|
+
describe('PUI-18404 - DSDialog:: single button footer layout -Visual', () => {
|
|
6
|
+
before('loading page', async () => {
|
|
7
|
+
const errorOnGo = await DSDialog.singleButtonFooterURL.go();
|
|
8
|
+
if (errorOnGo) throw errorOnGo;
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
it('01: should display single button footer dialog correctly', async () => {
|
|
12
|
+
const triggerBtn = await DSDialog.getTriggerBtn();
|
|
13
|
+
await triggerBtn.click();
|
|
14
|
+
const dialog = await DSDialog.getDialog();
|
|
15
|
+
await dialog.waitForDisplayed();
|
|
16
|
+
const snapshot = await browser.percyCheckScreenshot(DSDialog.snapshotPath('single-button-footer'));
|
|
17
|
+
await expect(snapshot).toEqual(0);
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import DSDialog from '../DSDialogCO';
|
|
2
|
+
|
|
3
|
+
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
4
|
+
// Visual tests for all dialog size/width variants
|
|
5
|
+
describe('PUI-18405 - DSDialog:: size small layout -Visual', () => {
|
|
6
|
+
before('loading page', async () => {
|
|
7
|
+
const errorOnGo = await DSDialog.sizeVariantsURL.go();
|
|
8
|
+
if (errorOnGo) throw errorOnGo;
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
it('01: should display small (320px) dialog correctly', async () => {
|
|
12
|
+
const btn = await DSDialog.getOpenDialogBySize('small');
|
|
13
|
+
await btn.click();
|
|
14
|
+
const dialog = await DSDialog.getDialog();
|
|
15
|
+
await dialog.waitForDisplayed();
|
|
16
|
+
const snapshot = await browser.percyCheckScreenshot(DSDialog.snapshotPath('size-small'));
|
|
17
|
+
await expect(snapshot).toEqual(0);
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
describe('PUI-18406 - DSDialog:: size default layout -Visual', () => {
|
|
22
|
+
before('loading page', async () => {
|
|
23
|
+
const errorOnGo = await DSDialog.sizeVariantsURL.go();
|
|
24
|
+
if (errorOnGo) throw errorOnGo;
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
it('01: should display default (576px) dialog correctly', async () => {
|
|
28
|
+
const btn = await DSDialog.getOpenDialogBySize('default');
|
|
29
|
+
await btn.click();
|
|
30
|
+
const dialog = await DSDialog.getDialog();
|
|
31
|
+
await dialog.waitForDisplayed();
|
|
32
|
+
const snapshot = await browser.percyCheckScreenshot(DSDialog.snapshotPath('size-default'));
|
|
33
|
+
await expect(snapshot).toEqual(0);
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
describe('PUI-18407 - DSDialog:: size medium layout -Visual', () => {
|
|
38
|
+
before('loading page', async () => {
|
|
39
|
+
const errorOnGo = await DSDialog.sizeVariantsURL.go();
|
|
40
|
+
if (errorOnGo) throw errorOnGo;
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
it('01: should display medium (656px) dialog correctly', async () => {
|
|
44
|
+
const btn = await DSDialog.getOpenDialogBySize('medium');
|
|
45
|
+
await btn.click();
|
|
46
|
+
const dialog = await DSDialog.getDialog();
|
|
47
|
+
await dialog.waitForDisplayed();
|
|
48
|
+
const snapshot = await browser.percyCheckScreenshot(DSDialog.snapshotPath('size-medium'));
|
|
49
|
+
await expect(snapshot).toEqual(0);
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
describe('PUI-18408 - DSDialog:: size large layout -Visual', () => {
|
|
54
|
+
before('loading page', async () => {
|
|
55
|
+
const errorOnGo = await DSDialog.sizeVariantsURL.go();
|
|
56
|
+
if (errorOnGo) throw errorOnGo;
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
it('01: should display large (848px) dialog correctly', async () => {
|
|
60
|
+
const btn = await DSDialog.getOpenDialogBySize('large');
|
|
61
|
+
await btn.click();
|
|
62
|
+
const dialog = await DSDialog.getDialog();
|
|
63
|
+
await dialog.waitForDisplayed();
|
|
64
|
+
const snapshot = await browser.percyCheckScreenshot(DSDialog.snapshotPath('size-large'));
|
|
65
|
+
await expect(snapshot).toEqual(0);
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
describe('PUI-18409 - DSDialog:: size x-large layout -Visual', () => {
|
|
70
|
+
before('loading page', async () => {
|
|
71
|
+
const errorOnGo = await DSDialog.sizeVariantsURL.go();
|
|
72
|
+
if (errorOnGo) throw errorOnGo;
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
it('01: should display x-large (1042px) dialog correctly', async () => {
|
|
76
|
+
const btn = await DSDialog.getOpenDialogBySize('x-large');
|
|
77
|
+
await btn.click();
|
|
78
|
+
const dialog = await DSDialog.getDialog();
|
|
79
|
+
await dialog.waitForDisplayed();
|
|
80
|
+
const snapshot = await browser.percyCheckScreenshot(DSDialog.snapshotPath('size-x-large'));
|
|
81
|
+
await expect(snapshot).toEqual(0);
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
describe('PUI-18410 - DSDialog:: size xx-large layout -Visual', () => {
|
|
86
|
+
before('loading page', async () => {
|
|
87
|
+
const errorOnGo = await DSDialog.sizeVariantsURL.go();
|
|
88
|
+
if (errorOnGo) throw errorOnGo;
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
it('01: should display xx-large (1440px) dialog correctly', async () => {
|
|
92
|
+
const btn = await DSDialog.getOpenDialogBySize('xx-large');
|
|
93
|
+
await btn.click();
|
|
94
|
+
const dialog = await DSDialog.getDialog();
|
|
95
|
+
await dialog.waitForDisplayed();
|
|
96
|
+
const snapshot = await browser.percyCheckScreenshot(DSDialog.snapshotPath('size-xx-large'));
|
|
97
|
+
await expect(snapshot).toEqual(0);
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
describe('PUI-18411 - DSDialog:: custom width layout -Visual', () => {
|
|
102
|
+
before('loading page', async () => {
|
|
103
|
+
const errorOnGo = await DSDialog.sizeVariantsURL.go();
|
|
104
|
+
if (errorOnGo) throw errorOnGo;
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
it('01: should display custom width (700px) dialog correctly', async () => {
|
|
108
|
+
const btn = await DSDialog.getOpenDialogBySize('custom');
|
|
109
|
+
await btn.click();
|
|
110
|
+
const dialog = await DSDialog.getDialog();
|
|
111
|
+
await dialog.waitForDisplayed();
|
|
112
|
+
const snapshot = await browser.percyCheckScreenshot(DSDialog.snapshotPath('size-custom-700'));
|
|
113
|
+
await expect(snapshot).toEqual(0);
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
}
|
|
@@ -6,6 +6,10 @@ export default class DSComboboxMultiCO extends PageObject {
|
|
|
6
6
|
// STORIES
|
|
7
7
|
static basicTest = new Urlbuilder(PATH_E2E_COMBOBOX_MULTI, 'basic-test');
|
|
8
8
|
|
|
9
|
+
static loadingTest = new Urlbuilder(PATH_E2E_COMBOBOX_MULTI, 'loading-test');
|
|
10
|
+
|
|
11
|
+
static skeletonTest = new Urlbuilder(PATH_E2E_COMBOBOX_MULTI, 'skeleton-test');
|
|
12
|
+
|
|
9
13
|
static applyAriaDisabled = new Urlbuilder(PATH_E2E_COMBOBOX_MULTI, 'apply-aria-disabled-test');
|
|
10
14
|
|
|
11
15
|
static readOnly = new Urlbuilder(PATH_E2E_COMBOBOX_MULTI, 'read-only-test');
|
|
@@ -142,7 +146,7 @@ export default class DSComboboxMultiCO extends PageObject {
|
|
|
142
146
|
}
|
|
143
147
|
|
|
144
148
|
static async getSimpleTruncateText() {
|
|
145
|
-
return $('[data-testid="
|
|
149
|
+
return $('[data-testid="combobox-selected-values"]');
|
|
146
150
|
}
|
|
147
151
|
|
|
148
152
|
static async getNumberOptions() {
|
|
@@ -191,7 +195,7 @@ export default class DSComboboxMultiCO extends PageObject {
|
|
|
191
195
|
}
|
|
192
196
|
|
|
193
197
|
static async getTooltip() {
|
|
194
|
-
return $('[data-testid="
|
|
198
|
+
return $('[data-testid="ds-floating-wrapper-root"]');
|
|
195
199
|
}
|
|
196
200
|
|
|
197
201
|
// actions
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import DSComboboxMultiCO from '../DSComboboxMultiCO';
|
|
2
|
+
import { axeCoreCheck } from '../../helpers';
|
|
3
|
+
|
|
4
|
+
// Tests for the fix introduced in PUI-18034
|
|
5
|
+
// (busy listbox with aria-busy + aria-label so screen readers announce the
|
|
6
|
+
// in-progress state via the input's aria-controls linkage; this spec verifies
|
|
7
|
+
// the busy listbox surface passes axe-core).
|
|
8
|
+
if (
|
|
9
|
+
(!browser.capabilities['ice:options'].isPhone &&
|
|
10
|
+
!browser.capabilities['ice:options'].isTablet &&
|
|
11
|
+
browser.capabilities.browserName === 'chrome') ||
|
|
12
|
+
browser.capabilities.browserName === 'Chrome'
|
|
13
|
+
) {
|
|
14
|
+
describe('PUI-18471 - ComboboxMulti:: busy listbox while isLoading - axe-core', () => {
|
|
15
|
+
before('loading page', async () => {
|
|
16
|
+
const errorOnGo = await DSComboboxMultiCO.loadingTest.go();
|
|
17
|
+
if (errorOnGo) throw errorOnGo;
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
it('01: busy listbox while isLoading should pass axe-core scan', async () => {
|
|
21
|
+
const dropdownMenuBtn = await DSComboboxMultiCO.getDropDownMenuBtn();
|
|
22
|
+
await dropdownMenuBtn.click();
|
|
23
|
+
|
|
24
|
+
const listbox = await DSComboboxMultiCO.getComboListbox();
|
|
25
|
+
await listbox.waitForExist();
|
|
26
|
+
|
|
27
|
+
const result = await axeCoreCheck();
|
|
28
|
+
expect(result.length).toBe(0);
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
describe('PUI-18472 - ComboboxMulti:: busy listbox while isSkeleton - axe-core', () => {
|
|
33
|
+
before('loading page', async () => {
|
|
34
|
+
const errorOnGo = await DSComboboxMultiCO.skeletonTest.go();
|
|
35
|
+
if (errorOnGo) throw errorOnGo;
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
it('01: busy listbox while isSkeleton should pass axe-core scan', async () => {
|
|
39
|
+
const dropdownMenuBtn = await DSComboboxMultiCO.getDropDownMenuBtn();
|
|
40
|
+
await dropdownMenuBtn.click();
|
|
41
|
+
|
|
42
|
+
const listbox = await DSComboboxMultiCO.getComboListbox();
|
|
43
|
+
await listbox.waitForExist();
|
|
44
|
+
|
|
45
|
+
const result = await axeCoreCheck();
|
|
46
|
+
expect(result.length).toBe(0);
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
}
|
package/ds-form-combobox-multi/aria-busy-loading/DSComboboxMulti.aria-busy-loading.func.spec.js
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import DSComboboxMultiCO from '../DSComboboxMultiCO';
|
|
2
|
+
|
|
3
|
+
// Tests for the fix introduced in PUI-18034
|
|
4
|
+
// (carries aria-busy + aria-label on the listbox during loading/skeleton so
|
|
5
|
+
// screen readers announce the in-progress state via the input's aria-controls
|
|
6
|
+
// linkage; replaces the prior racing assertive live region).
|
|
7
|
+
// aria-multiselectable is preserved on the busy listbox.
|
|
8
|
+
if (
|
|
9
|
+
(!browser.capabilities['ice:options'].isPhone &&
|
|
10
|
+
!browser.capabilities['ice:options'].isTablet &&
|
|
11
|
+
browser.capabilities.browserName === 'chrome') ||
|
|
12
|
+
browser.capabilities.browserName === 'Chrome'
|
|
13
|
+
) {
|
|
14
|
+
describe('PUI-18447 - ComboboxMulti:: busy listbox while isLoading - Func', () => {
|
|
15
|
+
before('loading page', async () => {
|
|
16
|
+
const errorOnGo = await DSComboboxMultiCO.loadingTest.go();
|
|
17
|
+
if (errorOnGo) throw errorOnGo;
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
it('01: listbox is aria-busy + aria-multiselectable and aria-controls linked', async () => {
|
|
21
|
+
const dropdownMenuBtn = await DSComboboxMultiCO.getDropDownMenuBtn();
|
|
22
|
+
await dropdownMenuBtn.click();
|
|
23
|
+
|
|
24
|
+
const listbox = await DSComboboxMultiCO.getComboListbox();
|
|
25
|
+
await listbox.waitForExist();
|
|
26
|
+
|
|
27
|
+
await expect(listbox).toHaveAttribute('role', 'listbox');
|
|
28
|
+
await expect(listbox).toHaveAttribute('aria-busy', 'true');
|
|
29
|
+
await expect(listbox).toHaveAttribute('aria-label', 'Loading options please wait');
|
|
30
|
+
await expect(listbox).toHaveAttribute('aria-multiselectable', 'true');
|
|
31
|
+
|
|
32
|
+
const listboxId = await listbox.getAttribute('id');
|
|
33
|
+
const input = await DSComboboxMultiCO.getComboboxInput();
|
|
34
|
+
await expect(input).toHaveAttribute('aria-controls', listboxId);
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
describe('PUI-18448 - ComboboxMulti:: busy listbox while isSkeleton - Func', () => {
|
|
39
|
+
before('loading page', async () => {
|
|
40
|
+
const errorOnGo = await DSComboboxMultiCO.skeletonTest.go();
|
|
41
|
+
if (errorOnGo) throw errorOnGo;
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
it('01: listbox is aria-busy + aria-multiselectable with aria-label', async () => {
|
|
45
|
+
const dropdownMenuBtn = await DSComboboxMultiCO.getDropDownMenuBtn();
|
|
46
|
+
await dropdownMenuBtn.click();
|
|
47
|
+
|
|
48
|
+
const listbox = await DSComboboxMultiCO.getComboListbox();
|
|
49
|
+
await listbox.waitForExist();
|
|
50
|
+
|
|
51
|
+
await expect(listbox).toHaveAttribute('role', 'listbox');
|
|
52
|
+
await expect(listbox).toHaveAttribute('aria-busy', 'true');
|
|
53
|
+
await expect(listbox).toHaveAttribute('aria-label', 'Loading options please wait');
|
|
54
|
+
await expect(listbox).toHaveAttribute('aria-multiselectable', 'true');
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import DSComboboxMultiCO from '../DSComboboxMultiCO';
|
|
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-18473 - ComboboxMulti:: disabled - axe-core', () => {
|
|
11
|
+
before('loading page', async () => {
|
|
12
|
+
const errorOnGo = await DSComboboxMultiCO.disabled.go();
|
|
13
|
+
if (errorOnGo) throw errorOnGo;
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
it('01: disabled combobox should pass axe-core scan', async () => {
|
|
17
|
+
const combobox = await DSComboboxMultiCO.getCombobox();
|
|
18
|
+
await combobox.waitForExist();
|
|
19
|
+
|
|
20
|
+
const result = await axeCoreCheck();
|
|
21
|
+
expect(result.length).toBe(0);
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
}
|
|
@@ -4,6 +4,10 @@ import { PageObject, Urlbuilder } from '../helpers';
|
|
|
4
4
|
|
|
5
5
|
export default class DSComboboxSingleCO extends PageObject {
|
|
6
6
|
// STORIES
|
|
7
|
+
static loadingTest = new Urlbuilder(PATH_E2E_COMBOBOX_SINGLE, 'loading-test');
|
|
8
|
+
|
|
9
|
+
static skeletonTest = new Urlbuilder(PATH_E2E_COMBOBOX_SINGLE, 'skeleton-test');
|
|
10
|
+
|
|
7
11
|
static applyAriaDisabled = new Urlbuilder(PATH_E2E_COMBOBOX_SINGLE, 'apply-aria-disabled-test');
|
|
8
12
|
|
|
9
13
|
static readOnly = new Urlbuilder(PATH_E2E_COMBOBOX_SINGLE, 'read-only-test');
|
|
@@ -133,7 +137,7 @@ export default class DSComboboxSingleCO extends PageObject {
|
|
|
133
137
|
}
|
|
134
138
|
|
|
135
139
|
static async getSimpleTruncateText() {
|
|
136
|
-
return $('[data-testid="
|
|
140
|
+
return $('[data-testid="combobox-selected-values"]');
|
|
137
141
|
}
|
|
138
142
|
|
|
139
143
|
static async getNumberOptions() {
|
|
@@ -182,7 +186,7 @@ export default class DSComboboxSingleCO extends PageObject {
|
|
|
182
186
|
}
|
|
183
187
|
|
|
184
188
|
static async getTooltip() {
|
|
185
|
-
return $('[data-testid="
|
|
189
|
+
return $('[data-testid="ds-floating-wrapper-root"]');
|
|
186
190
|
}
|
|
187
191
|
|
|
188
192
|
// Slots
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import DSComboboxSingleCO from '../DSComboboxSingleCO';
|
|
2
|
+
import { axeCoreCheck } from '../../helpers';
|
|
3
|
+
|
|
4
|
+
// Tests for the fix introduced in PUI-18034
|
|
5
|
+
// (busy listbox with aria-busy + aria-label so screen readers announce the
|
|
6
|
+
// in-progress state via the input's aria-controls linkage; this spec verifies
|
|
7
|
+
// the busy listbox surface passes axe-core).
|
|
8
|
+
if (
|
|
9
|
+
(!browser.capabilities['ice:options'].isPhone &&
|
|
10
|
+
!browser.capabilities['ice:options'].isTablet &&
|
|
11
|
+
browser.capabilities.browserName === 'chrome') ||
|
|
12
|
+
browser.capabilities.browserName === 'Chrome'
|
|
13
|
+
) {
|
|
14
|
+
describe('PUI-18474 - ComboboxSingle:: busy listbox while isLoading - axe-core', () => {
|
|
15
|
+
before('loading page', async () => {
|
|
16
|
+
const errorOnGo = await DSComboboxSingleCO.loadingTest.go();
|
|
17
|
+
if (errorOnGo) throw errorOnGo;
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
it('01: busy listbox while isLoading should pass axe-core scan', async () => {
|
|
21
|
+
const dropdownMenuBtn = await DSComboboxSingleCO.getDropDownMenuBtn();
|
|
22
|
+
await dropdownMenuBtn.click();
|
|
23
|
+
|
|
24
|
+
const listbox = await DSComboboxSingleCO.getComboListbox();
|
|
25
|
+
await listbox.waitForExist();
|
|
26
|
+
|
|
27
|
+
const result = await axeCoreCheck();
|
|
28
|
+
expect(result.length).toBe(0);
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
describe('PUI-18475 - ComboboxSingle:: busy listbox while isSkeleton - axe-core', () => {
|
|
33
|
+
before('loading page', async () => {
|
|
34
|
+
const errorOnGo = await DSComboboxSingleCO.skeletonTest.go();
|
|
35
|
+
if (errorOnGo) throw errorOnGo;
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
it('01: busy listbox while isSkeleton should pass axe-core scan', async () => {
|
|
39
|
+
const dropdownMenuBtn = await DSComboboxSingleCO.getDropDownMenuBtn();
|
|
40
|
+
await dropdownMenuBtn.click();
|
|
41
|
+
|
|
42
|
+
const listbox = await DSComboboxSingleCO.getComboListbox();
|
|
43
|
+
await listbox.waitForExist();
|
|
44
|
+
|
|
45
|
+
const result = await axeCoreCheck();
|
|
46
|
+
expect(result.length).toBe(0);
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
}
|