import { test, expect } from '@playwright/test';
import { LoginPage } from '../pages/LoginPage';
/**
* OrangeHRM Login Test Suite
* Tests the login functionality using the Page Object Model pattern
*/
test.describe('OrangeHRM Login Tests', () => {
let loginPage: LoginPage;
test.beforeEach(async ({ page }) => {
/**
* Initialize the LoginPage object before each test
*/
loginPage = new LoginPage(page);
});
test('should successfully login with valid credentials', async ({ page }) => {
/**
* Test: Login with Admin / admin123
*
* Steps:
* 1. Navigate to login page
* 2. Enter username "Admin"
* 3. Enter password "admin123"
* 4. Click login button
* 5. Verify login success (dashboard appears)
* 6. Take a screenshot
*/
// Step 1: Navigate to login page
await loginPage.navigateToLogin();
// Verify we're on the login page by checking the URL
expect(page.url()).toContain('/auth/login');
// Step 2: Enter username
await loginPage.enterUsername('Admin');
// Step 3: Enter password
await loginPage.enterPassword('admin123');
// Step 4: Click login button and wait for dashboard
await loginPage.clickLoginAndWait();
// Step 5: Verify login was successful
await loginPage.verifyLoginSuccess();
// Verify the page title changed (typically to Dashboard or similar)
const pageTitle = await loginPage.getPageTitle();
console.log(`Page title after login: ${pageTitle}`);
// Step 6: Take a screenshot of the dashboard
await loginPage.takeScreenshot('login-success.png');
// Additional assertion: verify we're no longer on the login page
expect(page.url()).not.toContain('/auth/login');
});
test('should display error with invalid credentials', async ({ page }) => {
/**
* Test: Login with invalid credentials
* Verify that we remain on login page
*/
await loginPage.navigateToLogin();
await loginPage.enterUsername('InvalidUser');
await loginPage.enterPassword('InvalidPassword');
await loginPage.clickLogin();
// Wait a moment for response
await page.waitForTimeout(2000);
// After invalid login, we should still be on the login page
expect(page.url()).toContain('/auth/login');
// Take a screenshot showing the login page
await loginPage.takeScreenshot('login-error.png');
});
test('should remain on login page when username is empty', async ({ page }) => {
/**
* Test: Attempt login without entering username
* Verify we remain on login page
*/
await loginPage.navigateToLogin();
// Leave username empty, only enter password
await loginPage.enterPassword('admin123');
// Try clicking login
await loginPage.clickLogin();
// Wait a moment for response
await page.waitForTimeout(2000);
// Verify we're still on the login page
expect(page.url()).toContain('/auth/login');
await loginPage.takeScreenshot('login-empty-username.png');
});
});