From d11ebd91052f07ac558492c110861d83da1e4cd8 Mon Sep 17 00:00:00 2001 From: Gandalf the Greybeard Date: Sun, 26 Apr 2026 21:44:54 +0000 Subject: [PATCH] fix(e2e): scope heading locators to main content area Cherry-picked from PR #50 to fix E2E test failures on lodash PR. Co-Authored-By: Paperclip --- e2e/intel-gpu.spec.ts | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/e2e/intel-gpu.spec.ts b/e2e/intel-gpu.spec.ts index 104380d..3aae3ef 100644 --- a/e2e/intel-gpu.spec.ts +++ b/e2e/intel-gpu.spec.ts @@ -19,16 +19,18 @@ test.describe('Intel GPU plugin smoke tests', () => { // Should navigate to the overview route await expect(page).toHaveURL(/\/intel-gpu$/); - await expect(page.getByRole('heading', { name: /Intel GPU — Overview/i })).toBeVisible(); + await expect( + page.locator('main').getByRole('heading', { name: 'Intel GPU — Overview' }) + ).toBeVisible(); }); test('overview page renders GPU device list or empty state', async ({ page }) => { await page.goto('/c/main/intel-gpu'); // Overview heading should be present - await expect(page.getByRole('heading', { name: /Intel GPU — Overview/i })).toBeVisible({ - timeout: 15_000, - }); + await expect( + page.locator('main').getByRole('heading', { name: 'Intel GPU — Overview' }) + ).toBeVisible({ timeout: 15_000 }); // Either a populated table/list or an empty-state indicator must be visible const hasTable = await page.locator('table').first().isVisible().catch(() => false); @@ -43,9 +45,9 @@ test.describe('Intel GPU plugin smoke tests', () => { test('device plugins page renders or shows empty state', async ({ page }) => { await page.goto('/c/main/intel-gpu/device-plugins'); - await expect(page.getByRole('heading', { name: /Intel GPU — Device Plugins/i })).toBeVisible({ - timeout: 15_000, - }); + await expect( + page.locator('main').getByRole('heading', { name: 'Intel GPU — Device Plugins' }) + ).toBeVisible({ timeout: 15_000 }); const hasTable = await page.locator('table').first().isVisible().catch(() => false); const hasEmptyState = await page @@ -61,18 +63,24 @@ test.describe('Intel GPU plugin smoke tests', () => { // not after clicking the parent entry from the overview. Test route // accessibility via direct navigation — each route must render its heading. await page.goto('/c/main/intel-gpu'); - await expect(page.getByRole('heading', { name: /Intel GPU — Overview/i })).toBeVisible({ - timeout: 15_000, - }); + await expect( + page.locator('main').getByRole('heading', { name: 'Intel GPU — Overview' }) + ).toBeVisible({ timeout: 15_000 }); await page.goto('/c/main/intel-gpu/nodes'); - await expect(page.getByRole('heading', { name: /Intel GPU — Nodes/i })).toBeVisible({ timeout: 15_000 }); + await expect( + page.locator('main').getByRole('heading', { name: 'Intel GPU — Nodes' }) + ).toBeVisible({ timeout: 15_000 }); await page.goto('/c/main/intel-gpu/pods'); - await expect(page.getByRole('heading', { name: /Intel GPU — Pods/i })).toBeVisible({ timeout: 15_000 }); + await expect( + page.locator('main').getByRole('heading', { name: 'Intel GPU — Pods' }) + ).toBeVisible({ timeout: 15_000 }); await page.goto('/c/main/intel-gpu/metrics'); - await expect(page.getByRole('heading', { name: /Intel GPU — Metrics/i })).toBeVisible({ timeout: 15_000 }); + await expect( + page.locator('main').getByRole('heading', { name: 'Intel GPU — Metrics' }) + ).toBeVisible({ timeout: 15_000 }); }); test('plugin settings page shows intel-gpu plugin entry', async ({ page }) => {