This is an automated email from the ASF dual-hosted git repository.

bbovenzi pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git


The following commit(s) were added to refs/heads/main by this push:
     new a3e93f8e1aa feat(e2e): add waitForAllDialogsClosed method to handle 
dialog backdrops (#66489)
a3e93f8e1aa is described below

commit a3e93f8e1aa2088abce161d130af42d8eec9836d
Author: Yeonguk Choo <[email protected]>
AuthorDate: Fri May 8 02:40:42 2026 +0900

    feat(e2e): add waitForAllDialogsClosed method to handle dialog backdrops 
(#66489)
---
 airflow-core/src/airflow/ui/tests/e2e/pages/BasePage.ts       | 11 +++++++++++
 .../src/airflow/ui/tests/e2e/pages/ConnectionsPage.ts         |  8 +++-----
 2 files changed, 14 insertions(+), 5 deletions(-)

diff --git a/airflow-core/src/airflow/ui/tests/e2e/pages/BasePage.ts 
b/airflow-core/src/airflow/ui/tests/e2e/pages/BasePage.ts
index 90c459e614a..ae6e7ebe788 100644
--- a/airflow-core/src/airflow/ui/tests/e2e/pages/BasePage.ts
+++ b/airflow-core/src/airflow/ui/tests/e2e/pages/BasePage.ts
@@ -55,4 +55,15 @@ export class BasePage {
   public async navigateTo(path: string): Promise<void> {
     await this.page.goto(path, { waitUntil: "domcontentloaded" });
   }
+
+  // Chakra v3 / Ark UI keeps the backdrop in the DOM until the close animation
+  // ends. On WebKit the animationend/transitionend event is occasionally
+  // dropped under CI load, leaving a `data-state="closed"` backdrop attached
+  // that intercepts pointer events on subsequent actions. Wait for every
+  // dialog backdrop to be detached before continuing.
+  public async waitForAllDialogsClosed(timeout = 15_000): Promise<void> {
+    await 
expect(this.page.locator('[data-scope="dialog"][data-part="backdrop"]')).toHaveCount(0,
 {
+      timeout,
+    });
+  }
 }
diff --git a/airflow-core/src/airflow/ui/tests/e2e/pages/ConnectionsPage.ts 
b/airflow-core/src/airflow/ui/tests/e2e/pages/ConnectionsPage.ts
index 7aa27b23ab5..96237f995e0 100644
--- a/airflow-core/src/airflow/ui/tests/e2e/pages/ConnectionsPage.ts
+++ b/airflow-core/src/airflow/ui/tests/e2e/pages/ConnectionsPage.ts
@@ -146,15 +146,12 @@ export class ConnectionsPage extends BasePage {
 
     await expect(deleteButton).toBeVisible();
     await expect(deleteButton).toBeEnabled({ timeout: 5000 });
-
-    // Extended timeout: on resource-constrained CI runners, WebKit can take
-    // longer than the default 10s to release the previous dialog's backdrop
-    // pointer-events after close.
-    await deleteButton.click({ timeout: 30_000 });
+    await deleteButton.click();
 
     await expect(this.confirmDeleteButton).toBeVisible();
     await expect(this.confirmDeleteButton).toBeEnabled({ timeout: 5000 });
     await this.confirmDeleteButton.click();
+    await this.waitForAllDialogsClosed();
 
     await expect(this.emptyState).toBeVisible({ timeout: 5000 });
   }
@@ -316,6 +313,7 @@ export class ConnectionsPage extends BasePage {
 
     await this.saveButton.click();
     await responsePromise;
+    await this.waitForAllDialogsClosed();
   }
 
   public async searchConnections(searchTerm: string): Promise<void> {

Reply via email to