ليش نبدأ بمكتبة QAcart قبل Playwright

مقال مجاني 6 دقيقة

مقدمة

شفت مقدمة مكتبة QAcart بالدرس السابق. وأنا متأكد إنه في سؤال براسك:

«أنا دفعت حتى أتعلّم Playwright. ما هذه المكتبة؟ ليش ما نبدأ بـ Playwright مباشرة؟»

سؤال محترم تماماً، ويستاهل جواب صريح. وهذا الدرس هو الجواب.

وخليني أبدأ بالتطمين: ستتعلّم Playwright كامل — أكثر من 17 ساعة منه، من أول أمر لتصميم إطار عمل ودمج الـ API مع الـ E2E. هذه المكتبة مش بديل ولا اختصار. هي تحضير.


الأهداف التعليمية

بنهاية هذا الدرس، ستكون قادراً على:

  • تفهم ليش الترتيب هيك
  • تعرف ماذا ستتعلّمه بهاد الجزء بالتحديد
  • تعرف كيف ستنتقل لـ Playwright
  • تعرف إذا كان مناسب إنك تتخطّى هذا الجزء

أول شي: المكتبة هي Playwright

خليني أزيح أكبر سوء فهم من الطريق. مكتبة QAcart مبنية على Playwright — هي غلاف رفيع فوقه. الأوامر التي ستكتبها بالقسمين الجايين هي أوامر Playwright نفسها:

await page.getByRole('button', { name: 'إضافة' }).click();
await expect(page.getByTestId('task-title')).toHaveText('اشترِ حليب');

هذا السطران Playwright صافي. ما في لغة تانية ولا أداة تانية ولا شي سترميه بعدين.

مهم
يعني السؤال الحقيقي مش «ليش مكتبة بدل Playwright». السؤال هو: «ليش نكتب اختبارات قبل ما نتعلّم إعداد المشروع؟» وهذا سؤال إجابته أوضح بكثير.

المشكلة: مهارتان مش وحدة

تعلّم الأتمتة فيه مهارتان مستقلتان تماماً:

1. تفكير الأتمتة

  • ما يستاهل يُأتمت وما لأ
  • كيف تصمّم اختبار مستقل ومركّز ونظيف
  • كيف تكتب Assertions تتحدث ما انكسر
  • كيف تكتب محددات لا تكسر بمجرد أن المصمم يغيّر لون
  • ليش الاختبارات بتتذبذب، وكيف تمنعه

2. تشغيل مشروع Playwright

  • npm init و npx playwright install و tsconfig
  • ملف playwright.config.ts — المشاريع والمتصفحات والـ Reporters
  • الـ Fixtures و الـ beforeEach و الـ Hooks
  • التقارير والـ Traces والـ CI
مهم
والمشكلة إنه تعلّمهم مع بعض يضاعف الصعوبة — مش بيجمعها. تخيّل إنك تحاول تفهم ليش الاختبار لازم يكون مستقل، وانت بنفس اللحظة عمّال تحاول تفهم ليش الـ webServer بملف الإعدادات ما اشتغل. الدماغ لا يستطيع يتعلّم مفهومين جديدين بنفس اللحظة بكفاءة — يتعلّم واحد منهم سطحياً والثاني بالحفظ. والنتيجة التي بشوفها كل يوم: مؤتمت يعرف يعدّل playwright.config.ts ممتاز، لكن اختباراته متذبذبة ومربوطة ببعضها — لأنه تعلّم الأداة ولا تعلّم التفكير.

الحل: افصلهم

المكتبة تخفي المشروع حتى تركّز على الاختبار. بهذا القسم واللي بعده ما في عندك:

  • ولا ملف إعدادات تفتحه
  • ولا npm install تنتظره
  • ولا تطبيق تشغّله محلياً — التطبيق الذي نختبره مجهّز مسبقاً
  • ولا خيارات كثيرة تحتار بينها

كل هذا حتى يبقى شي واحد بتفكّر فيه: الاختبار نفسه.

نصيحة
بهذا القسم واللي بعده، ستتعلّم أشياء ما إلها علاقة بأي أداة: - استراتيجية الـ Assertions (صارم مقابل مرن، ورسائل الفشل) - حالات اختبار ذرية ومركّزة ونظيفة - كيف تقرأ طلب API وتستمع له وتحاكي استجابته - اختبار التكامل بين الواجهة والـ API ولا واحد من هؤلاء عن أداة. كلهم عن الهندسة — وكلهم بينتقلوا معك لأي أداة تستخدمها بحياتك، Playwright أو Cypress أو أي شيء جاي بعد عشر سنين.

طيب — ليش ما نتعلّم JavaScript الأول؟

لأنك ما بتحتاجها بعد.

الجافاسكربت بالكورس تبدأ بالقسم الرابع، وهي 15 ساعة كاملة — Functions و Classes و Arrays و Objects و Async و Node. وهذا كثير حتى تنتظره قبل ما تكتب أول اختبار بحياتك.

وأوامر المكتبة ما بتحتاج منها إشي. سطر واحد، اسم واضح، ونتيجة تشوفها بالمتصفح:

await page.getByLabel('البريد الإلكتروني').fill('hatem@qacart.com');
معلومة
فبتخرج من هذا القسم واللي بعده وانت كاتب اختبارات فعلية وفاهم ليش كتبتها هيك — قبل ما تفتح أول درس جافاسكربت. وهذا بيخلّي دروس الجافاسكربت نفسها أسهل، لأنك بتقرأها وانت عارف على وين رايحة.

كيف ستنتقل لـ Playwright الكامل؟

هون الفرق الأهم عن أي مسار تاني: الانتقال شبه مجاني.

لأن المكتبة هي Playwright، فاللي تعلّمته بهذا القسم واللي بعده ما بينترجم — بيكمل. بالقسم الثامن (البداية مع Playwright) بتبلش تبني المشروع من الصفر، وبتلاقي إنه:

  • نفس المحدداتgetByRole و getByLabel و getByTestId هي هي، وبالقسم 12 بتتعمّق فيها
  • نفس الـ Actionsclick و fill و check و hover، وبالقسم 13 بتشوف خياراتها الكاملة
  • نفس الـ Assertionsexpect(...).toHaveText(...)، وبتضيف عليها الـ auto-retry والـ soft assertions

واللي بتضيفه هو الغلاف اللي كنّا شايلينه عنك: المشروع والإعدادات (القسم 10) والـ Page Object Model (القسم 15) والـ API (القسم 16) والـ CI.

مهم
يعني معرفتك لا تنرمي ولا حتى تنترجم — بتتوسّع. وأهم من هيك: ستدخل مشروع Playwright وانت تعرف لا تريد منه. تعرف إنك بحاجة محددات متينة (لأنك فهمت ليش تكسر)، وبحاجة اختبارات مستقلة (لأنك فهمت Atomic)، وبحاجة استراتيجية Assertions (لأنك جرّبت الفرق). بينما اللي يبدأ بملف الإعدادات مباشرة يتعلّم الخيارات أول، ويكتشف هذه الحاجات بعد أن يكتب مئة اختبار سيء.

الجدول الزمني بالأرقام

الجزء المدة النسبة
مكتبة QAcart (القسمان 2-3) ~3.5 ساعة 9%
JavaScript و TypeScript (الأقسام 4-7) ~15.5 ساعة 42%
Playwright وتصميم الأطر (الأقسام 8-18) ~17.5 ساعة 48%

أقل من عُشر الوقت للتفكير، والباقي للغة والأداة والأطر. ومعظم اللي بالعُشر الأول ينتقل معك للباقي.


طيب — أستطيع أتخطّى هذا الجزء؟

بصراحة: أه، إذا انطبق عليك الثلاثة:

  • ✅ عندك خبرة سنة أو أكثر بأتمتة الاختبار فعلياً
  • ✅ تعرف ما هي حالة اختبار ذرية ومركّزة وليش
  • ✅ قابلت اختبارات متذبذبة وشخّصت أسبابها بنفسك

وقتها روح للقسم الرابع (أساسيات JavaScript) مباشرة، أو للقسم الثامن لو الجافاسكربت عندك جاهزة.

تحذير
لكن إذا واحد من الثلاثة "لأ" — لا تتخطّى. والسبب مش إنك لن تفهم Playwright. ستفهمه. السبب إنك ستفهمه وتبني اختبارات سيئة بسرعة عالية — وهذا أسوأ من إنك تتعلّم أبطأ. وعلامة إنك محتاج هذا الجزء: إذا قرأت كلمة "Atomic" فوق وما كنت متأكد ما معناها بالأتمتة. هذه وحدها كافية.

خلاصة الدرس

  1. المكتبة هي Playwright — غلاف رفيع فوقه، وأوامرها أوامره. ما في شي سترميه.

  2. ستتعلّم Playwright كامل — أكثر من 17 ساعة، من أول أمر لتصميم إطار ودمج API مع E2E.

  3. في مهارتان مستقلتان: تفكير الأتمتة وتشغيل المشروع.

  4. وتعلّمهم مع بعض يضاعف الصعوبة — الدماغ يتعلّم مفهوم جديد واحد بكفاءة، والثاني بالحفظ.

  5. والنتيجة الشائعة: مؤتمت يعرف ملف الإعدادات ممتاز واختباراته متذبذبة ومربوطة.

  6. ما بتحتاج جافاسكربت حتى تبدأ — أوامر المكتبة سطر واحد، والجافاسكربت تبدأ بالقسم الرابع.

  7. الانتقال شبه مجاني — نفس المحددات ونفس الـ Actions ونفس الـ Assertions، وبتضيف عليها المشروع والإعدادات والأطر.

  8. وستدخل Playwright تعرف لا تريد منه — محددات متينة، واستقلال، واستراتيجية Assertions.

  9. أقل من عُشر وقت الكورس — ومعظمه ينتقل معك.

  10. تستطيع أن تتخطّى إذا عندك سنة خبرة فعلية — وإذا ما كنت متأكد ما معنى "Atomic"، فلا تتخطّى.


في الدرس الجاي: رح نبلش فعلياً — أمر الإغلاق (Close Command)، وأول سطر كود إلك بالكورس.

يلا، نلتقي بالدرس الجاي!