أسئلة مقابلة Selenium
بقلم Aaron Cao · آخر تحديث

تركز مقابلات Selenium على wait والمحددات و Page Object Model وسبب تحول الاختبارات إلى flaky. توقع أن تشرح implicit مقابل explicit wait، وأن تختار CSS بدلاً من XPath وتدافع عن ذلك، وأن تحل خطأ stale element، وأن تصف كيف يعمل الإطار الخاص بك بالتوازي.
ماذا يسأل القائمون على المقابلات عن wait والمحددات؟
كتبت اختبارات تنجح محلياً وتفشل في الـpipeline، وتشك أن الإجابة تتعلق بـwait دون أن تستطيع صياغتها بوضوح. القائمون على المقابلات يعرفون هذا، ولهذا يفتتح wait معظم جولات Selenium. يوضح هذا القسم كيف تبدو الإجابة الكاملة.
- implicit مقابل explicit wait. implicit wait هو إعداد عام يفحص وجود العنصر في كل عملية بحث. أما explicit wait فيستهدف عنصراً واحداً وشرطاً واحداً، مثل clickable أو visible. يُفضَّل explicit لأنه يوضح بالضبط ما تنتظره.
- لماذا لا ينبغي مزجهما؟ الجمع بين الاثنين قد يراكم مهلات timeout بطريقة يصعب توقعها، ولهذا تضبط معظم الفرق implicit wait على صفر وتستخدم explicit wait في كل مكان.
- ما هو fluent wait؟ explicit wait بفاصل polling قابل للتهيئة وأنواع exception يتم تجاهلها.
- لماذا يُعد
Thread.sleepخاطئاً؟ إنه غير مشروط. يبطئ اختباراً كان سينجح ويظل يترك اختباراً بطيئاً يفشل. - محدد CSS أم XPath؟ فضّل خاصية معرّف اختبار ثابتة، ثم CSS من أجل القابلية للقراءة. يستحق XPath مكانه عندما تحتاج للصعود إلى عنصر أصل أو المطابقة حسب النص.
- ما الذي يجعل المحدد هشاً؟ أسماء classes مولّدة تلقائياً، وXPath مطلق، والاختيار المعتمد على index. اذكر ما كنت ستطلب من المطور إضافته بدلاً من ذلك.
يستمع القائمون على المقابلات إلى السبب وراء كل خيار. ذكر تفضيل دون تكلفته يبدو كإجابة محفوظة.
كيف تجيب عن أسئلة الـexception وعدم الاستقرار؟
الاختبارات flaky هي الموضوع الحقيقي لمعظم مقابلات الأتمتة للمستوى senior، لأن مجموعة اختبارات لا يثق بها أحد أسوأ من عدم وجود مجموعة أصلاً.
- ما الذي يسبب
StaleElementReferenceException؟ يشير مرجع العنصر إلى عقدة لم تعد مرتبطة، عادة لأن الإطار أعاد رسم ذلك الجزء من الصفحة. أعد البحث عن العنصر بدلاً من إعادة استخدام المرجع المخزَّن. - وماذا عن
ElementNotInteractableException؟ العنصر موجود لكن لا يمكن التفاعل معه: مخفي، أو disabled، أو مغطى بـoverlay، أو خارج الشاشة. - كيف تتعامل مع
NoSuchElementException؟ ميّز بين مشكلة توقيت وعنصر غائب فعلاً، ولا تخفِ ذلك بـsleep أطول. - لماذا تفشل الاختبارات في الـpipeline فقط؟ حجم viewport مختلف، بيئة أبطأ، بيانات اختبار مفقودة، رسوم متحركة تنتهي لاحقاً، واختبارات متوازية تتصادم على حالة مشتركة.
- كيف تصلح اختباراً flaky؟ شخّص الفئة أولاً، ثم أصلح السبب. auto-retry يخفي الإخفاقات وهو ملاذ أخير يجب أن تسميه على هذا النحو.
- كيف تتعامل مع frames والنوافذ الجديدة والتنبيهات؟ بتبديل السياق بشكل صريح، والعودة إليه بعد ذلك.
سُئل مهندس QA كان يُقابَل لدور أتمتة من مستوى متوسط عن سبب فشل مجموعة اختبارات مرتين أسبوعياً دون أي تغيير في الكود. لم تكن الإجابة الناجحة تفصيلاً في API الخاص بـSelenium، بل أن الاختبارات تشارك حساباً واحداً seeded وتتسابق مع بعضها. يكافئ القائمون على المقابلات هذا الترتيب التشخيصي: البيئة والبيانات أولاً، ثم API.
مزيد من بنوك الأسئلة حسب الدور والأداة تجدها تحت interview questions by role.
ما أسئلة الإطار والبنية التي تظهر؟
بخلاف API، تريد اللجنة معرفة ما إذا كنت قادراً على امتلاك مجموعة اختبارات. تحمل هذه الأسئلة أكبر وزن للأدوار senior.
- اشرح Page Object Model. تكشف page classes الإجراءات وتخفي المحددات، بحيث يمس تغيير الواجهة ملفاً واحداً فقط. اذكر المشكلة التي يحلها؛ فوصف بنية المجلدات فقط يفوّت الفكرة.
- ما الذي قد يسوء مع Page Objects؟ تنمو لتصبح classes بآلاف الأسطر وتبدأ في عمل assert داخل page methods. ينتمي الـassertions إلى الاختبارات.
- كيف يشغّل إطارك الاختبارات بالتوازي؟ إدارة driver آمنة للـthread بحيث لا تُشارَك instances بين threads، إضافة إلى بيانات اختبار مستقلة لكل اختبار.
- ما فائدة Selenium Grid؟ توزيع الاختبارات عبر أجهزة وإصدارات متصفح، مع hub وnodes، أو مزوّد سحابي يؤدي نفس الدور.
- ما الذي تغيّر في Selenium 4؟ أصبح بروتوكول W3C WebDriver هو المعيار، وأُزيل JSON wire protocol القديم، ووصلت relative locators، وكُشف الوصول إلى Chrome DevTools Protocol.
- متى لا تستخدم Selenium؟ فحوصات على مستوى API، ومنطق يمكن اختباره بـunit test، وأي شيء خارج المتصفح. معرفة هذا الحد إشارة إلى مستوى senior.
- كيف تقرر ما تؤتمته؟ مسارات مستقرة وعالية القيمة ومتكررة. ليس كل شيء، وليس شاشة ما زالت قيد إعادة التصميم.
كيف يجب أن تتدرب قبل المقابلة؟
إجابات Selenium سهلة المعرفة بشكل غير معتاد وصعبة القول. سؤال wait تحديداً له إجابة من جزأين، التعريف والسبب، والمرشحون الذين قرؤوه فقط يقدمون النصف الأول ثم يتوقفون.
خذ الأسئلة الخمسة هنا التي تقل رغبتك في مواجهتها وأجب عن كل واحدة بصوت عالٍ في تسعين ثانية دون فتح أي محرر. ثم اجعل شخصاً ما يطرح سؤال المتابعة، الذي يكاد يكون دائماً لماذا. تشغيل نفس الأسئلة أمام مقابل ذكاء اصطناعي يدفع للمزيد أقرب إلى جولة حقيقية من إعادة قراءة قائمة، ولهذا بالضبط توجد وضعية mock interview.
بنى Aaron Cao، مؤسس SubcueAI، هذا التدريب حول فجوة الكلام تلك بدلاً من حول توفير مزيد من الأسئلة. في مقابلة مباشرة، يمكن لتطبيق سطح المكتب ولـSide Panel الخاص بامتداد المتصفح إظهار البنية بينما يتحدث القائم على المقابلة، وهو ما يساعد أكثر على مادة تدربت عليها بالفعل. ما يفعله المنتج، والحدود التي لا يتجاوزها، موضحة في صفحة security.