p19-bug-fixes
This commit is contained in:
130
e2e/tests/capabilities/accessibility/icon-labels.spec.ts
Normal file
130
e2e/tests/capabilities/accessibility/icon-labels.spec.ts
Normal file
@@ -0,0 +1,130 @@
|
||||
import {
|
||||
getAccessibleName,
|
||||
hasAccessibleName,
|
||||
} from "../../fixtures/accessibility";
|
||||
import { SELECTORS } from "../../fixtures/selectors";
|
||||
import { expect, test } from "../../fixtures/test";
|
||||
|
||||
test.describe("Icon-Only Control Accessible Names @smoke", () => {
|
||||
test.beforeEach(async ({ gotoApp, waitForAppReady }) => {
|
||||
await gotoApp();
|
||||
await waitForAppReady();
|
||||
});
|
||||
|
||||
test("share buttons have accessible names", async ({ page, waitForHero }) => {
|
||||
// Open modal to access share buttons
|
||||
const hero = await waitForHero();
|
||||
await hero.locator(SELECTORS.hero.readButton).click();
|
||||
|
||||
const modal = page.locator(SELECTORS.summaryModal.root);
|
||||
await expect(modal).toBeVisible();
|
||||
|
||||
// Check X share button
|
||||
const shareX = modal.locator(SELECTORS.summaryModal.shareX);
|
||||
await expect(shareX).toHaveAttribute("aria-label", "Share on X");
|
||||
expect(await hasAccessibleName(shareX)).toBe(true);
|
||||
|
||||
// Check WhatsApp share button
|
||||
const shareWhatsApp = modal.locator(SELECTORS.summaryModal.shareWhatsApp);
|
||||
await expect(shareWhatsApp).toHaveAttribute(
|
||||
"aria-label",
|
||||
"Share on WhatsApp",
|
||||
);
|
||||
expect(await hasAccessibleName(shareWhatsApp)).toBe(true);
|
||||
|
||||
// Check LinkedIn share button
|
||||
const shareLinkedIn = modal.locator(SELECTORS.summaryModal.shareLinkedIn);
|
||||
await expect(shareLinkedIn).toHaveAttribute(
|
||||
"aria-label",
|
||||
"Share on LinkedIn",
|
||||
);
|
||||
expect(await hasAccessibleName(shareLinkedIn)).toBe(true);
|
||||
|
||||
// Check copy link button
|
||||
const shareCopy = modal.locator(SELECTORS.summaryModal.shareCopy);
|
||||
await expect(shareCopy).toHaveAttribute("aria-label", "Copy article link");
|
||||
expect(await hasAccessibleName(shareCopy)).toBe(true);
|
||||
});
|
||||
|
||||
test("theme menu button has accessible name", async ({ page }) => {
|
||||
const themeButton = page.locator(SELECTORS.header.themeMenuButton);
|
||||
|
||||
await expect(themeButton).toHaveAttribute("aria-label", "Open theme menu");
|
||||
expect(await hasAccessibleName(themeButton)).toBe(true);
|
||||
});
|
||||
|
||||
test("back to top button has accessible name", async ({ page }) => {
|
||||
// Scroll down to make back-to-top visible
|
||||
await page.evaluate(() => window.scrollTo(0, 500));
|
||||
await page.waitForTimeout(500);
|
||||
|
||||
const backToTop = page.locator(SELECTORS.backToTop.root);
|
||||
|
||||
// Button may not be visible yet, but should have accessible name
|
||||
const hasName = await hasAccessibleName(backToTop);
|
||||
expect(hasName).toBe(true);
|
||||
|
||||
const name = await getAccessibleName(page, backToTop);
|
||||
expect(name).toContain("top");
|
||||
});
|
||||
|
||||
test("modal close button has accessible name", async ({
|
||||
page,
|
||||
waitForHero,
|
||||
}) => {
|
||||
// Open modal
|
||||
const hero = await waitForHero();
|
||||
await hero.locator(SELECTORS.hero.readButton).click();
|
||||
|
||||
const modal = page.locator(SELECTORS.summaryModal.root);
|
||||
await expect(modal).toBeVisible();
|
||||
|
||||
// Check close button
|
||||
const closeButton = modal.locator(SELECTORS.summaryModal.closeButton);
|
||||
expect(await hasAccessibleName(closeButton)).toBe(true);
|
||||
|
||||
const name = await getAccessibleName(page, closeButton);
|
||||
expect(name?.toLowerCase()).toContain("close");
|
||||
});
|
||||
|
||||
test("policy modal close button has accessible name", async ({
|
||||
page,
|
||||
gotoApp,
|
||||
}) => {
|
||||
// Open policy modal
|
||||
await gotoApp({ policy: "terms" });
|
||||
await page.waitForTimeout(1000);
|
||||
|
||||
const modal = page.locator(SELECTORS.policyModal.root);
|
||||
await expect(modal).toBeVisible();
|
||||
|
||||
// Check close button
|
||||
const closeButton = modal.locator(SELECTORS.policyModal.closeButton);
|
||||
expect(await hasAccessibleName(closeButton)).toBe(true);
|
||||
|
||||
const name = await getAccessibleName(page, closeButton);
|
||||
expect(name?.toLowerCase()).toContain("close");
|
||||
});
|
||||
|
||||
test("all interactive icons have aria-hidden on SVG", async ({
|
||||
page,
|
||||
waitForHero,
|
||||
}) => {
|
||||
// Open modal to access share buttons
|
||||
const hero = await waitForHero();
|
||||
await hero.locator(SELECTORS.hero.readButton).click();
|
||||
|
||||
const modal = page.locator(SELECTORS.summaryModal.root);
|
||||
await expect(modal).toBeVisible();
|
||||
|
||||
// Check all SVGs in share buttons are aria-hidden
|
||||
const svgs = modal.locator(".share-icon-btn svg");
|
||||
const count = await svgs.count();
|
||||
|
||||
for (let i = 0; i < count; i++) {
|
||||
const svg = svgs.nth(i);
|
||||
const ariaHidden = await svg.getAttribute("aria-hidden");
|
||||
expect(ariaHidden).toBe("true");
|
||||
}
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user