NCA Social Media
Aktualisiert:
Autor:
Roland Golla
Grünes Fadenkreuz mit Pflaster wird mit Lupe geprüft, Self Healing Tests

Was sind Self Healing Tests?

Self Healing Tests sind automatisierte Tests, die einen kaputten Selektor zur Laufzeit selbst ersetzen, statt rot zu werden. Ändert sich ein Button oder ein Eingabefeld, sucht das Werkzeug ein passendes Element und läuft weiter.

In Cypress gibt es Self Healing offiziell nur an einer Stelle: im Befehl cy.prompt. Normale Befehle wie cy.get oder cy.contains heilen nichts. Sie finden das Element, oder der Test schlägt fehl. Das ist Absicht, denn ein roter Test ist ein Signal.

Self Healing klingt nach weniger Wartung. Es hat aber einen Preis: Ein Test kann grün bleiben, obwohl sich das Verhalten deiner App geändert hat. Auf dieser Seite schauen wir uns an, was Cypress wirklich anbietet, wo das Risiko liegt und welche Grundlage Tests auf Dauer stabil hält.

Self Healing Tests mit NCA: Schnelle Hilfe vom Experten

Roland Golla ist offizieller Cypress Ambassador und arbeitet seit über 20 Jahren an Testing und Refactoring. Automatisiertes Testen gehört bei NCA seit 2013 zum Alltag. Cypress mit Cypress Cloud nutzen wir täglich in Production, zusammen mit GitHub Actions und GitLab CI. Instabile Selektoren lösen wir dort, wo sie entstehen: im Markup, in der Teststruktur und im Review.

Im Cypress.IO Workshop bauen wir mit dir eine Selektor Strategie, die Redesigns übersteht. Ganze Teams schulen wir in der Cypress.IO Remote Schulung. Wenn KI Agenten Tests pflegen sollen, setzen wir mit dem Vibe Coding Consulting klare Regeln auf, nach den NCA Agentic AI Coding Guardrails. Dazu passen Quality Gates für KI Code in der Pipeline.

NCA Cypress Workshop mit Cypress Ambassador Roland Golla

E2E Tests, die euer Team selbst schreibt

Ein Tag inhouse mit Roland Golla, offizieller Cypress Ambassador und seit über 20 Jahren in Testing und Refactoring zu Hause. Auf unserem YouTube Kanal zeigt er in über 70 Live Coding Tutorials, wie Cypress in echten Projekten läuft. Dazu kommt unser Open Source Plugin NCA TESTIFY: Basistests für jede Website, mit einer Zeile im CI/CD Setup. Im Workshop lernt euer Team Setup, stabile Selektoren, Custom Commands und Tests in der Pipeline.

  1. 1
    Kostenloses Vorgespräch
    Projekt, Stack und Teststand klären
  2. 2
    Workshoptag bei euch
    Setup, Patterns und erste Tests im Team
  3. 3
    Praxistag optional
    Tests im eigenen Projekt und in CI
Roland Golla
Roland Golla
Fullstack Developer
Zum Cypress Workshop arrow_forward

Was Cypress offiziell an Self Healing anbietet

Cypress listet in der Übersicht der KI Funktionen mehrere Werkzeuge: cy.prompt, Studio AI mit Vorschlägen für Assertions, Zusammenfassungen von Testabsicht und Fehlern, Testgenerierung aus UI Coverage sowie Cloud MCP und Cloud CLI für Agenten. Self Healing gehört dort ausschließlich zu cy.prompt.

So arbeitet es laut Cypress Doku:

  • cy.prompt erzeugt aus Schritten in natürlicher Sprache echten Cypress Code und legt ihn im Cache ab.
  • Der Cache wird zwischen Maschinen und in CI geteilt. Ein erneuter Lauf ruft das KI Modell nur auf, wenn sich Prompt oder DOM passend geändert haben.
  • Passt ein gecachter Selektor nicht mehr, erzeugt Cypress den Schritt neu.
  • Im Command Log steht dann Self Healed via Cache oder Self Healed via AI, mit dem Element, auf das der Schritt jetzt zeigt.

Cypress beschreibt zwei Arbeitsweisen. Entweder du exportierst den erzeugten Code und committest ihn. Dann läuft der Test ohne KI und ohne Self Healing. Oder du lässt cy.prompt im Test, und Selektoren passen sich laufend an. cy.prompt braucht Cypress Cloud, läuft nur in E2E Tests und nur in Chromium Browsern.

Das Risiko: Grüne Tests trotz geändertem Verhalten

Ein Test hat eine Aufgabe: Er soll laut werden, wenn sich etwas Wichtiges ändert. Self Healing dreht das um. Der Test findet ein anderes Element und bleibt grün. Ob die Änderung gewollt war, prüft dabei niemand.

Ein Beispiel: Aus dem Button „Bestellen“ wird „Bestellung prüfen“, und ein Klick führt jetzt auf eine Zwischenseite. Der geheilte Test klickt das neue Element und läuft weiter. Die eigentliche Änderung im Ablauf fällt erst auf, wenn eine Assertion danach scheitert. Fehlt diese Assertion, fällt sie gar nicht auf.

Typische Folgen:

  • Verdeckte Regressionen: Geänderte Labels, Feldtypen oder Abläufe rutschen ohne Review durch.
  • Falsches Vertrauen: Das Dashboard zeigt grün, die Suite prüft aber nicht mehr das, was das Team glaubt.
  • Schwache Assertions: Wer sich auf Heilung verlässt, schreibt seltener fachliche Prüfungen.
  • Unklare Verantwortung: Ein Hinweis im Command Log ersetzt keinen Review im Merge Request.

Gleb Bahmutov, früher VP of Engineering bei Cypress, nennt Auto Healing deshalb ein Warnsignal für den Entwicklungsprozess. Wenn Tests ständig an Selektoren scheitern, liegt das Problem meist in der Teststruktur oder im fehlenden Abgleich zwischen Frontend und Tests.

Die bessere Grundlage: stabile data-cy Selektoren

Die meisten kaputten Selektoren hängen an Dingen, die sich ständig ändern: CSS Klassen, Tag Strukturen, generierte IDs. Die Cypress Best Practices empfehlen deshalb eigene data-cy Attribute. Sie sind von Styling und JavaScript Verhalten entkoppelt.

Code:
          

<button class="btn btn-primary" data-cy="checkout-submit">
  Bestellen
</button>

Code:
          

// brüchig: hängt an Styling
cy.get('.btn.btn-primary').click()

// stabil: eigenes Test Attribut
cy.get('[data-cy=checkout-submit]').click()

Ändert ein Designer die Klassen, bleibt der zweite Selektor stabil. Ändert sich das Verhalten, schlägt eine Assertion fehl, und das Team entscheidet bewusst. Genau das soll ein Test leisten.

Testing Library Queries, Custom Commands und Page Objects

Neben data-cy gibt es zwei weitere Bausteine, die Tests robust machen, ohne etwas zu verstecken.

Testing Library Queries: Cypress verweist in den Best Practices auf die Cypress Testing Library. Du suchst Elemente über Rolle und zugänglichen Namen, so wie Nutzer und Screenreader sie wahrnehmen. Ändert sich der Name eines Buttons, wird der Test rot. Das ist gewollt, denn Nutzer sehen die Änderung auch. Nebenbei prüfst du damit ein Stück Barrierefreiheit.

Code:
          

cy.findByRole('button', { name: 'Bestellen' }).click()
cy.findByLabelText('Mail Adresse').type('test@example.com')

Custom Commands und Page Objects: Selektoren und Abläufe stehen an genau einer Stelle. Ändert sich das Login Formular, passt du einen Command an, und alle Tests laufen wieder. Das ist Wartung mit Review statt Heilung zur Laufzeit.

Code:
          

// cypress/support/commands.js
Cypress.Commands.add('login', (email, password) => {
  cy.get('[data-cy=login-email]').type(email)
  cy.get('[data-cy=login-password]').type(password, { log: false })
  cy.get('[data-cy=login-submit]').click()
})

// im Test
cy.login('test@example.com', testPassword)
cy.location('pathname').should('eq', '/dashboard')

Mehr zu Barrierefreiheit in Tests findest du bei axe DevTools mit Cypress und in der Übersicht der Accessibility Testing Tools.

Review: Jede Änderung am Test braucht ein Ja

Der wichtigste Unterschied zwischen Heilung und Wartung ist der Review. Eine Änderung am Test landet im Merge Request, jemand liest sie und stimmt zu. So bleibt nachvollziehbar, warum ein Test anders prüft als vorher.

Wenn du cy.prompt mit Self Healing einsetzt, mach die Heilung sichtbar:

  • Command Log lesen: Jeder Lauf mit Self Healed via Cache oder Self Healed via AI ist ein Hinweis auf eine UI Änderung.
  • Code exportieren: Über den Code Button holst du den aktuellen Stand in die Testdatei und reviewst ihn wie normalen Code.
  • Fachliche Assertions ergänzen: Prüfe Ergebnisse wie Weiterleitung, Text oder Datenzustand, nicht nur Sichtbarkeit.
  • Kritische Pfade fest verdrahten: Login, Checkout und Rechteprüfungen laufen mit committetem Code ohne Self Healing.

Wie Anforderungen zum festen Maßstab für Tests werden, zeigt die lebende Spezifikation. Gemeinsame Beispiele dafür entstehen gut im Example Mapping.

Wartung durch KI Agenten mit Mensch als Freigabe

KI Agenten können bei der Testwartung viel abnehmen. Der Unterschied zu Self Healing: Der Agent schlägt eine Änderung vor, ein Mensch reviewt und gibt frei. Nichts ändert sich still zur Laufzeit.

So sieht ein sauberer Ablauf aus:

  • Fehler lesen: Der Agent holt sich fehlgeschlagene Runs, zum Beispiel über Cypress Cloud MCP.
  • Ursache klären: Hat sich die UI gewollt geändert, oder ist es ein Bug?
  • Änderung vorschlagen: Der Agent passt Selektor oder Custom Command an und öffnet einen Merge Request.
  • Freigabe: Ein Mensch prüft den Diff und gibt frei. Testdateien sind geschützt, damit ein Agent rote Tests nicht passend umschreibt.
  • Quality Gates: In CI laufen zuerst statische Analyse, Unit Tests und funktionale Tests, danach Cypress E2E.

Die Agenten arbeiten gegen lokale Entwicklungsumgebungen mit Faker Testdaten, nie gegen echte Kundendaten. Der Rahmen mit Scope, Evidenz und Freigabe steht im Governed Agent Loop.

Ansätze für stabile Selektoren im Vergleich

Ansatz Stärke Risiko
Self Healing mit cy.prompt Wenig Wartung bei UI Änderungen, schneller Start Test bleibt grün, obwohl sich Verhalten geändert hat
cy.prompt Code exportiert Schneller Start, danach fester und reviewbarer Code Generierte Selektoren und Assertions können schwach sein
data-cy Attribute Entkoppelt von Styling und Verhalten Braucht Disziplin im Markup und Absprache mit dem Frontend
Testing Library Queries Prüft wie Nutzer, stärkt Barrierefreiheit Textänderungen machen Tests rot, auch wenn sie gewollt sind
Custom Commands und Page Objects Selektoren an einer Stelle, Wartung zentral Zu viel Abstraktion macht Tests schwer lesbar
Wartung durch KI Agenten mit Review Entlastet das Team, Änderungen bleiben nachvollziehbar Ohne geschützte Testdateien und Freigabe passt der Agent Tests an den Bug an

Please do not use auto-healing to hide changes in your application behavior.

Gleb Bahmutov, Ehemaliger VP of Engineering bei Cypress.io – Blogartikel Test Auto-healing Is A Red Flag

Aus der NCA Praxis: Stabile Tests entstehen im Code

Wenn Tests ständig an Selektoren scheitern, schauen wir zuerst auf die Ursache. Meist fehlen Test Attribute im Markup, Abläufe sind in jedem Test neu geschrieben, oder Frontend und Tests laufen getrennt. Das lösen wir mit data-cy Konventionen, Custom Commands und einem Review Prozess, der zum Team passt.

KI hilft uns dabei als Werkzeug, nicht als Schiedsrichter. Welche Regeln Agenten im Projekt bekommen, steht in einer AGENTS.md mit klaren Coding Regeln. Wie KI Code auf Dauer wartbar bleibt, zeigt Code Qualität mit KI Agenten. Die typischen Fallen fasst Vibe Coding Risiken zusammen. Wer vom Selenium Umfeld kommt, findet die Einordnung unter Selenium.

Passend dazu im NCA Cypress Glossar: Flaky Tests in Cypress, die oft hinter instabilen Selektoren stecken.

CYPRESS.IO Ambassador und IT Consultant für QA Engenieering und Qualität in PHP Projekten.

NCA Vibe Coding Consulting

Roland Golla ist Entwickler aus Leidenschaft – seit über 20 Jahren. Er hat hunderte Projekte begleitet, von Legacy-Refactoring bis KI-Integration. Bei Vibe Coding verbindet er das Beste aus beiden Welten: Die Geschwindigkeit von KI-generiertem Code mit der Qualität professioneller Softwareentwicklung. Kein Bullshit, keine Agentur-Floskeln – direkte Hilfe von jemandem, der selbst täglich im Code steckt.

Häufige Fragen zu Self Healing Tests

Kurze Antworten zu Self Healing in Cypress, zu den Risiken und zu stabilen Alternativen für deine Testsuite.

Was sind Self Healing Tests 2026?

Self Healing Tests ersetzen einen kaputten Selektor zur Laufzeit selbst, statt fehlzuschlagen. Ändert sich ein Element, sucht das Werkzeug ein passendes neues und der Test läuft weiter. Das spart Wartung, kann aber Änderungen im Verhalten verdecken. Ein geheilter Test bleibt grün, auch wenn ein Ablauf sich gewollt oder ungewollt geändert hat.

Bietet Cypress 2026 Self Healing an?

Ja, aber nur im Befehl cy.prompt. Normale Befehle wie cy.get oder cy.contains heilen nichts. cy.prompt cached generierten Code und erzeugt einen Schritt neu, wenn ein Selektor nicht mehr passt. Im Command Log steht dann Self Healed via Cache oder Self Healed via AI. cy.prompt braucht Cypress Cloud und läuft nur in E2E Tests.

Sind Self Healing Tests 2026 für Production Suiten geeignet?

Für kritische Pfade raten wir davon ab. Login, Checkout und Rechteprüfungen sollten mit festem, reviewtem Code laufen. Self Healing kann Regressionen verdecken, weil der Test grün bleibt. Für frühe Phasen und schnelle Prototypen ist es nützlich. Danach exportierst du den Code, setzt stabile Selektoren und lässt ihn als Quality Gate laufen.

Was ist 2026 die beste Alternative zu Self Healing?

Stabile data-cy Attribute, die Cypress selbst in den Best Practices empfiehlt. Sie sind von Styling und JavaScript Verhalten entkoppelt. Dazu kommen Testing Library Queries über Rolle und Namen sowie Custom Commands, die Selektoren an einer Stelle bündeln. Änderungen am Test laufen über einen Review im Merge Request, nicht still zur Laufzeit.

Können KI Agenten 2026 Tests sicher warten?

Ja, wenn ein Mensch freigibt. Der Agent liest fehlgeschlagene Runs, schlägt eine Änderung an Selektor oder Custom Command vor und öffnet einen Merge Request. Ein Mensch prüft den Diff. Testdateien sind geschützt, und in CI laufen statische Analyse, Unit Tests und funktionale Tests vor Cypress E2E. Die Agenten arbeiten mit Fake Daten.

Warum ist ein roter Test manchmal besser als ein geheilter?

Ein roter Test zwingt das Team, eine Änderung bewusst anzuschauen. War sie gewollt, passt jemand den Test an und dokumentiert das im Review. War sie ein Bug, fällt er vor dem Release auf. Ein geheilter Test überspringt diese Entscheidung. Das Dashboard bleibt grün, obwohl niemand geprüft hat, ob das neue Verhalten stimmt.

Wie erkenne ich geheilte Schritte in cy.prompt?

Cypress zeigt jede Heilung im Command Log an. Self Healed via Cache bedeutet, dass der Schritt über einen vorhandenen Cache Eintrag auf ein anderes Element zeigt. Self Healed via AI bedeutet, dass ein neuer KI Aufruf das Element bestimmt hat. Prüfe diese Hinweise aktiv und übernimm den neuen Code per Export in dein Review.

Was sind data-cy Selektoren?

data-cy ist ein eigenes HTML Attribut, das nur für Tests gedacht ist. Du setzt es im Markup, zum Beispiel data-cy gleich checkout-submit, und greifst im Test mit cy.get darauf zu. Weil es weder für Styling noch für JavaScript genutzt wird, bleibt es stabil, wenn Designer Klassen ändern oder Entwickler Komponenten umbauen.

Wann helfen Testing Library Queries?

Testing Library Queries suchen Elemente über Rolle, Label und zugänglichen Namen, so wie Nutzer sie wahrnehmen. Das passt gut für Formulare, Buttons und Navigation. Ändert sich ein sichtbarer Name, wird der Test rot, was oft gewollt ist. Nebenbei prüfst du ein Stück Barrierefreiheit, weil fehlende Labels sofort auffallen.

Sind Page Objects oder Custom Commands besser?

Beide bündeln Selektoren und Abläufe an einer Stelle. In Cypress sind Custom Commands der übliche Weg, weil sie sich wie normale Befehle lesen. Page Objects passen, wenn dein Team sie aus anderen Frameworks kennt. Wichtig ist weniger die Form als die Regel: ein Selektor, eine Stelle, jede Änderung im Review.

Welche Daten nutzt Self Healing in cy.prompt?

cy.prompt liest das DOM deiner App, um Elemente zu finden. Laut Cypress werden Werte aus Passwortfeldern, Kreditkartenfeldern und versteckten Inputs vorher ausgeblendet, und Prompts werden nicht zum Training genutzt. Cypress Cloud ist ein US Anbieter. Kläre den Einsatz mit deinem Datenschutz und teste nur gegen Umgebungen mit Fake Daten.

Wie hilft NCA bei instabilen Selektoren?

Wir schauen mit deinem Team auf die Ursachen: fehlende Test Attribute, doppelte Abläufe, fehlende Reviews. Daraus entstehen data-cy Konventionen, Custom Commands und Quality Gates in CI. Wenn KI Agenten Tests pflegen sollen, setzen wir Regeln mit Freigabe durch Menschen auf. Den Aufwand schätzen wir nach einem kostenlosen Kennenlernen und rechnen transparent nach Minuten ab.