|
|
const { chromium } = require('@playwright/test'); |
|
|
|
|
|
async function testDashboard() { |
|
|
console.log('🧪 بدء اختبار لوحة التحكم...\n'); |
|
|
|
|
|
const browser = await chromium.launch({ headless: true }); |
|
|
const context = await browser.newContext(); |
|
|
const page = await context.newPage(); |
|
|
|
|
|
let testsPassed = 0; |
|
|
let testsFailed = 0; |
|
|
|
|
|
|
|
|
const consoleErrors = []; |
|
|
page.on('console', msg => { |
|
|
if (msg.type() === 'error') { |
|
|
consoleErrors.push(msg.text()); |
|
|
} |
|
|
}); |
|
|
|
|
|
try { |
|
|
|
|
|
console.log('📋 اختبار 1: تحميل لوحة التحكم...'); |
|
|
await page.goto('file:///workspace/auto-guardian-docs/dashboard/index.html'); |
|
|
await page.waitForLoadState('domcontentloaded'); |
|
|
|
|
|
const title = await page.title(); |
|
|
console.log(` ✅ عنوان الصفحة: ${title}`); |
|
|
testsPassed++; |
|
|
|
|
|
|
|
|
console.log('\n📋 اختبار 2: التحقق من العناصر الرئيسية...'); |
|
|
|
|
|
const dashboard = await page.locator('.dashboard').isVisible(); |
|
|
const sidebar = await page.locator('.sidebar').isVisible(); |
|
|
const header = await page.locator('.header').isVisible(); |
|
|
const stats = await page.locator('.stats-grid').isVisible(); |
|
|
|
|
|
if (dashboard && sidebar && header && stats) { |
|
|
console.log(' ✅ جميع العناصر الرئيسية موجودة'); |
|
|
testsPassed++; |
|
|
} else { |
|
|
console.log(' ❌ بعض العناصر مفقودة'); |
|
|
testsFailed++; |
|
|
} |
|
|
|
|
|
|
|
|
console.log('\n📋 اختبار 3: بطاقات الإحصائيات...'); |
|
|
const statCards = await page.locator('.stat-card').count(); |
|
|
if (statCards === 4) { |
|
|
console.log(` ✅ 4 بطاقات إحصائيات موجودة`); |
|
|
testsPassed++; |
|
|
} else { |
|
|
console.log(` ❌ عدد البطاقات: ${statCards} (متوقع: 4)`); |
|
|
testsFailed++; |
|
|
} |
|
|
|
|
|
|
|
|
console.log('\n📋 اختبار 4: الرسوم البيانية...'); |
|
|
const areaChart = await page.locator('.area-chart').isVisible(); |
|
|
const donutChart = await page.locator('.donut-chart').isVisible(); |
|
|
const donutTotal = await page.locator('#donutTotal').textContent(); |
|
|
|
|
|
if (areaChart && donutChart) { |
|
|
console.log(` ✅ الرسوم البيانية ظاهرة (الإجمالي: ${donutTotal})`); |
|
|
testsPassed++; |
|
|
} else { |
|
|
console.log(' ❌ الرسوم البيانية غير ظاهرة'); |
|
|
testsFailed++; |
|
|
} |
|
|
|
|
|
|
|
|
console.log('\n📋 اختبار 5: قائمة التنقل...'); |
|
|
const navItems = await page.locator('.nav-item').count(); |
|
|
console.log(` ✅ ${navItems} عنصر في قائمة التنقل`); |
|
|
testsPassed++; |
|
|
|
|
|
|
|
|
console.log('\n📋 اختبار 6: لوحة الإعدادات...'); |
|
|
await page.click('[data-view="settings"]'); |
|
|
await page.waitForTimeout(500); |
|
|
const settingsActive = await page.locator('#settingsPanel').getAttribute('class'); |
|
|
|
|
|
if (settingsActive.includes('active')) { |
|
|
console.log(' ✅ لوحة الإعدادات تفتح بشكل صحيح'); |
|
|
testsPassed++; |
|
|
} else { |
|
|
console.log(' ❌ لوحة الإعدادات لا تفتح'); |
|
|
testsFailed++; |
|
|
} |
|
|
|
|
|
|
|
|
console.log('\n📋 اختبار 7: قائمة المشاكل...'); |
|
|
const issuesList = await page.locator('.issues-list').isVisible(); |
|
|
const issueItems = await page.locator('.issue-item').count(); |
|
|
|
|
|
if (issuesList && issueItems > 0) { |
|
|
console.log(` ✅ قائمة المشاكل ظاهرة (${issueItems} مشكلة)`); |
|
|
testsPassed++; |
|
|
} else { |
|
|
console.log(' ❌ قائمة المشاكل غير ظاهرة'); |
|
|
testsFailed++; |
|
|
} |
|
|
|
|
|
|
|
|
console.log('\n📋 اختبار 8: قائمة المستودعات...'); |
|
|
const reposList = await page.locator('.repos-list').isVisible(); |
|
|
const repoItems = await page.locator('.repo-item').count(); |
|
|
|
|
|
if (reposList && repoItems > 0) { |
|
|
console.log(` ✅ قائمة المستودعات ظاهرة (${repoItems} مستودع)`); |
|
|
testsPassed++; |
|
|
} else { |
|
|
console.log(' ❌ قائمة المستودعات غير ظاهرة'); |
|
|
testsFailed++; |
|
|
} |
|
|
|
|
|
|
|
|
console.log('\n📋 اختبار 9: وظيفة البحث...'); |
|
|
await page.fill('#searchInput', 'auth'); |
|
|
await page.waitForTimeout(300); |
|
|
const searchResults = await page.locator('.search-results').getAttribute('class'); |
|
|
|
|
|
if (searchResults.includes('active')) { |
|
|
console.log(' ✅ البحث يعمل بشكل صحيح'); |
|
|
testsPassed++; |
|
|
} else { |
|
|
console.log(' ❌ البحث لا يعمل'); |
|
|
testsFailed++; |
|
|
} |
|
|
|
|
|
|
|
|
console.log('\n📋 اختبار 10: إشعارات Toast...'); |
|
|
const toastContainer = await page.locator('.toast-container').isVisible(); |
|
|
if (toastContainer) { |
|
|
console.log(' ✅ حاوية الإشعارات موجودة'); |
|
|
testsPassed++; |
|
|
} else { |
|
|
console.log(' ❌ حاوية الإشعارات غير موجودة'); |
|
|
testsFailed++; |
|
|
} |
|
|
|
|
|
} catch (error) { |
|
|
console.error('\n❌ حدث خطأ أثناء الاختبار:', error.message); |
|
|
testsFailed++; |
|
|
} finally { |
|
|
await browser.close(); |
|
|
} |
|
|
|
|
|
|
|
|
console.log('\n' + '='.repeat(50)); |
|
|
console.log('📊 نتائج الاختبار:'); |
|
|
console.log('='.repeat(50)); |
|
|
console.log(`✅ اختبارات ناجحة: ${testsPassed}`); |
|
|
console.log(`❌ اختبارات فاشلة: ${testsFailed}`); |
|
|
console.log(`📝 إجمالي الاختبارات: ${testsPassed + testsFailed}`); |
|
|
|
|
|
if (consoleErrors.length > 0) { |
|
|
console.log('\n⚠️ أخطاء في Console:'); |
|
|
consoleErrors.forEach((err, i) => console.log(` ${i+1}. ${err}`)); |
|
|
} else { |
|
|
console.log('\n✅ لا توجد أخطاء في Console'); |
|
|
} |
|
|
|
|
|
console.log('='.repeat(50)); |
|
|
|
|
|
return testsFailed === 0; |
|
|
} |
|
|
|
|
|
testDashboard().then(success => { |
|
|
process.exit(success ? 0 : 1); |
|
|
}); |
|
|
|