All checks were successful
ERP-Deploy-Demo / deploy-demo (push) Successful in 1m36s
73 lines
2.4 KiB
TypeScript
73 lines
2.4 KiB
TypeScript
import { test, expect } from '@playwright/test';
|
||
import { login } from './helpers/auth';
|
||
|
||
/**
|
||
* Star ERP 登入流程端到端測試
|
||
*/
|
||
test.describe('登入功能', () => {
|
||
|
||
test('頁面應正確顯示登入表單', async ({ page }) => {
|
||
// 前往登入頁面
|
||
await page.goto('/');
|
||
|
||
// 驗證:帳號輸入框存在
|
||
await expect(page.locator('#username')).toBeVisible();
|
||
|
||
// 驗證:密碼輸入框存在
|
||
await expect(page.locator('#password')).toBeVisible();
|
||
|
||
// 驗證:登入按鈕存在
|
||
await expect(page.getByRole('button', { name: '登入系統' })).toBeVisible();
|
||
});
|
||
|
||
test('輸入錯誤的帳密應顯示錯誤訊息', async ({ page }) => {
|
||
await page.goto('/');
|
||
|
||
// 輸入錯誤的帳號密碼
|
||
await page.fill('#username', 'wronguser');
|
||
await page.fill('#password', 'wrongpassword');
|
||
|
||
// 點擊登入
|
||
await page.getByRole('button', { name: '登入系統' }).click();
|
||
|
||
// 等待頁面回應
|
||
await page.waitForTimeout(2000);
|
||
|
||
// 驗證:應該還是停在登入頁面(未成功跳轉)
|
||
await expect(page).toHaveURL(/\//);
|
||
|
||
// 驗證:頁面上應顯示某種錯誤提示(紅色文字或 toast)
|
||
// 先用寬鬆的檢查方式,後續可以根據實際錯誤訊息調整
|
||
const hasError = await page.locator('.text-red-500, .text-red-600, [role="alert"], .toast, [data-sonner-toast]').count();
|
||
expect(hasError).toBeGreaterThan(0);
|
||
});
|
||
|
||
test('輸入正確帳密後應成功登入並跳轉', async ({ page }) => {
|
||
// 使用共用登入函式
|
||
await login(page);
|
||
|
||
// 驗證:頁面右上角應顯示使用者名稱
|
||
await expect(page.getByText('mama')).toBeVisible();
|
||
|
||
// 驗證:儀表板的關鍵指標卡片存在
|
||
await expect(page.getByText('庫存總值')).toBeVisible();
|
||
|
||
// 截圖留存(成功登入畫面)
|
||
await page.screenshot({ path: 'e2e/screenshots/login-success.png', fullPage: true });
|
||
});
|
||
|
||
test('空白帳密不應能登入', async ({ page }) => {
|
||
await page.goto('/');
|
||
|
||
// 不填任何東西,直接點登入
|
||
await page.getByRole('button', { name: '登入系統' }).click();
|
||
|
||
// 等待頁面回應
|
||
await page.waitForTimeout(1000);
|
||
|
||
// 驗證:應該還在登入頁面
|
||
await expect(page.locator('#username')).toBeVisible();
|
||
});
|
||
|
||
});
|