# TestFly Part 7: Bundled axe-core Accessibility Assertions & VisualAssert Pixel Matching

URL: https://hakangul.lovable.app/blog/testfly-part-7-mobile-automation-with-appium-android-ios
Author: Hakan Gül — Team Lead Senior Test Automation Engineer
Published: 2026-08-28
Updated: 2026-08-29
Category: test-automation
Tags: TestFly, Accessibility, axe-core, WCAG, VisualAssert, Visual Regression, Java, SDET

> Audit WCAG 2.2 AA compliance using bundled axe-core (accessibility().run()) and catch pixel-level CSS regressions with VisualAssert in TestFly.

## English

## Accessibility & Visual Regression in TestFly

TestFly bundles **axe-core 4.10.2** and a dedicated pixel-comparison engine **`VisualAssert`** directly into the core JAR.

---

## 1. Bundled axe-core Accessibility Scans (`accessibility()`)

In `BaseTest`, run a WCAG scan in a single line without external dependencies:

```java
package io.testfly.examples.a11y;

import io.testfly.accessibility.Impact;
import io.testfly.test.BaseTest;
import org.testng.annotations.Test;

public class AccessibilityTest extends BaseTest {

    @Test
    public void checkoutPassesWcagAA() {
        open("/checkout");

        accessibility()
            .withTags("wcag2a", "wcag21aa", "wcag22aa")
            .withLevel(Impact.SERIOUS) // fails on SERIOUS or CRITICAL
            .excluding("#third-party-widget")
            .run();
    }
}
```

---

## 2. Pixel-Perfect Visual Regression (`VisualAssert`)

```java
package io.testfly.examples.visual;

import io.testfly.test.BaseTest;
import io.testfly.visual.VisualAssert;
import io.testfly.visual.VisualTolerance;
import org.openqa.selenium.By;
import org.testng.annotations.Test;

public class VisualRegressionTest extends BaseTest {

    @Test
    public void homepageVisualMatchesBaseline() {
        open("/");

        // Full-page comparison with 1% tolerance
        VisualAssert.assertScreenshot("homepage", VisualTolerance.of(1));

        // Element-scoped comparison
        VisualAssert.assertScreenshot("login-box", By.id("login-card"));
    }
}
```

- **First Run:** Baseline screenshot is generated automatically.
- **Subsequent Runs:** Compares against baseline; diffs saved to `target/visual-diffs/`.
- **Update Baselines:** Run with `-DupdateBaselines=true`.

## Türkçe

## TestFly ile Erişilebilirlik ve Görsel Regresyon

TestFly, çekirdek JAR içerisinde **axe-core 4.10.2** kütüphanesini ve piksel karşılaştırma motoru **`VisualAssert`** sınıfını dahili olarak barındırır.

---

## 1. Dahili axe-core Erişilebilirlik Taraması (`accessibility()`)

`BaseTest` içinde tek satırda WCAG denetimi gerçekleştirin:

```java
package io.testfly.examples.a11y;

import io.testfly.accessibility.Impact;
import io.testfly.test.BaseTest;
import org.testng.annotations.Test;

public class AccessibilityTest extends BaseTest {

    @Test
    public void odemeSayfasiWcagAAStandartlarinaUymali() {
        open("/checkout");

        accessibility()
            .withTags("wcag2a", "wcag21aa", "wcag22aa")
            .withLevel(Impact.SERIOUS) // SERIOUS veya CRITICAL hatalarda patlatır
            .excluding("#ucuncu-parti-widget")
            .run();
    }
}
```

---

## 2. `VisualAssert` ile Piksel Hassasiyetinde Görsel Test

```java
package io.testfly.examples.visual;

import io.testfly.test.BaseTest;
import io.testfly.visual.VisualAssert;
import io.testfly.visual.VisualTolerance;
import org.openqa.selenium.By;
import org.testng.annotations.Test;

public class VisualRegressionTest extends BaseTest {

    @Test
    public void anaSayfaReferanslaEslesmeli() {
        open("/");

        // %1 tolerans ile tüm sayfa karşılaştırması
        VisualAssert.assertScreenshot("ana-sayfa", VisualTolerance.of(1));

        // Belirli bir elementin karşılaştırılması
        VisualAssert.assertScreenshot("giris-karti", By.id("login-card"));
    }
}
```

- **İlk Koşum:** Referans ekran görüntüsü otomatik üretilir.
- **Sonraki Koşumlar:** Referansla karşılaştırılır, farklar `target/visual-diffs/` altına kaydedilir.
- **Referans Güncelleme:** `-DupdateBaselines=true` parametresi ile güncellenir.
