|
| 1 | +import { expect, test } from '@nuxt/test-utils/playwright' |
| 2 | + |
| 3 | +test.describe('Package Page', () => { |
| 4 | + test('/vue → package manager select dropdown works', async ({ page, goto }) => { |
| 5 | + await goto('/vue', { waitUntil: 'domcontentloaded' }) |
| 6 | + |
| 7 | + const packageManagerButton = page.locator('button[aria-haspopup="listbox"]').first() |
| 8 | + await expect(packageManagerButton).toBeVisible() |
| 9 | + |
| 10 | + // Open dropdown |
| 11 | + await packageManagerButton.click() |
| 12 | + const packageManagerDropdown = page.locator('[role="listbox"]') |
| 13 | + await expect(packageManagerDropdown).toBeVisible() |
| 14 | + |
| 15 | + // Arrow keys navigate the listbox |
| 16 | + await packageManagerButton.press('ArrowDown') |
| 17 | + const firstDescendant = await packageManagerDropdown.getAttribute('aria-activedescendant') |
| 18 | + await packageManagerButton.press('ArrowDown') |
| 19 | + const secondDescendant = await packageManagerDropdown.getAttribute('aria-activedescendant') |
| 20 | + expect(secondDescendant).not.toBe(firstDescendant) |
| 21 | + |
| 22 | + // Escape closes dropdown and returns focus |
| 23 | + await packageManagerButton.press('Escape') |
| 24 | + await expect(packageManagerDropdown).not.toBeVisible() |
| 25 | + await expect(packageManagerButton).toBeFocused() |
| 26 | + |
| 27 | + // Enter selects option and closes dropdown |
| 28 | + await packageManagerButton.click() |
| 29 | + await packageManagerButton.press('ArrowDown') |
| 30 | + await packageManagerButton.press('Enter') |
| 31 | + await expect(packageManagerDropdown).not.toBeVisible() |
| 32 | + }) |
| 33 | +}) |
0 commit comments