dequelabs/axe-core-npm

chromium + forcedColors: "true" + colorScheme: "dark" -> wrong color-contrast

Opened this issue · 2 comments

Product

playwright

Product Version

4.9.0

Latest Version

  • I have tested the issue with the latest version of the product

Issue Description

Expectation

The test shouldn't fail with forcedColors:true and colorScheme: "dark".

Actual

test("axe contrast", async ({ page }) => {
  await page.goto("/");
  const { color, backgroundColor } = await page.evaluate(() => {
    const badge = document.querySelector("#badge");
    if (badge) {
      const styles = window.getComputedStyle(badge);
      return { color: styles.color, backgroundColor: styles.backgroundColor };
    }

    return { color: "", backgroundColor: "" };
  });

  console.log(color, backgroundColor);

  expect(color).toEqual("rgb(255, 255, 255)");
  expect(backgroundColor).toEqual("rgb(0, 0, 0)");

  const accessibilityScanResults = await new AxeBuilder({
    page,
  })
    .include("#root")
    .analyze();

  expect(accessibilityScanResults.violations).toEqual([]);
});

The test fails with:

+             "message": "Element has insufficient color contrast of 1.22 (foreground color: #1a1c1e, background color: #000000, font size: 7.5pt (10px), font weight: bold). Expected contrast ratio of 4.5:1",
+             "relatedNodes": Array [
+               Object {
+                 "html": "<span id=\"badge\" class=\"db-badge\" data-emphasis=\"strong\">Test</span>",
+                 "target": Array [
+                   "#badge",
+                 ],
+               },
+             ],

In the forceColors:true mode it shouldn't be possible to have a color like #1a1c1e. It should be white or black, so there should be an error in the analyze function.

How to Reproduce

https://github.com/nmerget/axe-playwright-contrast-issue

I created a simple repo for reproduction. (I can add a GitHub actions if you wish to have the testing output as well)

Additional context

image

Somehow the snapshots in the timeline and below are different. Maybe the issue coming from analyze creating a new browserContext without using the settings of the context before?

Thanks for the issue. I believe this is an axe-core issues as axe-core does not support dark mode nor forced-colors. I'll probably close this as a duplicate of those issues.

Thanks for the hint :)

I added a workaround. I added -webkit-text-fill-color with *. It's not the prettiest solution but it works :D