fix(e2e): add waitForSidebar helper and networkidle waits for reliability
Add waitForSidebar helper function with explicit sidebar visibility wait and networkidle state to ensure page is fully loaded before assertions. This addresses flaky E2E tests where elements were not consistently found due to timing issues during page transitions.
This commit is contained in:
committed by
Gandalf the Greybeard [agent]
parent
ef7183a2d6
commit
7d56a903c8
+14
-6
@@ -1,30 +1,37 @@
|
|||||||
import { test, expect } from '@playwright/test';
|
import { test, expect } from '@playwright/test';
|
||||||
|
|
||||||
|
async function waitForSidebar(page: import('@playwright/test').Page) {
|
||||||
|
const sidebar = page.getByRole('navigation', { name: 'Navigation' });
|
||||||
|
await expect(sidebar).toBeVisible({ timeout: 15_000 });
|
||||||
|
await page.waitForLoadState('networkidle');
|
||||||
|
return sidebar;
|
||||||
|
}
|
||||||
|
|
||||||
test.describe('TNS CSI plugin smoke tests', () => {
|
test.describe('TNS CSI plugin smoke tests', () => {
|
||||||
test('sidebar contains TNS CSI entry', async ({ page }) => {
|
test('sidebar contains TNS CSI entry', async ({ page }) => {
|
||||||
await page.goto('/');
|
await page.goto('/');
|
||||||
const sidebar = page.getByRole('navigation', { name: 'Navigation' });
|
const sidebar = await waitForSidebar(page);
|
||||||
await expect(sidebar).toBeVisible({ timeout: 15_000 });
|
|
||||||
await expect(sidebar.getByRole('button', { name: /tns.csi/i })).toBeVisible();
|
await expect(sidebar.getByRole('button', { name: /tns.csi/i })).toBeVisible();
|
||||||
});
|
});
|
||||||
|
|
||||||
test('TNS CSI sidebar entry navigates to TNS CSI view', async ({ page }) => {
|
test('TNS CSI sidebar entry navigates to TNS CSI view', async ({ page }) => {
|
||||||
await page.goto('/');
|
await page.goto('/');
|
||||||
const sidebar = page.getByRole('navigation', { name: 'Navigation' });
|
const sidebar = await waitForSidebar(page);
|
||||||
await expect(sidebar).toBeVisible({ timeout: 15_000 });
|
|
||||||
|
|
||||||
const entry = sidebar.getByRole('button', { name: /tns.csi/i });
|
const entry = sidebar.getByRole('button', { name: /tns.csi/i });
|
||||||
await expect(entry).toBeVisible();
|
await expect(entry).toBeVisible();
|
||||||
await entry.click();
|
await entry.click();
|
||||||
|
|
||||||
|
await page.waitForLoadState('networkidle');
|
||||||
await expect(page).toHaveURL(/tns-csi/);
|
await expect(page).toHaveURL(/tns-csi/);
|
||||||
await expect(page.getByRole('heading', { name: /TNS.CSI/i })).toBeVisible();
|
await expect(page.getByRole('heading', { name: /tns.csi.*overview/i })).toBeVisible();
|
||||||
});
|
});
|
||||||
|
|
||||||
test('TNS CSI page renders content', async ({ page }) => {
|
test('TNS CSI page renders content', async ({ page }) => {
|
||||||
await page.goto('/c/main/tns-csi');
|
await page.goto('/c/main/tns-csi');
|
||||||
|
await waitForSidebar(page);
|
||||||
|
|
||||||
await expect(page.getByRole('heading', { name: /TNS.CSI/i })).toBeVisible({
|
await expect(page.getByRole('heading', { name: /tns.csi.*overview/i })).toBeVisible({
|
||||||
timeout: 15_000,
|
timeout: 15_000,
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -35,6 +42,7 @@ test.describe('TNS CSI plugin smoke tests', () => {
|
|||||||
|
|
||||||
test('plugin settings page shows TNS CSI plugin entry', async ({ page }) => {
|
test('plugin settings page shows TNS CSI plugin entry', async ({ page }) => {
|
||||||
await page.goto('/settings/plugins');
|
await page.goto('/settings/plugins');
|
||||||
|
await page.waitForLoadState('networkidle');
|
||||||
|
|
||||||
const pluginEntry = page.locator('text=/tns.csi/i').first();
|
const pluginEntry = page.locator('text=/tns.csi/i').first();
|
||||||
await expect(pluginEntry).toBeVisible({ timeout: 30_000 });
|
await expect(pluginEntry).toBeVisible({ timeout: 30_000 });
|
||||||
|
|||||||
Reference in New Issue
Block a user