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> {