تحقق من وجود العنصر وانتظر الأمر Selenium
⚡ ملخص ذكي
تحقق من وجود العنصر وانتظر الأوامر في Selenium تقوم بيئة التطوير المتكاملة (IDE) بالتأكد من أن الصفحة تحتوي على العناصر والنصوص التي يتوقعها الاختبار، وتوقف التشغيل مؤقتًا حتى يصبح شرط ديناميكي صحيحًا قبل تشغيل الخطوة التالية.
مسجل Selenium IDE يقوم البرنامج النصي بالنقر والكتابة، لكنه لا يقرر من تلقاء نفسه ما إذا كان التطبيق قد تصرف بشكل صحيح أم لا. تقوم مجموعتان من الأوامر بهذه المهمة: تحقق من الأوامر التي تتحقق من حالة الصفحة، و انتظر الأوامر، التي توقف التنفيذ حتى تصبح الصفحة جاهزة للفحص.
⚠️ ملاحظة حول الإصدارات: لقطات الشاشة أدناه مأخوذة من النسخة الأصلية Firefox-توصيل في Selenium بيئة التطوير المتكاملة (IDE) التي لم تعد تُوزع، ويستخدمون أسماءها المكتوبة بأسلوب CamelCase Selenese. بيئة التطوير المتكاملة الحالية هي Chrome. Firefox والحافة ملحق المستعرضلا يزال السلوك الموصوف هنا ساريًا، ولكن تغيرت أسماء العديد من الأوامر - الخريطةping يظهر الجدول لاحقًا في هذه المقالة، ويتم الاحتفاظ بكل أمر أصلي ولقطة شاشة تمامًا كما تم نشرها.
التحقق من وجود عنصر
يمكننا استخدام الأمرين التاليين للتحقق من وجود عنصر:
- VerelementPresent - يعود TRUE إذا تم العثور على العنصر المحدد في الصفحة؛ FALSE إذا كان الأمر خلاف ذلك
- checkElementNotPresent – إرجاع TRUE إذا لم يتم العثور على العنصر المحدد في أي مكان في الصفحة؛ خطأ إذا كان موجودا.
يأخذ كلا الأمرين عنصرًا لتحديد المواقع في Target حقل - معرف، أو اسم، أو مُحدِّد CSS، أو نص رابط، أو كسباث التعبير — ولا يحتاج أي منهما إلى قيمة.
يتحقق البرنامج النصي للاختبار أدناه من وجود مربع نص اسم المستخدم داخل Mercury الصفحة الرئيسية للجولات السياحية بينما لا يوجد مربع نص الاسم الأول. مربع نص الاسم الأول هو في الواقع عنصر موجود في صفحة التسجيل في Mercury جولات، وليس في الصفحة الرئيسية.
لأن هؤلاء هم تحقق من الأوامر بدلاً من يجزم عند تنفيذ الأوامر، يُسجل الفشل في سجل النظام، وتستمر الخطوات المتبقية في التنفيذ. سيتم شرح هذا الفرق بالتفصيل لاحقًا.
التحقق من وجود نص معين في الأمر Selenium
لا يكفي دائمًا التحقق من وجود عنصر ما، فغالبًا ما يتطلب الاختبار تأكيد الكلمات المعروضة للمستخدم. ويغطي أمران نصيان هذه الحالة.
- checkTextPresent - يعود TRUE إذا تم العثور على سلسلة النص المحددة في مكان ما في الصفحة؛ FALSE إذا كان الأمر خلاف ذلك
- checkTextNotPresent – إرجاع TRUE إذا لم يتم العثور على السلسلة النصية المحددة في أي مكان في الصفحة؛ خطأ إذا تم العثور عليه
تذكر أن هذه الأوامر حساسة لحالة الأحرف.
يُظهر السجل أدناه نفس الصفحة التي تم فحصها مرتين باستخدام تهجئتين مختلفتين لنفس العبارة.
في السيناريو أعلاه، تم التعامل مع عبارة "Atlanta to Las Vegas" بشكل مختلف عن عبارة "atlanta to Las Vegas" لأن حرف "A" في كلمة "Atlanta" كان كبيرًا في الأولى وصغيرًا في الثانية. عند استخدام أمر verifyTextPresent على كلتيهما، نجحت إحداهما بينما فشلت الأخرى.
التحقق من الموضع المحدد للعنصر
نادراً ما تتسبب عيوب التخطيط في تعطيل محدد الموقع، لذا فإن عمليات التحقق من الوجود لا تكتشفها. وتعمل أوامر تحديد الموضع على سد هذه الثغرة.
Selenium يشير IDE إلى موضع العنصر عن طريق قياس (بالبكسل) مدى بعده عن الحافة اليسرى أو العلوية لنافذة المتصفح.
- VereElementPositionLeft - التحقق مما إذا كان العدد المحدد من وحدات البكسل يتطابق مع مسافة العنصر من الحافة اليسرى للصفحة. سيُرجع هذا خطأ إذا كانت القيمة المحددة لا تتطابق مع المسافة من الحافة اليسرى.
- التحقق من موضع العنصر في الأعلى – التحقق مما إذا كان العدد المحدد من وحدات البكسل يتطابق مع مسافة العنصر من الحافة العلوية للصفحة. سيُرجع هذا خطأ إذا كانت القيمة المحددة لا تتطابق مع المسافة من الحافة العلوية.
يسجل النص البرمجي أدناه إزاحات البكسل المتوقعة في عمود القيمة.
تعامل مع هذين الأمرين بحذر. يتغير مقدار الإزاحة بالبكسل بتغير حجم النافذة ومستوى التكبير/التصغير والخطوط المثبتة، لذا فإن قيمة ثابتة تنجح على جهاز ما قد تفشل على جهاز آخر.
انتظر الأوامر في Selenium
لا يمكن لأمر التحقق فحص سوى ما هو معروض على الشاشة، لذا فإن أي فحص يُجرى مبكرًا جدًا سيفشل حتى لو كان التطبيق يعمل. أما أوامر الانتظار فتحل مشكلة التوقيت هذه.
فيما يلي أنواع أوامر الانتظار في Selenium
وأوامر الانتظار
هذه هي الأوامر التي ستنتظر تحميل صفحة جديدة قبل الانتقال إلى الأمر التالي.
ومن الأمثلة على ذلك
- انقر وانتظر
- typeAndWait
- حدد وانتظر
كل واحد منها عبارة عن أمر إجراء عادي مع إضافة لاحقة AndWait، كما توضح الخطوة المسجلة أدناه.
انتظر الأوامر
هذه هي الأوامر التي تنتظر حتى يصبح الشرط المحدد صحيحًا قبل المتابعة إلى الأمر التالي (بغض النظر عن تحميل صفحة جديدة). تعد هذه الأوامر أكثر ملاءمة للاستخدام على مواقع الويب الديناميكية المستندة إلى AJAX والتي تغير القيم والعناصر دون إعادة تحميل الصفحة بأكملها. الامثله تشمل:
- waitForTitle
- waitForTextPresent
- waitForAlert
خذ بعين الاعتبار سيناريو الفيسبوك أدناه.
يمكننا استخدام مزيج من "النقر" و"waitForTextPresent" للتحقق من وجود النص "توفير عيد ميلادك".
لا يمكننا استخدام clickAndWait لأنه لم يتم تحميل أي صفحة عند النقر على "لماذا أحتاج إلى تقديم تاريخ ميلادي؟" وصلة. إذا فعلنا ذلك، فسوف يفشل الاختبار
وينطبق نفس المبدأ على أي محتوى يتم إدخاله بواسطة البرامج النصية بدلاً من التنقل، ولهذا السبب شاشات تعمل بتقنية AJAX نحتاج دائمًا تقريبًا إلى استخدام waitFor بدلاً من andWait.
أوامر Assert و Verify و waitFor في Selenium IDE
غالباً ما يختار المبتدئون العائلة الخاطئة ثم يتساءلون لماذا تتوقف المجموعة عند أول عيب، أو لماذا تُبلغ عن عشرين عطلاً جميعها tracنعود إلى واحد. تجيب البادئات الثلاث على ثلاثة أسئلة مختلفة.
| بادئة | ماذا يفعل | في حالة الفشل | أفضل يستخدم لـ |
|---|---|---|---|
| يجزم | يفحص الحالة على الفور | يسجل الفشل ويوقف حالة الاختبار | الشروط المسبقة - عملية تسجيل دخول يجب أن تنجح قبل أن يصبح أي شيء آخر منطقيًا |
| تحقق من | يفحص الحالة على الفور | يسجل الفشل ويتابع تنفيذ الأمر التالي | عمليات التحقق المستقلة، مثل وجود عدة ملصقات على صفحة تأكيد واحدة |
| انتظر | استطلاعات الرأي حتى يتحقق الشرط | يسجل الفشل بمجرد انتهاء المهلة، ثم يتابع. | أي شيء يظهر متأخراً - استجابات AJAX، ومؤشرات التحميل، والحوارات |
يجمع نمط عملي بين العناصر الثلاثة: التحقق من الصفحة التي وصلت إليها، وانتظار العنصر الذي يصل بشكل غير متزامن، ثم التحقق من كل حقل على حدة. يؤدي القيام بذلك بهذا الترتيب إلى إيقاف الاختبار مبكرًا في حالة وجود خلل في التنقل، بينما يتم الإبلاغ عن عدد قليل من حالات عدم التطابق الشكلية في تشغيل واحد. وينطبق نفس المبدأ على Selenium الاختبارات المكتوبة بلغة البرمجة، حيث تكون المكافئات هي التأكيدات الصارمة والتأكيدات المرنة والانتظارات الصريحة.
أوامر التحقق والانتظار في الوضع الحالي Selenium IDE
استخدم Firefoxتم إيقاف دعم إضافة IDE التي أنتجت لقطات الشاشة أعلاه، وأُعيد بناء مجموعة الأوامر لتتوافق مع إضافة المتصفح الحالية. وقد بقيت بعض الأسماء من لغة سيلين، بينما أُعيد تسمية بعضها الآخر، وحُذف عدد قليل منها. يوضح الجدول أدناه العلاقة بين الأوامر المستخدمة في هذه المقالة وما يقابلها في الوقت الحاضر، والمأخوذة من المصدر الرسمي. Selenium مرجع أوامر بيئة التطوير المتكاملة.
| أمر سيليني قديم | الأمر في بيئة التطوير المتكاملة الحالية |
|---|---|
| VerelementPresent | التحقق من وجود العنصر |
| checkElementNotPresent | تم التحقق من عدم وجود العنصر |
| checkTextPresent | التحقق من النص (ضمن نطاق محدد العنصر، وليس الصفحة بأكملها) |
| checkTextNotPresent | التحقق من عدم وجود نص (ضمن نطاق محدد العنصر) |
| تحقق من العنوان | تحقق من العنوان |
| verifyElementPositionLeft / verifyElementPositionTop | لا يوجد ما يعادل ذلك - تم إسقاط تأكيدات الموقف |
| انقر وانتظر، اكتب وانتظر، حدد وانتظر | لا يوجد لاحقة AndWait — أمر الفتح ينتظر بالفعل تحميل الصفحة |
| waitForElementPresent | انتظر حتى يظهر العنصر، مع وقت انتظار بالمللي ثانية |
| waitForAlert | تأكيد التنبيه أو التحقق من نص التنبيه بعد ظهور مربع الحوار |
هناك فرقان رئيسيان يؤثران بشكل كبير على العمل اليومي. أولاً، أوامر الانتظار الحالية - مثل انتظار وجود العنصر، وانتظار ظهور العنصر، وانتظار إمكانية تحرير العنصر، وما يقابلها من أوامر سلبية - تتطلب كل منها مدة انتظار محددة بالمللي ثانية، لذا لم تعد الخطوات البطيئة تعتمد على مهلة زمنية عامة واحدة. ثانياً، تم الاستغناء عن البحث النصي على مستوى الصفحة: فالتحقق من النص يتطلب مُحدد موقع، وهو ما يُنتج عادةً فحصاً أدق.
الأخطاء الشائعة في أوامر التحقق والانتظار
معظم المشاكل المُبلغ عنها مع هذه الأوامر ليست عيوبًا في بيئة التطوير المتكاملة (IDE). تتضمن القائمة أدناه الأخطاء الأكثر شيوعًا وكيفية إصلاح كل منها.
- العنصر موجود ولكن الفحص لا يزال يفشل. الوجود والرؤية حالتان مختلفتان. العنصر المخفي خلف قاعدة CSS يظل موجودًا في DOM، لذا يجب ربط فحص الوجود بانتظار ظهور العنصر عندما يعتمد الاختبار على رؤية المستخدم له فعليًا.
- يفشل فحص النص عند وجود عبارات تبدو متطابقة. المسافات غير القابلة للكسر، والمسافات البيضاء الزائدة، وعلامات الترقيم المائلة المنسوخة من مستند تصميم، كلها تُفسد التطابق التام. أعد كتابة النص المطلوب يدويًا بدلًا من لصقه.
- أمر الانتظار ينتهي بمهلة زمنية على صفحة تم تحميلها بوضوح. عادةً ما يكون العنصر داخل إطار iframe. قم بتشغيل الأمر select frame أولاً، وإلا سيتم تقييم المحدد على المستند الخاطئ.
- تطبيق clickAndWait يتوقف عند صفحة واحدة. لا يحدث أي تنقل، لذا لا يوجد ما يستدعي الانتظار. استبدل ذلك بنقرة متبوعة بأمر الانتظار المناسب.
- ينجح فحص الموقع محليًا ويفشل على خادم البناء. يختلف حجم الشاشة وعرض الخطوط. يُفضّل استخدام فحص وجود العناصر أو فحص النص، أو تحديد حجم نافذة صريح في بداية الاختبار.
- تتوقف المجموعة بأكملها عند أول اختلاف. تم تسجيل أمر تأكيد في مكان كان من المفترض أن يكون أمر تحقق. قم بتغيير البادئة وسيقوم البرنامج بالإبلاغ عن كل فشل بدلاً من الفشل الأول فقط.
بمجرد أن ينجو البرنامج النصي من هذه الفخاخ، فإن الخطوة التالية عادة ما تكون قم بتخزين قيم وقت التشغيل في متغيرات لذا فإن عمليات التحقق تقارن بالبيانات الحقيقية بدلاً من السلاسل النصية المضمنة في الكود.






