E2e reliability and performance#2201
Open
samuelreichert wants to merge 34 commits into
Open
Conversation
05040a8 to
e7a39b8
Compare
Adds checkAccessibility(page, selector, options) to mendix-helpers.
Wraps @axe-core/playwright with sensible defaults (wcag21aa tags).
Usage:
import { checkAccessibility } from "@mendix/run-e2e/mendix-helpers";
await checkAccessibility(page, ".mx-name-widget1");
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Without explicit exports, Node cannot resolve @mendix/run-e2e/fixtures or @mendix/run-e2e/mendix-helpers from widget spec files. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…idle The previous implementation resolved too early — mx.session exists before sub-page widgets render. Now waits for: 1. domcontentloaded 2. mx.session + no progress indicator + .mx-page exists 3. networkidle (ensures widget data fetches complete) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…der)
Codemod regex only matched `{ test, expect }` ordering. Six specs used
`{ expect, test }` and were left importing from @playwright/test — no
fixture cleanup meant session exhaustion after ~5 tests.
Also fix codemod regex to handle both orderings for future runs.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Make mendixSession worker-scoped so each worker holds 1 Mendix session, preventing session exhaustion with parallel workers (4 workers < 5 license limit). - Fix waitForFunction call: pass timeout as 3rd arg (options), not 2nd (arg). Previously actionTimeout (10s) was used instead of intended 60s. - Set local workers to 4 (safe with worker-scoped sessions). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- FilteringSingle: replace allTextContents() after toHaveText() with single toHaveText([...array]) call that retries atomically. - FilteringMulti: remove waitForTimeout(300) and allTextContents() pattern, use toHaveText()/toContainText() for auto-retry assertions. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…specs - video-player-web: remove redundant waitForMendixReady (fixture handles it). - checkbox-radio-selection-web: replace networkidle waits with waitForMendixApp. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…itForDataReady networkidle hangs forever on pages with streaming content (video embeds, websockets). The mx.session + .mx-page check is sufficient for readiness. Add waitForDataReady helper for tests that explicitly need networkidle. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Migration to shared fixtures and waitForMendixApp is complete across all specs. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…eenshot validation
…test Replace textContent()+toBe() with toHaveText() locator assertion so the paging status check retries until the filter is applied. Fix row loop to use expected.length and .nth(i) — rows.length on a Playwright Locator is undefined, so the loop was silently never executing. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Replace inline rules in AGENTS.md with pointer to guidelines file - Remove redundant waitForMendixApp calls from template (fixture wraps goto) - Drop checklist section — rules already covered inline - Drop Session Management section — merged into Imports & Setup - Expand Locator Patterns: composed selectors, text-only = false positive
8d6f6a3 to
6d43298
Compare
leonardomendix
approved these changes
May 21, 2026
r0b1n
approved these changes
May 21, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Pull request type
No code changes (changes to documentation, CI, metadata, etc.)
Test related change (New E2E test, test automation, etc.)
Description
This PR improves E2E test reliability and reduces nightly run duration through a set of infrastructure, stability, and parallelization improvements.
Shared fixtures & Mendix helpers (
run-e2e)waitForMendixApp(page)helper to replacewaitForLoadState("networkidle"), which was unreliable and caused flaky testscheckAccessibilityshared helperE2E_SUITE=smokeenv var and@smoketagFlakiness fixes
page.waitForTimeout()fixed delays with event-based waitswaitForLoadState("networkidle")across all specsnth(1)assertion in badge-button close page testScreenshot baseline hardening
threshold: 0.1andanimations: "disabled"in playwright configESLint rules
eslint-plugin-playwrightrules to prevent flaky patterns from creeping back:no-wait-for-timeout(error),no-networkidle(warn),prefer-web-first-assertions(warn)Parallelization
Turbo
cypress/**,cypress.config.*) replaced with Playwright equivalents (e2e/**,playwright.config.*) for correct cache invalidationWhat should be covered while testing?