في عالم أتمتة الاختبارات، يُعد نمط Page Object Model (POM) أساسياً لإنشاء اختبارات آلية قوية وقابلة للصيانة وقابلة للتوسع. وقد نشأ نمط POM من مجتمع Selenium، وأصبح ممارسة مثلى معتمدة على نطاق واسع عبر مختلف أطر وأدوات أتمتة الاختبارات لاختبار واجهات المستخدم، بما في ذلك واجهات HMI.

ما هو نموذج كائن الصفحة؟

في جوهره، يُعد نموذج كائن الصفحة (Page Object Model) نمط تصميم يعزز تغليف عناصر صفحة الويب وتفاعلاتها ضمن كائنات صفحات مخصصة. تعمل كائنات الصفحات هذه كطبقة تجريد بين كود أتمتة الاختبار وواجهة المستخدم (UI) للتطبيق. ومن خلال تمثيل كل صفحة أو مكوّن في التطبيق ككائن صفحة، يمكن للمختبرين كتابة اختبارات آلية أكثر قابلية للقراءة والوحدات والصيانة.

Page Object Model diagram

المبادئ الأساسية لنموذج كائن الصفحة

  • التغليفكائنات الصفحة (Page Objects) تغلّف بنية وسلوك صفحات الويب أو مكونات واجهة المستخدم، وتخفي تفاصيل التنفيذ عن نصوص الاختبار. وهذا يعزز إعادة استخدام الكود ويقلل من تكراره.
  • التجريدتعمل كائنات الصفحة (Page Objects) على تجريد تعقيدات واجهة المستخدم الأساسية، مما يوفر واجهة مبسطة ومتسقة لأتمتة الاختبارات. تتفاعل نصوص الاختبار مع كائنات الصفحة باستخدام أساليب عالية المستوى، بدلاً من التعامل المباشر مع عناصر واجهة المستخدم.
  • فصل الاهتماماتيعزز نموذج كائن الصفحة (Page Object Model) الفصل الواضح بين منطق الاختبار وتفاعلات واجهة المستخدم. تركز نصوص الاختبار على تحديد سيناريوهات الاختبار والتحقق من النتائج، بينما يتولى نموذج كائن الصفحة التعامل مع تفاصيل التفاعل مع واجهة المستخدم.

نموذج كائن الصفحة على مثال واجهة الإنسان والآلة

لنستخدم النظرية في التطبيق العملي ونحلل مثال واجهة الإنسان والآلة كما هو موضح أدناه.

yacht control HMI

في البداية، دعونا نجرد عناصر واجهة المستخدم. يمكن تجميع بعضها كمكوّنات صفحة، بينما يمكن أن يقف بعضها الآخر بمفرده ككائنات صفحة. ونظرًا للعدد الكبير من العناصر على الشاشة، دعونا نقسّم مكوّنات HMI. ينبغي أن يوجد كل كائن صفحة في ملفه الخاص، يحتوي على تفاصيل الكود الخاصة بجزء معين أو مكوّن معين من التطبيق المعروض في الصورة. وبينما سيكون التنفيذ أساسيًا، فإنه يقدم مثالًا على كيفية البدء في إنشاء كائنات الصفحة لتطبيقنا.

yacht control HMI components

كما لوحظ، يركز التطبيق على التحكم في اليخوت. لنبدأ بالمكوّن المركزي الذي يعرض معلومات اليخت. يتضمن البوصلة مع الاتجاه، ومقياس السرعة، ومقياس الوقود، وموضع صفيحة التوازن للقارب، وحالة كفاءة المحرك، والتنبيهات والعمق، وكلها مغلفة في YachtInfoPageObject.

HMI page object model source code

على جانبي المكوّن المركزي، نجد مكونات مماثلة تمثل المحركين الأيمن والأيسر. وعلى الرغم من مشاركة معلومات متشابهة، ينبغي التعامل مع كل مكوّن محرك على حدة، بما في ذلك تفاصيل مثل ضغط الزيت ودرجة الحرارة، وحالة البطارية، وعدد دورات المحرك في الدقيقة، وساعات تشغيل المحرك.

في الزاوية العلوية اليسرى، يعرض مكوّن الطقس حالة الطقس ومعلومات اتجاه الرياح وسرعتها، التي يلتقطها WeatherPageObject.

في أعلى المنتصف، توجد مشغّل موسيقى يتضمن عناصر التحكم في التشغيل، ومعلومات المقطع، وصورة الألبوم، وشريط التقدم، مع إدارة رفع/خفض مستوى الصوت بواسطة MusicPlayerPageObject.

أخيرًا، يعرض العنصر العلوي في واجهة المستخدم الوقت والتاريخ المغلفين في TimeAndDatePageObject.

في الزاويتين اليمنى واليسرى السفليتين توجد عناصر التحكم في علامتي التبويب اليسرى (Port) واليمنى (Starboard). تشير كل منهما إلى موضع التبويب وتتيح للمستخدم خفض أو رفع المقدمة المعنية. يتم تمثيل كلتيهما في كائنات صفحة منفصلة تُسمى PortTabPageObject وStarboardTabPageObject.

في الأسفل، تتيح قائمة بثلاثة أزرار للمستخدمين التبديل إلى عرض لوحة المعلومات والتنقل والوصول إلى الإعدادات. يتم تمثيل هذه القائمة بواسطة MenuPageObject.

يوضح هذا المثال كيف يمكن استخدام نمط نموذج كائن الصفحة (Page Object Model) لتعريف كائنات الصفحة لاستخدامها في الاختبارات. لاستكشاف مثال شامل ومعرفة المزيد عن العملية، فكّر في التسجيل في دورة Qt Academy، نموذج كائن الصفحة في Squish.

فوائد استخدام نموذج كائن الصفحة

  • قابلية إعادة استخدام الكود: يمكن إعادة استخدام كائنات الصفحة عبر نصوص اختبارية متعددة، مما يعزز التصميم المعياري للاختبارات ويقلل التكرار.
  • قابلية صيانة الشيفرة: يمكن حصر التغييرات في واجهة المستخدم داخل كائنات الصفحة، مما يقلل من تأثيرها على نصوص الاختبار ويبسط جهود الصيانة.
  • تحسين قابلية القراءة: تصبح نصوص الاختبار أكثر قابلية للقراءة والفهم حيث يتم تجريد تفاعلات واجهة المستخدم إلى طرق داخل كائنات الصفحة.
  • تحسين قابلية التوسع: يتيح الهيكل المعياري لكائنات الصفحة (Page Objects) توسيع جهود أتمتة الاختبارات بسهولة مع تطور التطبيق.
  • زيادة تغطية الاختباراتباستخدام Page Objects، يمكن للمختبرين التركيز على كتابة نصوص اختبار عالية المستوى تتفاعل مع واجهة مستخدم التطبيق على مستوى وظيفي، مما يتيح تغطية اختبارية شاملة.

أفضل الممارسات لتنفيذ نموذج كائن الصفحة

  • إنشاء كائنات الصفحة لكل مكوّن من مكونات واجهة المستخدم: قسّم صفحات الويب أو مكونات واجهة المستخدم إلى كائنات صفحة أصغر وقابلة للإدارة، يمثل كل منها منطقة مميزة من واجهة المستخدم.
  • استخدم أسماء طرق وصفية: حدّد أسماء طرق واضحة ووصفية داخل كائنات الصفحة لتسهيل الفهم والاستخدام من قبل كتّاب نصوص الاختبار.
  • تقليل التبعيات: حافظ على استقلالية كائنات الصفحة عن بعضها البعض لتجنب الارتباط الوثيق وتقليل مخاطر التغييرات المتتالية.
  • تحديث كائنات الصفحة بشكل استباقي: راجع كائنات الصفحة وحدّثها بانتظام لتعكس التغييرات في واجهة المستخدم للتطبيق، مما يضمن بقاءها دقيقة ومحدثة.
  • الاستفادة من وراثة كائن الصفحة: استخدم الوراثة لتوسيع كائنات الصفحات وتعزيز إعادة استخدام الكود للوظائف المشتركة عبر صفحات أو مكونات متعددة.

الخلاصة

يوفر نمط Page Object Model نهجاً منظماً وفعالاً لأتمتة الاختبارات، مما يمكّن الفرق من بناء مجموعات اختبار آلية قابلة للصيانة والتوسع. ومن خلال تغليف تفاعلات واجهة المستخدم داخل كائنات Page Objects مخصصة، يمكن للمختبرين كتابة نصوص اختبارية أكثر قابلية للقراءة والوحدات والصيانة، مما يؤدي إلى تحسين الكفاءة والموثوقية في مساعي اختبار البرمجيات.

وخلاصة القول، فإن إتقان نمط كائن الصفحة (Page Object Model) أمرٌ ضروري لكل مهندس أتمتة اختبارات يسعى إلى الارتقاء بجهوده في الاختبار وتسليم برمجيات عالية الجودة بثقة.

سجّل في دورة لمعرفة المزيد

إذا كنت ترغب في التعمق أكثر في التنفيذ العملي لنمط كائن الصفحة (Page Object Model) في أتمتة الاختبارات، ففكر في التسجيل في دورتنا "Page Object Model in Squish". فهي مصممة لتزويدك بإرشادات عملية خطوة بخطوة حول تنفيذ نمط كائن الصفحة بفعالية داخل Qt Squish إطار العمل.

اكتسب خبرة عملية وأتقن التقنيات اللازمة للاستفادة الفعالة من قوة Page Objects في مشاريع أتمتة الاختبارات الخاصة بك. انقر هنا لمعرفة المزيد والانضمام إلى الدورة اليوم!