40 lines
1.3 KiB
TypeScript
40 lines
1.3 KiB
TypeScript
import { test, expect } from '@playwright/test';
|
|
|
|
const BASE_URL = process.env.PLAYWRIGHT_BASE_URL || 'http://localhost:1313';
|
|
|
|
test.describe('HTML validation', () => {
|
|
test('homepage has valid HTML structure', async ({ page }) => {
|
|
await page.goto(BASE_URL);
|
|
|
|
// Check basic HTML structure
|
|
await expect(page.locator('html')).toHaveAttribute('lang');
|
|
await expect(page.locator('head')).toBeAttached();
|
|
await expect(page.locator('body')).toBeAttached();
|
|
|
|
// Verify meta tags
|
|
await expect(page.locator('meta[charset]')).toBeAttached();
|
|
await expect(page.locator('meta[name="viewport"]')).toBeAttached();
|
|
await expect(page.locator('meta[name="description"]')).toBeAttached();
|
|
|
|
// Check main structural elements
|
|
await expect(page.locator('header')).toBeAttached();
|
|
await expect(page.locator('footer')).toBeAttached();
|
|
|
|
});
|
|
|
|
test('page has valid theme attributes', async ({ page }) => {
|
|
await page.goto(BASE_URL);
|
|
|
|
const html = page.locator('html');
|
|
|
|
// Check theme attributes are present
|
|
await expect(html).toHaveAttribute('data-bs-theme');
|
|
|
|
// If theme is forced, these attributes should be present
|
|
const isForcedTheme = await html.getAttribute('theme-forced');
|
|
if (isForcedTheme === 'true') {
|
|
await expect(html).toHaveAttribute('theme-auto', 'false');
|
|
}
|
|
});
|
|
|
|
});
|