mirror of
https://github.com/zoriya/v10.git
synced 2026-08-16 02:45:09 +00:00
fix(test): stabilize e2e tests (#1678)
This commit is contained in:
@@ -1,10 +1,23 @@
|
||||
import { expect, test } from '@playwright/test';
|
||||
import { expect, type Page, test } from '@playwright/test';
|
||||
import { DATA_ATTRS, SELECTORS } from '../fixtures/selectors';
|
||||
import { PlayerPage } from '../page-objects/player';
|
||||
|
||||
test.describe('Error Dialog', () => {
|
||||
let player: PlayerPage;
|
||||
|
||||
async function triggerError(page: Page) {
|
||||
await page.evaluate(() => {
|
||||
const video = document.querySelector('video') as HTMLVideoElement;
|
||||
if (!video) return;
|
||||
|
||||
Object.defineProperty(video, 'error', {
|
||||
configurable: true,
|
||||
value: { code: 4, message: 'Test media error' },
|
||||
});
|
||||
video.dispatchEvent(new Event('error'));
|
||||
});
|
||||
}
|
||||
|
||||
test.beforeEach(async ({ page }) => {
|
||||
player = new PlayerPage(page);
|
||||
await page.goto('/pages/html-video-mp4.html');
|
||||
@@ -14,11 +27,7 @@ test.describe('Error Dialog', () => {
|
||||
test('shows error dialog on media load failure', async ({ page }) => {
|
||||
const errorDialog = page.locator(SELECTORS.errorDialog).first();
|
||||
|
||||
// Set an invalid source to trigger a media error
|
||||
await page.evaluate(() => {
|
||||
const video = document.querySelector('video') as HTMLVideoElement;
|
||||
if (video) video.src = 'https://example.com/does-not-exist.mp4';
|
||||
});
|
||||
await triggerError(page);
|
||||
|
||||
// Error dialog should appear with data-open
|
||||
await expect(errorDialog).toHaveAttribute(DATA_ATTRS.open, '', { timeout: 15_000 });
|
||||
@@ -27,11 +36,7 @@ test.describe('Error Dialog', () => {
|
||||
test('error dialog can be dismissed', async ({ page }) => {
|
||||
const errorDialog = page.locator(SELECTORS.errorDialog).first();
|
||||
|
||||
// Trigger error
|
||||
await page.evaluate(() => {
|
||||
const video = document.querySelector('video') as HTMLVideoElement;
|
||||
if (video) video.src = 'https://example.com/does-not-exist.mp4';
|
||||
});
|
||||
await triggerError(page);
|
||||
|
||||
await expect(errorDialog).toHaveAttribute(DATA_ATTRS.open, '', { timeout: 15_000 });
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ import { DATA_ATTRS, SELECTORS } from '../fixtures/selectors';
|
||||
import { PlayerPage } from '../page-objects/player';
|
||||
|
||||
for (const { name, path, media, skipBrowsers } of ALL_VIDEO_PAGES as readonly PageEntry[]) {
|
||||
const usesSettingsMenu = !path.includes('/cdn-video') && !path.includes('/ejected');
|
||||
const rateMenu = !path.includes('/cdn-video') && !path.includes('/ejected');
|
||||
test.describe(`Video Controls — ${name}`, () => {
|
||||
test.skip(({ browserName }) => {
|
||||
return skipBrowsers?.includes(browserName as 'chromium' | 'webkit' | 'firefox') ?? false;
|
||||
@@ -27,11 +27,7 @@ for (const { name, path, media, skipBrowsers } of ALL_VIDEO_PAGES as readonly Pa
|
||||
await expect(player.muteButton).toHaveAttribute(DATA_ATTRS.volumeLevel);
|
||||
await expect(player.fullscreenButton).toHaveAttribute(DATA_ATTRS.availability);
|
||||
await expect(player.pipButton).toHaveAttribute(DATA_ATTRS.availability);
|
||||
if (usesSettingsMenu) {
|
||||
await expect(player.settingsButton).toBeAttached();
|
||||
} else {
|
||||
await expect(player.captionsButton).toHaveAttribute(DATA_ATTRS.availability);
|
||||
}
|
||||
await expect(player.settingsButton).toBeAttached();
|
||||
await expect(player.duration).not.toHaveText('');
|
||||
await player.showControls();
|
||||
await expect(player.controls).toBeAttached();
|
||||
@@ -96,7 +92,7 @@ for (const { name, path, media, skipBrowsers } of ALL_VIDEO_PAGES as readonly Pa
|
||||
|
||||
// --- Playback Rate ---
|
||||
|
||||
(usesSettingsMenu ? test : test.skip)('playback rate menu changes selected rate', async () => {
|
||||
(rateMenu ? test : test.skip)('playback rate menu changes selected rate', async () => {
|
||||
const initialRate = await player.getPlaybackRate();
|
||||
|
||||
await player.selectAlternativePlaybackRate();
|
||||
|
||||
Reference in New Issue
Block a user