Magento-Admin-Workflows end-to-end testen
PASS
expect()
Testing · E2E · Cypress · Playwright · Magento Admin
Magento-Admin-Workflows end-to-end testen
Von Session Handling bis zur risikobasierten Priorisierung

Magento Admin Workflows wie Produktanlage, Bestellabwicklung und Preisregeln entscheiden über Umsatz und Datenintegrität, auch ohne dass Kunden sie je sehen. End to end Tests mit Cypress oder Playwright decken genau die Lücke ab, die PHPUnit Integrationstests offen lassen: Session Handling, Grid Interaktionen und Massenaktionen im echten Browser, mit klarer Priorisierung nach Wartungskosten und Geschäftsrisiko.

16 Min. Lesezeit Produktanlage · Bestellabwicklung · Preisregeln Cypress · Playwright · CI/CD

1. Warum Admin-Workflows eine eigene Testkategorie brauchen

Der Magento-Admin unterscheidet sich fundamental vom Storefront: Es gibt keine anonymen Besucher, kein SEO, kein Traffic-Volumen, aber jeder unentdeckte Fehler kostet bares Geld. Eine falsch validierte Preisregel, ein hängengebliebener Bestellstatus oder ein Produkt, das durch einen fehlerhaften Attribute-Set-Wechsel ohne Preis gespeichert wird, wirkt sich direkt auf Umsatz und Kundenzufriedenheit aus. E2E-Tests für Admin-Workflows schließen genau die Lücke, die PHPUnit-Integrationstests offen lassen: Sie prüfen nicht nur, ob ein Service-Contract korrekt funktioniert, sondern ob der komplette Pfad durch Formular, AJAX-Aufruf, ACL-Prüfung und Redirect tatsächlich funktioniert, inklusive der JavaScript-Interaktionen, die eine reine PHP-Testsuite nicht sieht.

Die Abgrenzung zum Storefront-Testing ist wichtig für die Priorisierung: Storefront-E2E-Tests schützen Conversion-Pfade mit hohem Traffic vor UI-Regressionen, während Admin-E2E-Tests Prozesssicherheit und Datenintegrität für eine kleine Gruppe interner Nutzer absichern. Diese Nutzer sind geschulter und toleranter gegenüber kleinen UI-Unebenheiten, aber deutlich weniger tolerant gegenüber falschen Daten. Das verschiebt den Fokus admin-seitiger Tests weg von visueller Perfektion hin zu funktionaler Korrektheit: Wurde die Bestellung wirklich storniert, wurde der Preis wirklich neu berechnet, wurde die Rechnung wirklich mit den richtigen Positionen erstellt.

2. Welche Admin-Workflows E2E-Coverage verdienen

Nicht jeder Admin-Screen rechtfertigt einen vollständigen Browser-Test. Die Workflows mit dem höchsten Wert für E2E-Coverage sind jene, die mehrere Systeme gleichzeitig berühren und bei Fehlern finanziellen oder rechtlichen Schaden verursachen: Produktanlage mit dynamischen Attribute-Sets, die komplette Bestellabwicklung von der Rechnung über den Versand bis zur Gutschrift, sowie Catalog Price Rules, die stillschweigend falsche Preise in den gesamten Katalog schreiben können. Diese drei Bereiche kombinieren Formularlogik, asynchrone Verarbeitung und Indexer-Läufe, genau die Stellen, an denen isolierte Unit-Tests am wenigsten aussagekräftig sind.

Screens mit einfacher CRUD-Logik ohne Seiteneffekte, etwa das Bearbeiten eines CMS-Blocks oder das Anlegen eines Kundengruppen-Namens, lassen sich zuverlässiger und günstiger über API-Integrationstests absichern. Die Faustregel: Je mehr ein Workflow von asynchroner Verarbeitung, Statusübergängen oder Neuberechnung abhängt, Bulk-Operationen über die Message Queue, Indexer, E-Mail-Versand, desto höher der Wert eines echten Browser-Tests, der diese Kette tatsächlich end-to-end durchläuft, statt sie an der Service-Grenze zu mocken.

3. Admin-Session und Auth-Handling in Tests

Der größte Zeitfresser in schlecht gebauten Admin-Test-Suiten ist der wiederholte UI-Login. Jeder Testlauf, der Benutzername und Passwort über das Login-Formular eintippt, kostet mehrere Sekunden pro Test und macht die gesamte Suite von der Stabilität des Login-Screens abhängig: Fällt der Login aus irgendeinem Grund aus, schlagen alle Tests fehl, nicht nur der eigentlich betroffene. Das robuste Muster: Einmal pro Testlauf über die UI oder die REST-API anmelden und die resultierende Session cachen. Playwright bietet dafür storageState, Cypress das cy.session()-Command mit cacheAcrossSpecs, beide persistieren PHPSESSID, form_key und die Admin-Cookies zwischen Tests.

Wichtig ist, die Session pro ACL-Rolle zu isolieren, wenn Tests unterschiedliche Berechtigungsstufen prüfen sollen, etwa ob ein eingeschränkter Nutzer die Preisregel-Sektion tatsächlich nicht sieht. Ein zweiter Aspekt ist der Session-Ablauf: Magentos admin/security/session_lifetime beendet Sessions nach Inaktivität, was in langen Testläufen zu unerwarteten Redirects auf die Login-Seite führt. Für CI-Umgebungen empfiehlt sich ein dedizierter Test-Admin-Nutzer mit verlängerter Session-Lifetime, getrennt von produktiven Zugangsdaten.


// playwright/global-setup.ts
// Log in through the Admin UI exactly once and persist the session,
// instead of repeating the login flow in every single spec file.
import { chromium, FullConfig, expect } from '@playwright/test';

async function globalSetup(config: FullConfig) {
  const baseURL = process.env.MAGENTO_ADMIN_URL ?? 'https://mironsoft.test';
  const browser = await chromium.launch();
  const context = await browser.newContext({ baseURL });
  const page = await context.newPage();

  await page.goto('/admin');
  await page.fill('#username', process.env.MAGENTO_ADMIN_USER!);
  await page.fill('#login', process.env.MAGENTO_ADMIN_PASSWORD!);
  await page.click('#send2');

  // Wait for a stable, low-churn element instead of a fixed timeout
  await expect(page.locator('[data-ui-id="page-title-dashboard"]')).toBeVisible();

  // PHPSESSID, form_key and admin_user_creds cookies are now captured here
  await context.storageState({ path: 'playwright/.auth/admin.json' });
  await browser.close();
}

export default globalSetup;

4. Produktanlage testen: dynamische Attribute-Sets

Produktanlage ist einer der komplexesten Admin-Workflows aus Testing-Sicht, weil das Formular sich zur Laufzeit verändert. Der Wechsel des Attribute-Sets löst einen AJAX-Aufruf aus, der neue Formularfelder nachlädt, etwa Größe und Farbe für Bekleidung oder technische Datenblätter für Elektronik. Ein Test, der auf eine feste Anzahl Formularfelder oder deren DOM-Position setzt, bricht bei jeder Attribute-Set-Änderung. Robuster ist es, Felder über stabile data-testid-Attribute pro Attributcode anzusprechen und explizit auf den Abschluss des AJAX-Aufrufs zu warten, bevor auf neue Felder zugegriffen wird, mit cy.intercept() oder Playwrights waitForResponse() statt einer festen Wartezeit.

Ebenso wichtig ist die Validierungsebene: Pflichtfelder, SKU-Eindeutigkeit und die Kompatibilität von Attributwerten mit dem gewählten Attribute-Set müssen als eigene Testfälle abgedeckt werden, nicht nur der Erfolgsfall. Ein Test, der ausschließlich das erfolgreiche Speichern prüft, übersieht die häufigsten Praxisfehler, etwa doppelte SKUs bei parallelem Import und manueller Anlage, oder ein Pflichtattribut, das erst nach dem Attribute-Set-Wechsel sichtbar und damit leicht übersehen wird.


// cypress/support/commands.js
// Reuse the cached admin session captured once per test run
Cypress.Commands.add('loginAsAdmin', () => {
  cy.session('admin', () => {
    cy.visit('/admin');
    cy.get('#username').type(Cypress.env('adminUser'));
    cy.get('#login').type(Cypress.env('adminPassword'));
    cy.get('#send2').click();
    cy.get('[data-ui-id="page-title-dashboard"]').should('be.visible');
  }, { cacheAcrossSpecs: true });
});

// cypress/e2e/admin/product-creation.cy.js
describe('Admin: product creation with dynamic attribute set', () => {
  beforeEach(() => {
    cy.loginAsAdmin();
    cy.visit('/admin/catalog/product/new/set/4/type/simple/');
  });

  it('reveals attribute-set-specific fields after switching the set', () => {
    // Selecting a different attribute set triggers an AJAX reload of the form;
    // wait for the network call to settle instead of a fixed sleep
    cy.intercept('POST', '**/catalog/product/attributesJson/**').as('attributeSetSwitch');

    cy.get('[data-testid="product-attribute-set-select"]').select('T-Shirt Attribute Set');
    cy.wait('@attributeSetSwitch');

    // Locate fields by data-testid, never by row or column index in the form
    cy.get('[data-testid="product-field-size"]').should('be.visible');
    cy.get('[data-testid="product-field-color"]').should('be.visible');

    cy.get('[data-testid="product-field-sku"]').clear().type('MS-SHIRT-001');
    cy.get('[data-testid="product-field-name"]').type('Test Shirt');
    cy.get('[data-testid="product-field-price"]').type('29.90');
    cy.get('[data-testid="product-field-size"]').select('M');
    cy.get('[data-testid="product-field-color"]').select('Blue');

    cy.get('[data-testid="save-and-close"]').click();
    cy.contains('You saved the product.').should('be.visible');
  });

  it('shows validation errors for missing required fields', () => {
    cy.get('[data-testid="save-and-close"]').click();
    cy.get('[data-testid="product-field-sku"]').should('have.class', 'admin__field-error');
  });
});

5. Bestellstatus-Übergänge, Rechnung und Versand

Der Bestell-Lebenszyklus im Admin ist eine Kette von Statusübergängen, bei denen jeder Schritt vom vorherigen abhängt: Eine Bestellung muss processing sein, bevor eine Rechnung erstellt werden kann, ein Versand setzt eine bereits fakturierte Bestellung voraus, und eine Gutschrift erfordert wiederum eine bestehende Rechnung. E2E-Tests für diesen Bereich sollten nicht jede Bestellung von Grund auf über den Storefront-Checkout erzeugen, das koppelt Admin-Tests unnötig an Storefront-Stabilität und verlangsamt die Suite erheblich. Stattdessen werden Testbestellungen über die REST-API oder direkt über Repository-Fixtures im gewünschten Ausgangsstatus angelegt, und der Test beginnt erst beim eigentlich zu prüfenden Admin-Schritt.

Kritisch zu prüfen sind Teilversand und Teilrechnung, weil hier Mengen- und Bestandslogik ineinandergreifen: Wird bei einer Teilrechnung nur die tatsächlich in Rechnung gestellte Menge im Bestandsindex reduziert? Bleibt der Bestellstatus korrekt auf partially shipped, statt fälschlich auf complete zu springen? Zusätzlich lohnt sich die Prüfung der Bestellkommentar-Historie und der ausgelösten E-Mail-Benachrichtigungen, da beide oft stillschweigend brechen, wenn Statusübergänge über Plugins angepasst werden.

6. Admin-Grid-Interaktionen: Filter und Pagination

Magento-Admin-Grids sind UI-Components mit eigenem State-Management, das Filter, Sortierung, Spaltenauswahl und Pagination pro Benutzer im localStorage beziehungsweise serverseitig persistiert. Für E2E-Tests bedeutet das zwei Herausforderungen: Erstens laden Grids ihre Daten asynchron nach, sodass ein Test, der sofort nach dem Seitenaufruf auf Zeilen zugreift, auf eine leere oder veraltete Tabelle trifft. Zweitens beeinflusst gespeicherter Grid-State aus vorherigen Testläufen oder manuellen Sitzungen das Ergebnis nachfolgender Tests, was zu nicht reproduzierbaren Fehlschlägen führt.

Die robuste Lösung für das erste Problem ist, explizit auf die Netzwerkantwort des Grid-Ladeaufrufs zu warten, nicht auf eine feste Zeitspanne. Für das zweite Problem hilft es, den Grid-State vor jedem Test gezielt zurückzusetzen oder über URL-Parameter einen definierten Filter zu erzwingen, statt sich auf den zuletzt gespeicherten Zustand zu verlassen. Zeilen sollten außerdem nie über einen festen Index angesprochen werden, "Zeile 3" ist nur so lange stabil, wie sich Sortierung und Datenmenge nicht ändern. Der zuverlässige Weg ist, gezielt nach einem eindeutigen Wert zu filtern und dann genau eine Zeile zu erwarten.

7. Massenaktionen zuverlässig testen

Massenaktionen, mehrere Bestellungen stornieren, mehrere Produkte deaktivieren, mehrere Rechnungen drucken, sind in modernen Magento-Versionen häufig als asynchrone Bulk-Operationen über die Message Queue implementiert, nicht als synchrone Anfrage. Das bedeutet für Tests: Der Klick auf "Bestätigen" löst nicht sofort das Ergebnis aus, sondern reiht einen Job ein, dessen Fortschritt über die Benachrichtigungsleiste im Admin sichtbar wird. Ein Test, der direkt nach dem Bestätigen prüft, ob die Bestellung storniert wurde, ist strukturell falsch aufgebaut, er muss stattdessen auf den Abschluss der Bulk-Operation warten, etwa durch Polling des Benachrichtigungsstatus oder durch Prüfen der Consumer-Queue-Länge in einer Testumgebung mit synchronen Consumern.

Ein zweites Risiko bei Massenaktionen ist die Interferenz zwischen Grid-Reload und Hintergrundjob: Lädt das Grid neu, während der Bulk-Job noch läuft, zeigt die Tabelle einen Zwischenzustand, der weder dem alten noch dem neuen Zustand entspricht. Tests sollten deshalb explizit auf den Endzustand warten, etwa "alle drei ausgewählten Bestellungen haben Status storniert", statt sich auf eine einzelne Erfolgsmeldung zu verlassen, die vor Abschluss der eigentlichen Verarbeitung erscheinen kann.


// tests/admin/order-mass-action.spec.ts
import { test, expect } from '@playwright/test';

test.use({ storageState: 'playwright/.auth/admin.json' });

test('cancels multiple pending orders via mass action', async ({ page }) => {
  await page.goto('/admin/sales/order/');

  // Filter the grid instead of relying on hardcoded row positions
  await page.click('[data-testid="grid-filters-toggle"]');
  await page.selectOption('[data-testid="filter-status"]', 'pending');
  await page.click('[data-testid="grid-filters-apply"]');

  // Wait for the grid's AJAX reload to finish, not for a fixed delay
  await page.waitForResponse((response) =>
    response.url().includes('/sales/order/index') && response.status() === 200
  );

  const rows = page.locator('[data-testid="order-grid-row"]');
  await expect(rows).toHaveCount(3);

  // Select all filtered rows explicitly, never "row 1 to 3" by index
  await page.click('[data-testid="grid-select-all"]');
  await page.selectOption('[data-testid="grid-mass-action-select"]', 'cancel');

  await page.click('[data-testid="grid-mass-action-confirm"]');
  await expect(page.locator('[data-testid="message-success"]')).toContainText(
    'You canceled 3 order(s)'
  );

  // Mass actions run as async bulk operations; poll the notification bar
  await expect(page.locator('[data-testid="bulk-notification-status"]')).toHaveText(
    'Complete',
    { timeout: 15000 }
  );
});

8. Catalog Price Rules erstellen und validieren

Catalog Price Rules gehören zu den admin-seitigen Funktionen mit dem größten Schadenspotenzial, weil ein Fehler nicht eine einzelne Bestellung, sondern den gesamten sichtbaren Katalog betrifft. Ein Test für Preisregeln muss mehr prüfen als das erfolgreiche Speichern der Regel: Bedingungen wie Kategoriezugehörigkeit oder Attributwert, die Priorität gegenüber anderen aktiven Regeln, der Rabatttyp (Prozent, fester Betrag, fester Preis) und der Gültigkeitszeitraum müssen jeweils in Kombination getestet werden, weil sich Regeln gegenseitig überschreiben oder addieren können.

Der entscheidende Punkt, den viele Test-Suiten übersehen: Preisregeln wirken nicht sofort, sondern erst nach einem Indexer-Lauf. Ein E2E-Test muss deshalb entweder den Preisindex explizit anstoßen und auf dessen Abschluss warten, oder mit dem update on save-Indexer-Modus arbeiten, der für Testumgebungen oft praktikabler ist als der produktionsübliche "On Schedule"-Modus mit Cron-Verzögerung. Ohne diesen Schritt prüft der Test nur, ob die Regel in der Datenbank existiert, nicht, ob sie tatsächlich zu einem korrekten Katalogpreis führt, was der eigentliche Zweck der Regel ist.


{
  "fixture": "admin-session",
  "description": "Cached admin session metadata reused across the E2E suite",
  "token": {
    "type": "bearer",
    "issuedAt": "2026-07-12T02:00:00Z",
    "expiresInSeconds": 14400
  },
  "cookies": [
    { "name": "PHPSESSID", "domain": "mironsoft.test", "httpOnly": true, "secure": true },
    { "name": "admin_user_creds", "domain": "mironsoft.test", "httpOnly": true, "secure": true },
    { "name": "form_key", "domain": "mironsoft.test", "httpOnly": false, "secure": true }
  ],
  "user": {
    "username": "e2e_admin",
    "role": "E2E Automation",
    "resources": [
      "Magento_Sales::sales_order",
      "Magento_Catalog::products",
      "Magento_CatalogRule::promo_catalog"
    ]
  }
}

9. Wartungskosten gegen Coverage abwägen

Admin-E2E-Tests haben einen strukturellen Vorteil gegenüber Storefront-Tests: Die Admin-Oberfläche selbst ändert sich deutlich seltener. Während der Storefront regelmäßig Layout-Anpassungen, neue Hyvä-Komponenten oder A/B-Test-Varianten erhält, bleibt die Magento-Admin-UI mit ihren UI-Components über Jahre bemerkenswert stabil. Das senkt die Wartungskosten pro Test spürbar, ein einmal geschriebener Admin-Test bleibt länger grün, ohne bei jedem Frontend-Release angepasst werden zu müssen. Dieser Vorteil gilt aber nur, wenn Selektoren von Anfang an robust gewählt werden; wer auf generierte CSS-Klassen aus UI-Components setzt, verliert den Stabilitätsvorteil wieder.

Trotzdem bleibt Admin-E2E-Testing teuer in der Ausführung: Browser-Tests sind langsamer als Integrationstests, und komplexe Workflows wie Bestellabwicklung oder Preisregeln benötigen mehrfache Seitenwechsel und Wartezeiten auf Indexer. Die wirtschaftliche Antwort ist eine klare Priorisierung nach Geschäftsrisiko statt vollständiger Coverage: Kritische, finanziell relevante Workflows bekommen echte Browser-Tests, Routine-CRUD-Screens werden über schnellere API-Integrationstests abgesichert. Ein bewährtes Muster ist außerdem, die langsamere Admin-Suite von der schnelleren Storefront-Suite zu trennen und nächtlich statt bei jedem Commit laufen zu lassen, wie im folgenden CI-Beispiel.


# .github/workflows/admin-e2e-nightly.yml
# Runs the admin E2E suite nightly, separate from the storefront pipeline,
# because admin flows are slower and less frequently affected by daily commits.
name: Admin E2E Nightly

on:
  schedule:
    - cron: '0 2 * * *'
  workflow_dispatch: {}

jobs:
  admin-e2e:
    runs-on: ubuntu-latest
    timeout-minutes: 45
    steps:
      - uses: actions/checkout@v4

      - name: Start Magento stack
        run: docker compose -f compose.dev.yaml up -d

      - name: Wait for admin to become reachable
        run: |
          until curl -sf https://mironsoft.test/admin/admin/dashboard/index -o /dev/null; do
            sleep 5
          done

      - name: Seed baseline fixtures via API
        run: bin/cli bin/magento mironsoft:testing:seed-admin-fixtures

      - name: Install Playwright browsers
        run: npx playwright install --with-deps chromium

      - name: Run admin E2E suite
        run: npx playwright test --project=admin --reporter=github,html
        env:
          MAGENTO_ADMIN_URL: https://mironsoft.test
          MAGENTO_ADMIN_USER: ${{ secrets.ADMIN_E2E_USER }}
          MAGENTO_ADMIN_PASSWORD: ${{ secrets.ADMIN_E2E_PASSWORD }}

      - name: Upload Playwright report
        if: always()
        uses: actions/upload-artifact@v4
        with:
          name: admin-e2e-report
          path: playwright-report/

Die folgende Tabelle vergleicht typische brüchige Muster mit ihren robusten Gegenstücken.

Aufgabe Brüchiges Muster Robustes Muster Vorteil
Anmeldung UI-Login in jedem Test storageState / cy.session cachen Schneller, unabhängig vom Login-Screen
Selektoren Generierte CSS-Klassen data-testid pro Element Übersteht Layout-Änderungen
Grid-Zeilen Fester Index ("Zeile 3") Filterung nach eindeutigem Wert Robust bei Sortierung und neuen Daten
Wartezeiten cy.wait(5000) Warten auf Netzwerkantwort/Element Weniger Flaky-Tests, schneller
Coverage-Strategie Jeden Admin-Screen testen Risikobasierte Priorisierung Wartungsaufwand passend zum Geschäftsrisiko

In der Praxis zahlt sich die rechte Spalte der Tabelle über die Lebensdauer der Suite mehrfach aus: Weniger Flaky-Tests bedeuten weniger Zeit für das erneute Ausführen fehlgeschlagener Jobs und mehr Vertrauen des Teams in rote Testergebnisse. Ein Team, das nach den ersten drei falsch-positiven Fehlschlägen anfängt, fehlgeschlagene Admin-Tests zu ignorieren, hat die eigentliche Investition bereits verloren, unabhängig davon, wie viele Workflows technisch abgedeckt sind.

Mironsoft

E2E-Testautomatisierung für Magento-Admin und Storefront

Admin-Workflows zuverlässig testen lassen?

Wir bauen belastbare E2E-Test-Suiten für eure Magento-Admin-Workflows: von Session Handling über Grid-Interaktionen bis zur risikobasierten Priorisierung eurer Testabdeckung.

Session & Auth Setup

Programmatischer Admin-Login statt UI-Formular in jedem Test, inklusive Rollen-Isolation für ACL-Szenarien

Workflow-Priorisierung

Browser-E2E für Bestellungen und Preisregeln, API-Tests für einfaches CRUD

CI-Integration

Nightly Admin-E2E-Pipelines mit Cypress oder Playwright, getrennt von der Storefront-Suite

10. Zusammenfassung

E2E-Tests für Magento-Admin-Workflows lösen ein anderes Problem als Storefront-Tests: Sie sichern Prozesssicherheit und Datenintegrität für eine kleine Gruppe interner Nutzer ab, deren Fehler direkt Umsatz und Rechtssicherheit betreffen. Programmatisches Session Handling über storageState oder cy.session() ersetzt den wiederholten UI-Login. Stabile data-testid-Selektoren überstehen Attribute-Set-Wechsel, Grid-Updates und Formularänderungen. Massenaktionen und Preisregeln erfordern explizites Warten auf asynchrone Bulk-Operationen und Indexer-Läufe, statt sofortiger Erfolgsprüfung.

Der wirtschaftliche Vorteil von Admin-E2E-Tests liegt in der Stabilität der Admin-Oberfläche selbst: Sie ändert sich seltener als der Storefront und amortisiert damit die Testinvestition über einen längeren Zeitraum, vorausgesetzt, Selektoren und Wartestrategien sind von Anfang an robust aufgebaut. Die entscheidende strategische Entscheidung bleibt die risikobasierte Priorisierung: volle Browser-Coverage für Bestellabwicklung und Preisregeln, schnellere API-Integrationstests für Routine-CRUD-Screens.

Magento-Admin-Workflows end-to-end testen, das Wichtigste auf einen Blick

Session statt UI-Login

storageState oder cy.session() cachen, Session pro ACL-Rolle isoliert testen.

Stabile Selektoren

data-testid statt generierter CSS-Klassen aus UI-Components verwenden.

Grids & Massenaktionen

Auf Netzwerkantworten warten, nie auf feste Zeilenindizes oder Timeouts verlassen.

Risikobasierte Priorisierung

Browser-E2E für Bestellungen und Preisregeln, API-Tests für einfaches CRUD.

11. FAQ: Magento-Admin-Workflows end-to-end testen

1Warum reichen PHPUnit-Integrationstests für den Admin nicht aus?
Sie prüfen Service-Contracts, aber nicht den vollständigen Pfad durch Formular, AJAX, ACL-Prüfung und JavaScript-Interaktionen. E2E-Tests im Browser decken genau diese Lücke ab.
2Wie logge ich mich ein, ohne die UI jedes Mal zu nutzen?
Einmal pro Testlauf anmelden und die Session mit storageState oder cy.session() cachen. Beide persistieren PHPSESSID, form_key und Admin-Cookies zwischen Tests.
3Wie gehe ich mit dynamischen Attribute-Sets um?
Felder über data-testid pro Attributcode ansprechen und explizit auf den AJAX-Abschluss beim Attribute-Set-Wechsel warten, nicht auf feste Formularpositionen setzen.
4Wie teste ich Massenaktionen zuverlässig?
Auf den Abschluss der asynchronen Bulk-Operation warten, etwa per Polling der Benachrichtigungsleiste, statt sofort nach dem Klick das Ergebnis zu prüfen.
5Wie vermeide ich Flaky-Tests bei Admin-Grids?
Auf die Netzwerkantwort des Grid-Ladeaufrufs warten, Grid-State zurücksetzen und Zeilen über gefilterte Werte statt fester Indizes ansprechen.
6Welche Workflows haben Priorität für E2E-Coverage?
Produktanlage mit Attribute-Sets, Bestellabwicklung inklusive Rechnung und Versand, sowie Catalog Price Rules, wegen Formularlogik, Asynchronität und finanziellem Risiko.
7Wie stabil sind Admin-Selektoren im Vergleich zum Storefront?
Die Admin-UI ändert sich seltener, was Tests günstiger macht, aber nur wenn Selektoren über data-testid statt generierter CSS-Klassen gewählt werden.
8Muss ich den Indexer nach einer Preisregel manuell anstoßen?
Ja, Preisregeln wirken erst nach dem Indexer-Lauf. Explizit anstoßen und abwarten oder mit update on save arbeiten, sonst prüft der Test nur den Datenbankeintrag.
9Wie integriere ich Admin-E2E-Tests in CI?
Als separate, meist nächtliche Pipeline getrennt von der Storefront-Suite. Fixtures per API seeden, danach die E2E-Suite gegen den Admin ausführen.
10Was ist der größte Fehler bei Admin-E2E-Tests?
UI-Login in jedem Test kombiniert mit festen Wartezeiten statt Warten auf Netzwerkantworten. Beides macht die Suite langsam und flaky.