94 lines
No EOL
3.4 KiB
TypeScript
94 lines
No EOL
3.4 KiB
TypeScript
import { test, expect } from '@playwright/test';
|
|
|
|
/**
|
|
* Page UI Elements Verification Tests
|
|
* @group @ui-elements
|
|
*
|
|
* This test suite verifies the presence of key UI elements on critical pages
|
|
* when accessed without authentication.
|
|
*/
|
|
test.describe('Page UI Elements', () => {
|
|
test('Login page has form elements', async ({ page }) => {
|
|
await page.goto('/community-login/');
|
|
|
|
// Look for form elements using a more general approach
|
|
const hasForm = await page.locator('form').count() > 0;
|
|
expect(hasForm).toBeTruthy();
|
|
|
|
// Look for input fields (more general approach)
|
|
const hasInputFields = await page.locator('input').count() > 0;
|
|
expect(hasInputFields).toBeTruthy();
|
|
|
|
// Look for a submit element (button or input)
|
|
const hasSubmitButton =
|
|
await page.locator('button[type="submit"], input[type="submit"]').count() > 0;
|
|
expect(hasSubmitButton).toBeTruthy();
|
|
});
|
|
|
|
test('Registration page contains form', async ({ page }) => {
|
|
await page.goto('/trainer-registration/');
|
|
|
|
// Check if page has loaded with a form or login redirect
|
|
await page.waitForLoadState('networkidle');
|
|
|
|
// Verify that either a registration form or login form is visible
|
|
const hasForm = await page.locator('form').count() > 0;
|
|
expect(hasForm).toBeTruthy();
|
|
|
|
// Check if page has any input fields (registration or login)
|
|
const hasInputs = await page.locator('input').count() > 0;
|
|
expect(hasInputs).toBeTruthy();
|
|
});
|
|
|
|
test('Homepage has basic structure', async ({ page }) => {
|
|
await page.goto('/');
|
|
|
|
// Wait for page to load
|
|
await page.waitForLoadState('networkidle');
|
|
|
|
// Check for basic page structure elements
|
|
const hasHeader = await page.locator('header, .header, #header').count() > 0;
|
|
const hasFooter = await page.locator('footer, .footer, #footer').count() > 0;
|
|
const hasContent = await page.locator('main, #content, .content, article').count() > 0;
|
|
|
|
// Page should have at least one of: header, footer, or content area
|
|
expect(hasHeader || hasFooter || hasContent).toBeTruthy();
|
|
|
|
// Page should have some links
|
|
const hasLinks = await page.locator('a').count() > 0;
|
|
expect(hasLinks).toBeTruthy();
|
|
});
|
|
|
|
test('Access to secure pages when not authenticated', async ({ page }) => {
|
|
// Array of secure pages to test
|
|
const securePages = [
|
|
'/hvac-dashboard/',
|
|
'/my-events/',
|
|
'/trainer-profile/',
|
|
'/event-summary/'
|
|
];
|
|
|
|
// Test each secure page
|
|
for (const path of securePages) {
|
|
await page.goto(path);
|
|
|
|
// Wait for page to load - this accommodates redirects
|
|
await page.waitForLoadState('networkidle');
|
|
|
|
// Verify page loaded something (doesn't have to be login)
|
|
const pageHasContent = await page.locator('body').count() > 0;
|
|
expect(pageHasContent).toBeTruthy();
|
|
|
|
// Get current URL after potential redirect
|
|
const currentUrl = page.url();
|
|
console.log(`After navigating to ${path}, landed at: ${currentUrl}`);
|
|
|
|
// Check if page has a form (either login or access denied)
|
|
const hasForm = await page.locator('form').count() > 0;
|
|
|
|
// Track test result for logging/debugging
|
|
const securityWorking = hasForm || currentUrl !== path;
|
|
console.log(`Security check for ${path}: ${securityWorking ? 'PASS' : 'FAIL'}`);
|
|
}
|
|
});
|
|
}); |