الدرس الذي فات وصّلك لكورس الجافا (21 ساعة، مجاناً على قناتي). وهسا السؤال العملي: 21 ساعة كثير — كلها لازمة؟
الجواب الصريح: لأ. كلها مفيدة، لكن مش كلها بنفس الأهمية إلك كمؤتمت.
في أجزاء ستستخدمها بكل ملف تكتبه بباقي الكورس. وفي أجزاء ستشوفها مرة بالسنة. والفرق بينهم يوفّر عليك أسابيع.
هذا الدرس هو الخريطة.
بنهاية هذا الدرس، ستكون قادراً على:
هؤلاء ستستخدمهم بكل سطر بباقي الكورس:
ليش أساسي؟ الـ Page Object Model كله مبني على هذا. كل صفحة بمشروعك ستكون كلاس، وكل صفحة رح تُنشأ ككائن.
public class LoginPage { // ← كلاس
private static final By EMAIL = By.id("email");
public void login(String email, String password) { /* ... */ }
}
LoginPage loginPage = new LoginPage(); // ← كائنليش أساسي؟ BasePage و BaseTest هما وراثة بالكامل.
public abstract class BasePage { /* دوال مشتركة */ }
public class CartPage extends BasePage { /* ← وراثة */ }والتغليف (private مقابل public) هو الذي يجعل الصفحة تخفي محدداتها وتعرض أفعالها بس.
ليش أساسي؟ كل مرة تلاقي عدة عناصر، ستشتغل بـ List. وإدارة الكوكيز والإعدادات بـ Map.
List<WebElement> rows = driver.findElements(By.cssSelector(".item-row"));
Map<String, String> cookies = new HashMap<>();ليش أساسي؟ نص شغل المؤتمت هو التعامل مع أخطاء متوقّعة. StaleElementReferenceException و TimeoutException و NoSuchElementException — ستتعامل معهم كل يوم.
try {
driver.switchTo().alert().accept();
} catch (NoAlertPresentException ignored) {
// لا يوجد تنبيه — طبيعي
}الأساس المطلق. كل سطر تكتبه هو دالة بتنادي دالة.
| الموضوع | متى ستحتاجه |
|---|---|
| الـ Enums | Driver Factory والبيئات — قسم 11 و 14 |
| الـ Records | كائنات بيانات الاختبار — قسم 13 |
| الـ Generics الأساسيات | List<String> و ThreadLocal<WebDriver> |
| الـ Streams الأساسيات | تحويل قوائم العناصر لنصوص |
| الواجهات (Interfaces) | Browser Managers و Supplier |
| الـ Lambda | WebDriverWait و Supplier |
wait.until(d -> ...) و Supplier<WebDriver> ستشوفهم كثير. لكن لا تحتاج تفهم النظرية العميقة، لكن تعرف تقرا وتكتب lambda بسيطة.هؤلاء موجودين بالكورس، وممتازين للفهم العام — لكن لن تستخدمهم كثير:
StringBuilder وتفاصيل الأداءflatMap و Collectors المتقدمةflatMap، تعرف إنها موجودة وتذهب تدوّر عليها. لكن لا تصرف يومين عليها الآن.| المستوى | من الـ 21 ساعة | الطريقة |
|---|---|---|
| أساسي (1-5 فوق) | ~13 ساعة | توقّف، اكتب، كرّر |
| مفيد | ~6 ساعات | تركيز متوسط، اكتب المهم |
| بسرعة | ~2 ساعات | مشاهدة سريعة |
وأضف ضعف الوقت للكتابة الفعلية. يعني 21 ساعة فيديو ≈ 40-45 ساعة شغل حقيقي.
ThreadLocal<WebDriver> بمشروع حقيقي، وفجأة بتفهمها. لأنك شفتها بسياق حقيقي مش بمثال مجرّد.
الفهم الكامل يأتي من الاستخدام، مش من التكرار.لا تحتاج تكون خبير. تحتاج تجاوب "أه" على هؤلاء:
extends وماذا يصير عندما كلاس يورث من آخرprivate و public وليشList و Map، وأضيف عليهم وأمرّ عليهم بحلقةtry/catch ومتى أستخدمهx -> x > 5سبعة من ثمانية؟ ارجع كمّل. أقل؟ راجع الجزء الناقص بس.
21 ساعة كلها مفيدة، لكن مش كلها بنفس الأهمية.
"تتخطّى" معناها "مرّ بسرعة" مش "لا تشوف" — شوف كل شي، بسرعتين مختلفتين.
خمسة أساسيات: الكلاسات، البرمجة الكائنية، بنية البيانات، الاستثناءات، والدوال.
الـ POM كله كلاسات، والـ BasePage كلها وراثة — لهذا السبب هؤلاء أساسيين.
الـ Enums والـ Records والـ Lambda مفيدة — ستشوفهم بأقسام محدّدة.
إدارة الذاكرة العميقة والـ Streams المعقّدة: بسرعة — اعرف إنهم موجودين وبس.
21 ساعة فيديو ≈ 40-45 ساعة شغل — ثلاث أسابيع بساعتين يومياً.
الفخ الأشهر: محاولة فهم كل شيء 100% قبل الاستمرار.
افهم 70% وكمّل — الفهم الكامل يأتي من الاستخدام مش من التكرار.
أهم علامة جهوزية: تستطيع أن تقرا كود مكتوب من غيرك.
في الدرس الجاي: آخر درس بهاد القسم — الجافا اللي فعلاً بتستخدمها بالأتمتة، بأمثلة من الكود اللي رح نكتبه بباقي الكورس.
يلا، نلتقي بالدرس الجاي!