This is an automated email from the ASF dual-hosted git repository.
rahulvats pushed a commit to branch v3-2-test
in repository https://gitbox.apache.org/repos/asf/airflow.git
The following commit(s) were added to refs/heads/v3-2-test by this push:
new bd0bd3383d7 [v3-2-test] fix: mark flaky UI E2E tests as fixme (#64445)
(#64454)
bd0bd3383d7 is described below
commit bd0bd3383d713bdf8f42c561defadaa3e542c7cd
Author: github-actions[bot]
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Mon Mar 30 10:29:50 2026 +0530
[v3-2-test] fix: mark flaky UI E2E tests as fixme (#64445) (#64454)
Mark tests that consistently fail in scheduled CI runs as
test.fixme() and add xcoms.spec.ts to testIgnore. Identified
by analyzing the last 6 scheduled test runs with E2E failures.
(cherry picked from commit 24377867836177c1b27a1b401e2e9ef250bce32a)
Co-authored-by: Jarek Potiuk <[email protected]>
---
airflow-core/src/airflow/ui/playwright.config.ts | 1 +
airflow-core/src/airflow/ui/tests/e2e/specs/backfill.spec.ts | 6 ++++--
.../src/airflow/ui/tests/e2e/specs/dag-audit-log.spec.ts | 2 +-
.../src/airflow/ui/tests/e2e/specs/dag-calendar-tab.spec.ts | 9 +++++----
airflow-core/src/airflow/ui/tests/e2e/specs/dag-code-tab.spec.ts | 4 ++--
airflow-core/src/airflow/ui/tests/e2e/specs/dags-list.spec.ts | 4 ++--
airflow-core/src/airflow/ui/tests/e2e/specs/events-page.spec.ts | 2 +-
.../src/airflow/ui/tests/e2e/specs/task-instances.spec.ts | 6 +++---
8 files changed, 19 insertions(+), 15 deletions(-)
diff --git a/airflow-core/src/airflow/ui/playwright.config.ts
b/airflow-core/src/airflow/ui/playwright.config.ts
index 36351c3bc86..cbd1e7ea728 100644
--- a/airflow-core/src/airflow/ui/playwright.config.ts
+++ b/airflow-core/src/airflow/ui/playwright.config.ts
@@ -118,6 +118,7 @@ export default defineConfig({
"**/task-logs.spec.ts",
"**/dag-tasks.spec.ts",
"**/variable.spec.ts",
+ "**/xcoms.spec.ts",
],
timeout: 30_000,
diff --git a/airflow-core/src/airflow/ui/tests/e2e/specs/backfill.spec.ts
b/airflow-core/src/airflow/ui/tests/e2e/specs/backfill.spec.ts
index b97d31d8b46..609a0bc6c1b 100644
--- a/airflow-core/src/airflow/ui/tests/e2e/specs/backfill.spec.ts
+++ b/airflow-core/src/airflow/ui/tests/e2e/specs/backfill.spec.ts
@@ -86,7 +86,9 @@ test.describe("Backfill", () => {
});
for (const config of backfillConfigs) {
- test(`verify backfill with '${REPROCESS_API_TO_UI[config.behavior]}'
behavior`, async ({ page }) => {
+ test.fixme(`verify backfill with
'${REPROCESS_API_TO_UI[config.behavior]}' behavior`, async ({
+ page,
+ }) => {
const backfillPage = new BackfillPage(page);
await backfillPage.navigateToBackfillsTab(testDagId);
@@ -199,7 +201,7 @@ test.describe("Backfill", () => {
await expect(backfillPage.unpauseButton).toBeVisible({ timeout: 10_000
});
});
- test("verify cancel backfill", async () => {
+ test.fixme("verify cancel backfill", async () => {
const dates = FIXED_DATES.controls.cancel;
// Create + pause atomically to eliminate race with scheduler.
diff --git a/airflow-core/src/airflow/ui/tests/e2e/specs/dag-audit-log.spec.ts
b/airflow-core/src/airflow/ui/tests/e2e/specs/dag-audit-log.spec.ts
index 6b6989ad1a8..9ab2894694f 100644
--- a/airflow-core/src/airflow/ui/tests/e2e/specs/dag-audit-log.spec.ts
+++ b/airflow-core/src/airflow/ui/tests/e2e/specs/dag-audit-log.spec.ts
@@ -87,7 +87,7 @@ test.describe("DAG Audit Log", () => {
await expect(dagIdColumn).not.toBeVisible();
});
- test("verify audit log entries display valid data", async () => {
+ test.fixme("verify audit log entries display valid data", async () => {
await eventsPage.navigateToAuditLog(testDagId);
const rows = await eventsPage.getEventLogRows();
diff --git
a/airflow-core/src/airflow/ui/tests/e2e/specs/dag-calendar-tab.spec.ts
b/airflow-core/src/airflow/ui/tests/e2e/specs/dag-calendar-tab.spec.ts
index f6160e560e7..e8818791a7d 100644
--- a/airflow-core/src/airflow/ui/tests/e2e/specs/dag-calendar-tab.spec.ts
+++ b/airflow-core/src/airflow/ui/tests/e2e/specs/dag-calendar-tab.spec.ts
@@ -96,7 +96,7 @@ test.describe("DAG Calendar Tab", () => {
await calendar.navigateToCalendar(dagId);
});
- test("verify calendar grid renders", async () => {
+ test.fixme("verify calendar grid renders", async () => {
await calendar.switchToHourly();
await calendar.verifyMonthGridRendered();
});
@@ -130,7 +130,8 @@ test.describe("DAG Calendar Tab", () => {
expect(states).toContain("failed");
});
- test("failed filter shows only failed runs", async () => {
+ // The scheduler can override the PATCH-to-failed state back to success
before tests run.
+ test.fixme("failed filter shows only failed runs", async () => {
await calendar.switchToHourly();
const totalStates = await calendar.getManualRunStates();
@@ -158,7 +159,7 @@ test.describe("DAG Calendar Tab", () => {
expect(failedCount).toBeLessThan(totalCount);
});
- test("color scale changes between total and failed view", async () => {
+ test.fixme("color scale changes between total and failed view", async () => {
await calendar.switchToHourly();
const totalColors = await calendar.getActiveCellColors();
@@ -171,7 +172,7 @@ test.describe("DAG Calendar Tab", () => {
expect(failedColors).not.toEqual(totalColors);
});
- test("cells reflect failed view mode attribute", async () => {
+ test.fixme("cells reflect failed view mode attribute", async () => {
await calendar.switchToHourly();
await calendar.switchToFailedView();
diff --git a/airflow-core/src/airflow/ui/tests/e2e/specs/dag-code-tab.spec.ts
b/airflow-core/src/airflow/ui/tests/e2e/specs/dag-code-tab.spec.ts
index f4577873e42..6d4d9c0680b 100644
--- a/airflow-core/src/airflow/ui/tests/e2e/specs/dag-code-tab.spec.ts
+++ b/airflow-core/src/airflow/ui/tests/e2e/specs/dag-code-tab.spec.ts
@@ -35,11 +35,11 @@ test.describe("DAG Code Tab", () => {
await codePage.verifySourceCodeDisplayed();
});
- test("Verify syntax highlighting is applied", async () => {
+ test.fixme("Verify syntax highlighting is applied", async () => {
await codePage.verifySyntaxHighlighting();
});
- test("Verify code is scrollable for long files", async () => {
+ test.fixme("Verify code is scrollable for long files", async () => {
await codePage.verifyCodeIsScrollable();
});
diff --git a/airflow-core/src/airflow/ui/tests/e2e/specs/dags-list.spec.ts
b/airflow-core/src/airflow/ui/tests/e2e/specs/dags-list.spec.ts
index 6181bbc47a7..ef2e75b2aab 100644
--- a/airflow-core/src/airflow/ui/tests/e2e/specs/dags-list.spec.ts
+++ b/airflow-core/src/airflow/ui/tests/e2e/specs/dags-list.spec.ts
@@ -28,7 +28,7 @@ test.describe("Dag Trigger Workflow", () => {
dagsPage = new DagsPage(page);
});
- test("should successfully trigger a Dag run", async () => {
+ test.fixme("should successfully trigger a Dag run", async () => {
test.setTimeout(7 * 60 * 1000);
const dagRunId = await dagsPage.triggerDag(testDagId);
@@ -48,7 +48,7 @@ test.describe("Dag Details Tab", () => {
dagsPage = new DagsPage(page);
});
- test("should successfully verify details tab", async () => {
+ test.fixme("should successfully verify details tab", async () => {
test.setTimeout(120_000);
await dagsPage.verifyDagDetails(testDagId);
});
diff --git a/airflow-core/src/airflow/ui/tests/e2e/specs/events-page.spec.ts
b/airflow-core/src/airflow/ui/tests/e2e/specs/events-page.spec.ts
index d8638e7026a..e7ac0da78f2 100644
--- a/airflow-core/src/airflow/ui/tests/e2e/specs/events-page.spec.ts
+++ b/airflow-core/src/airflow/ui/tests/e2e/specs/events-page.spec.ts
@@ -123,7 +123,7 @@ test.describe("Events with Generated Data", () => {
}).toPass({ timeout: 20_000 });
});
- test("verify filter by DAG ID", async () => {
+ test.fixme("verify filter by DAG ID", async () => {
await eventsPage.navigate();
await eventsPage.addFilter("DAG ID");
await eventsPage.setFilterValue("DAG ID", testDagId);
diff --git a/airflow-core/src/airflow/ui/tests/e2e/specs/task-instances.spec.ts
b/airflow-core/src/airflow/ui/tests/e2e/specs/task-instances.spec.ts
index 08da9fce26d..b7f6155de33 100644
--- a/airflow-core/src/airflow/ui/tests/e2e/specs/task-instances.spec.ts
+++ b/airflow-core/src/airflow/ui/tests/e2e/specs/task-instances.spec.ts
@@ -129,12 +129,12 @@ test.describe("Task Instances Page", () => {
taskInstancesPage = new TaskInstancesPage(page);
});
- test("verify task instances table displays data", async () => {
+ test.fixme("verify task instances table displays data", async () => {
await taskInstancesPage.navigate();
await taskInstancesPage.verifyTaskInstancesExist();
});
- test("verify task details display correctly", async () => {
+ test.fixme("verify task details display correctly", async () => {
await taskInstancesPage.navigate();
await taskInstancesPage.verifyTaskDetailsDisplay();
});
@@ -144,7 +144,7 @@ test.describe("Task Instances Page", () => {
await taskInstancesPage.verifyStateFiltering("Failed");
});
- test("verify filtering by success state", async () => {
+ test.fixme("verify filtering by success state", async () => {
await taskInstancesPage.navigate();
await taskInstancesPage.verifyStateFiltering("Success");
});