From fd0e07a99f70ba28d66a4554ae0f1efbf884bd17 Mon Sep 17 00:00:00 2001 From: Karan Hotchandani <33024356+karanh37@users.noreply.github.com> Date: Thu, 3 Jul 2025 18:50:46 +0530 Subject: [PATCH] fix flaky playwright (#22038) * fix flaky playwright * fix flakiness --- .../ui/playwright/e2e/Pages/Domains.spec.ts | 31 +++++++++++++------ .../ui/playwright/e2e/Pages/Lineage.spec.ts | 4 +-- .../resources/ui/playwright/utils/domain.ts | 6 +--- 3 files changed, 25 insertions(+), 16 deletions(-) diff --git a/openmetadata-ui/src/main/resources/ui/playwright/e2e/Pages/Domains.spec.ts b/openmetadata-ui/src/main/resources/ui/playwright/e2e/Pages/Domains.spec.ts index 00fa88fdc71..9beceeffbe2 100644 --- a/openmetadata-ui/src/main/resources/ui/playwright/e2e/Pages/Domains.spec.ts +++ b/openmetadata-ui/src/main/resources/ui/playwright/e2e/Pages/Domains.spec.ts @@ -412,11 +412,14 @@ test.describe('Domains', () => { await selectDomain(page, domain.data); // Create sub domain await createSubDomain(page, subDomain.data); + await redirectToHomePage(page); + await sidebarClick(page, SidebarItem.DOMAIN); await selectSubDomain(page, domain.data, subDomain.data); await verifyDomain(page, subDomain.data, domain.data, false); // Follow domain await followEntity(page, EntityTypeEndpoint.Domain); await redirectToHomePage(page); + await page.waitForLoadState('networkidle'); // Check that the followed domain is shown in the following widget await expect( @@ -426,10 +429,14 @@ test.describe('Domains', () => { page.locator('[data-testid="following-widget"]') ).toContainText(subDomain.data.displayName); - await sidebarClick(page, SidebarItem.DOMAIN); - await selectDomain(page, domain.data); - await selectSubDomain(page, domain.data, subDomain.data); - await verifyDomain(page, subDomain.data, domain.data, false); + const subDomainRes = page.waitForResponse('/api/v1/domains/name/*'); + await page + .locator('[data-testid="following-widget"]') + .getByText(subDomain.data.displayName) + .click(); + + await subDomainRes; + // Unfollow domain await unFollowEntity(page, EntityTypeEndpoint.Domain); await redirectToHomePage(page); @@ -443,7 +450,6 @@ test.describe('Domains', () => { ).not.toContainText(subDomain.data.displayName); await sidebarClick(page, SidebarItem.DOMAIN); - await selectDomain(page, domain.data); await selectSubDomain(page, domain.data, subDomain.data); await verifyDomain(page, subDomain.data, domain.data, false); @@ -901,11 +907,18 @@ test.describe('Data Consumer Domain Ownership', () => { 'Check domain management permissions for data consumer owner', async () => { await sidebarClick(dataConsumerPage, SidebarItem.DOMAIN); - await selectDomain(dataConsumerPage, testResources.domainForTest.data); - await dataConsumerPage.locator('[data-testid="loader"]').waitFor({ - state: 'detached', - }); + const permissionRes = dataConsumerPage.waitForResponse( + '/api/v1/permissions/domain/*' + ); + await dataConsumerPage + .getByRole('menuitem', { + name: testResources.domainForTest.data.displayName, + }) + .locator('span') + .click(); + + await permissionRes; await dataConsumerPage.getByTestId('domain-details-add-button').click(); diff --git a/openmetadata-ui/src/main/resources/ui/playwright/e2e/Pages/Lineage.spec.ts b/openmetadata-ui/src/main/resources/ui/playwright/e2e/Pages/Lineage.spec.ts index 781eca94669..6eb7e9f7d3a 100644 --- a/openmetadata-ui/src/main/resources/ui/playwright/e2e/Pages/Lineage.spec.ts +++ b/openmetadata-ui/src/main/resources/ui/playwright/e2e/Pages/Lineage.spec.ts @@ -256,11 +256,11 @@ test('Verify column lineage between table and topic', async ({ browser }) => { const searchRes = page.waitForResponse('/api/v1/search/query?*'); await page.click('[data-testid="search-entity-select"]'); - await page.keyboard.type(tableServiceFqn); + await page.keyboard.type(topicServiceFqn); await searchRes; const lineageRes = page.waitForResponse('/api/v1/lineage/getLineage?*'); - await page.click(`[data-testid="node-suggestion-${tableServiceFqn}"]`); + await page.click(`[data-testid="node-suggestion-${topicServiceFqn}"]`); await lineageRes; const tableServiceNode = page.locator( diff --git a/openmetadata-ui/src/main/resources/ui/playwright/utils/domain.ts b/openmetadata-ui/src/main/resources/ui/playwright/utils/domain.ts index da37fd6064a..1da1983f0d3 100644 --- a/openmetadata-ui/src/main/resources/ui/playwright/utils/domain.ts +++ b/openmetadata-ui/src/main/resources/ui/playwright/utils/domain.ts @@ -128,17 +128,13 @@ export const selectSubDomain = async ( }); if (!isSelected) { - const subDomainRes = page.waitForResponse( - '/api/v1/search/query?*&from=0&size=50&index=domain_search_index' - ); await menuItem.click(); - await subDomainRes; + await page.waitForLoadState('networkidle'); } await page.getByTestId('subdomains').getByText('Sub Domains').click(); await page.getByTestId(subDomain.name).click(); await page.waitForLoadState('networkidle'); - await page.locator('[data-testid="loader"]').waitFor({ state: 'detached' }); }; export const selectDataProductFromTab = async (