متغيرات المتجر، الصدى، التنبيه، التعامل مع النوافذ المنبثقة Selenium IDE

⚡ ملخص ذكي

قم بتخزين الأوامر في Selenium تقوم بيئة التطوير المتكاملة بحفظ قيم وقت التشغيل في متغيرات مسماة، وتطبعها أداة echo في السجل، وتتعامل مجموعة أوامر مخصصة مع التنبيهات ومربعات حوار التأكيد والتبديل بين نوافذ المتصفح المتعددة.

  • 🔘 أنشئ متغيرًا: يأخذ أمر التخزين القيمة في Target واسم المتغير في القيمة.
  • ☑️ اقرأها مرة أخرى: ضع الاسم بين علامتي ${ } أينما يقبل الأمر هدفًا أو قيمة.
  • ✅ طباعة لأغراض تصحيح الأخطاء: يقوم الأمر echo بكتابة سلسلة نصية حرفية أو متغير مباشرة في سجل بيئة التطوير المتكاملة (IDE).
  • 🧪 يتم قبول التنبيهات تلقائيًا: يقوم برنامج IDE بالنقر على "موافق" نيابةً عنك، لذا استخدم storeAlert لالتقاط نص الرسالة.
  • 🛠️ التأكيدات تحتاج إلى قرار: ضع الأمر chooseOkOnNextConfirmation قبل الأمر الذي يفتح مربع الحوار.
  • 📊 تبديل النوافذ: يستهدف selectWindow عنوان النافذة، ويعيد الهدف الفارغ إلى النافذة الأصلية.

تخزين المتغيرات، ومعالجة الصدى، والتنبيهات، والنوافذ المنبثقة في Selenium IDE

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

⚠️ ملاحظة حول الإصدارات: لقطات الشاشة أدناه مأخوذة من النسخة الأصلية Firefox-توصيل في Selenium بيئة التطوير المتكاملة (IDE)، وتستخدم الأوامر أسماءها المكتوبة بأسلوب CamelCase Selenese. متصفح Chrome الحالي، Firefox ويحافظ امتداد Edge على نفس السلوك، لكنه يكتب معظم أسماء الأوامر بمسافات. خريطةping يظهر الجدول قرب نهاية هذه المقالة، وتم الحفاظ على كل أمر أصلي ولقطة شاشة كما تم نشرها.

Selenium متغيرات IDE

المتجر

لتخزين المتغيرات في Selenium بيئة التطوير المتكاملة (IDE)، نستخدم متجر الأمر. يوضح الرسم التوضيحي أدناه كيفية تخزين القيمة "tutorial" في متغير يسمى "myVariable".

Selenium شرح كيفية حفظ أمر التخزين في بيئة التطوير المتكاملة (IDE) مع القيمة المحفوظة في متغير myVariable

للوصول إلى المتغير، ما عليك سوى وضعه بين الرمز ${ … }. على سبيل المثال، لإدخال قيمة "myVariable" في مربع نص "userName" الخاص بـ Mercury الجولات، أدخل ${myVariable} في حقل القيمة.

Selenium اكتب الأمر باستخدام ${myVariable} في حقل القيمة الخاص بمربع نص اسم المستخدم في بيئة التطوير المتكاملة (IDE).

أمر الصدى في Selenium IDE

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

يقبل الأمر كلا الشكلين التاليين:

  • سلسلة نصية حرفية. ضع النص في Target على سبيل المثال، الحقل اكتملت عملية تسجيل الدخول، لتحديد نقطة تفتيش في نص طويل.
  • متغير. ضع ${myVariable} في Target يتم طباعة الحقل والقيمة المخزنة بدلاً من الاسم.

هناك عادتان تجعلان أداة echo أكثر فائدة مما تبدو عليه للوهلة الأولى. اطبع المتغير مباشرةً بعد أمر store الذي أنشأه، حتى يكون الفشل واضحًا. tracيُضاف الأمر ed إلى عملية الالتقاط بدلاً من التأكيد بعد عشرين خطوة. ويُضاف إلى كل رسالة اسم الخطوة التي تنتمي إليها، لأن لوحة السجل تعرض جميع الأوامر في قائمة واحدة. لاحظ أن الأمر echo يكتب فقط في السجل - فهو لا يُغير الصفحة أبدًا ولا يفشل في أي اختبار، لذا من الآمن تركه في البرنامج النصي بشكل دائم.

StoreElementPresent

يخزن هذا الأمر إما "صحيح" أو "خطأ" بناءً على وجود العنصر المحدد. يخزن البرنامج النصي أدناه القيمة المنطقية "صحيح" في "var1" و"خطأ" في "var2". وللتحقق، سنستخدم الأمر echo لعرض قيم var1 وvar2. URL تم ضبط الرسم التوضيحي أدناه على Mercury الصفحة الرئيسية للجولات.

Selenium يقوم برنامج IDE بحفظ القيمة true في المتغير var1 والقيمة false في المتغير var2، كما هو موضح في السجل.

نص المتجر

يُستخدم هذا الأمر لتخزين النص الداخلي لعنصر ما في متغير. يوضح الرسم التوضيحي أدناه كيفية تخزين النص الداخلي لوسم h1 في صفحة التسجيل على فيسبوك في متغير يُسمى "textVar".

Selenium يقوم أمر storeText في بيئة التطوير المتكاملة (IDE) بقراءة css=h1 وتخزينه في متغير textVar.

بما أنه العنصر الوحيد من نوعه في الصفحة، فمن الآمن استخدام "css=h1" كهدف لنا. توضح الصورة أدناه ذلك. Selenium تمكن برنامج IDE من حفظ السلسلة "Sign Up" في المتغير "textVar"، لأن الأمر echo طبع قيمته بشكل صحيح.

Selenium طباعة لوحة سجلات بيئة التطوير المتكاملة (IDE) - التسجيل كقيمة مخزنة في متغير النص (textVar).

التنبيهات والنوافذ المنبثقة والمتعددة Windows

ربما تكون التنبيهات أبسط أشكال النوافذ المنبثقة. وهي الأكثر شيوعًا Selenium الأوامر IDE المستخدمة في التعامل مع التنبيهات هي التالية:

التنبيهات استخدام

assertAlert

assertNotAlert

يسترجع رسالة التنبيه ويقارنها بقيمة نصية قمت بتحديدها

AssurerAlertPresent

AssurerAlertNotPresent

يؤكد ما إذا كان هناك تنبيه أم لا
تنبيه المتجر يسترجع رسالة التنبيه ويخزنها في متغير تحدده أنت
storeAlertPresent تُرجع الدالة القيمة TRUE في حالة وجود تنبيه، والقيمة FALSE في حالة عدم وجوده.

التحقق من التنبيه

VerifyNotAlert

يسترجع رسالة التنبيه ويتحقق مما إذا كانت تساوي قيمة السلسلة التي حددتها

checkAlertPresent

checkAlertNotPresent

يتحقق مما إذا كان هناك تنبيه أم لا

تذكر هذين الأمرين عند التعامل مع التنبيهات:

  • Selenium يقوم برنامج IDE بالنقر تلقائيًا على زر "موافق" في نافذة التنبيه، لذلك لن تتمكن من رؤية التنبيه الفعلي.
  • Selenium لا يمكن لبيئة التطوير المتكاملة (IDE) التعامل مع التنبيهات التي تظهر داخل دالة onload() الخاصة بالصفحة. فهي تتعامل فقط مع التنبيهات التي يتم إنشاؤها بعد اكتمال تحميل الصفحة.

في هذا المثال، نستخدم أمر storeAlert لإظهار أنه على الرغم من Selenium لم يعرض برنامج IDE التنبيه الفعلي، ولكنه تمكن مع ذلك من استرداد الرسالة.

الخطوة 1) In Selenium بيئة التطوير المتكاملة، اضبط الأساس URL إلى http://jsbin.com. النص الكامل URL الرابط هو http://jsbin.com/usidix. تعود هذه المقتطفات البرمجية من jsbin إلى... Firefox- قد لا تعمل هذه الخاصية في عصر الإضافات؛ أي صفحة تحتوي على زر يُصدر تنبيهًا تُعيد إنتاج نفس النتيجة.

الخطوة 2) أنشئ البرنامج النصي كما هو موضح أدناه. يستهدف أمر النقر زر "انطلق!"، ويقوم storeAlert بالتقاط الرسالة في alertMessage، ثم يقوم echo بطباعتها.

Selenium نص برمجي لبيئة التطوير المتكاملة (IDE) يحتوي على أوامر النقر، وتخزين التنبيه، وطباعة التنبيهات، وذلك على صفحة عرض التنبيهات التجريبية في jsbin.

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

Selenium سجل IDE الذي يعرض نص التنبيه الذي تم استرداده بواسطة storeAlert بعد التشغيل

تأكيدات

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

  • تأكيد التأكيد / تأكيد عدم التأكيد
  • assertConfirmationPresent / assertConfirmationNotPresent
  • تأكيد المتجر
  • تأكيد المتجر موجود
  • تأكيد التأكيد / عدم التأكيد
  • verifyConfirmationPresent / verifyConfirmationNotPresent

بالإضافة إلى ذلك، تخبر هذه الأوامر Selenium أي زر يجب اختياره، موافق أم إلغاء؟

  • اختر موافق عند التأكيد التالي / اختر موافق عند التأكيد التالي وانتظر
  • اختر إلغاء عند التأكيد التالي

ضع هذه الأوامر قبل الأمر الذي يُفعّل مربع التأكيد، بحيث Selenium يعرف برنامج IDE مسبقًا الخيار الذي يجب اختياره. ومرة ​​أخرى، لن ترى مربع التأكيد الفعلي أثناء تنفيذ البرنامج النصي.

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

الخطوة 1) In Selenium بيئة التطوير المتكاملة، اضبط الأساس URL إلى http://jsbin.com. النص الكامل URL الرابط هو http://jsbin.com/enifaf.

الخطوة 2) أنشئ البرنامج النصي كما هو موضح أدناه. هذه المرة سنضغط على زر "موافق" أولاً.

Selenium يقوم برنامج IDE النصي بوضع عبارة chooseOkOnNextConfirmation قبل النقر الذي يفتح مربع الحوار

الخطوة 3) قم بتشغيل البرنامج النصي ولاحظ أنك لا ترى التأكيد الفعلي، ومع ذلك لا تزال صفحة الويب تُظهر الزر الذي تم تحديده Selenium تم الضغط على IDE.

صفحة اختبار تُفيد بأنه تم الضغط على زر "موافق" في مربع حوار التأكيد.

الخطوة 4) استبدل الأمر chooseOkOnNextConfirmation بالأمر chooseCancelOnNextConfirmation، ثم أعد تشغيل البرنامج النصي. ستظهر الصفحة الآن الخيار المعاكس.

Selenium تم تعديل نص IDE لاستخدام chooseCancelOnNextConfirmation بدلاً من chooseOkOnNextConfirmation

متعدد Windows

إذا نقرت على رابط يفتح نافذة منفصلة، ​​فيجب عليك أولاً توجيه Selenium يتطلب استخدام بيئة التطوير المتكاملة (IDE) تحديد تلك النافذة قبل الوصول إلى العناصر الموجودة بداخلها. في بيئة التطوير المتكاملة القديمة، يتم استخدام عنوان النافذة كمحدد لموقعها.

نستخدم الأمر selectWindow للتبديل بين النوافذ.

سنستخدم الرابط http://jsbin.com/ocinaj/1، وعنوانه "النافذة الأولى". سيفتح رابط "هنا" الموجود في تلك الصفحة موقع فيسبوك في نافذة جديدة، وبعد ذلك سنوجه المستخدم إلى... Selenium IDE للقيام بما يلي:

  • انقل التحكم من النافذة الأصلية إلى نافذة فيسبوك التي تم تشغيلها حديثًا باستخدام الأمر selectWindow مع عنوان النافذة كمحدد للموقع.
  • تحقق من عنوان النافذة الجديدة.
  • حدد النافذة الأصلية مرة أخرى باستخدام الأمر selectWindow مع تحديد "null" كهدف له.
  • تحقق من عنوان النافذة المحددة حاليًا.

تُترجم الخطة المذكورة أعلاه إلى التسلسل المكون من أربع خطوات الموضح هنا.

رسم تخطيطي لعملية التبديل من النافذة الأصلية إلى النافذة الجديدة والعودة مرة أخرى

الخطوة 1) تحديد الأساس URL إلى http://jsbin.com.

الخطوة 2) قم بإنشاء البرنامج النصي كما هو موضح أدناه.

Selenium نص برمجي لبيئة التطوير المتكاملة (IDE) يستخدم وظائف selectWindow و pause و verifyTitle للتنقل بين نافذتين.

نحتاج إلى أمر الإيقاف المؤقت لانتظار تحميل النافذة التي تم تشغيلها حديثًا قبل أن نتمكن من قراءة عنوانها.

الخطوة 3) تنفيذ البرنامج النصي. لاحظ أن حالة اختبار تم اجتياز الاختبار، مما يعني أننا تمكنا من التبديل بين النوافذ والتحقق من عناوينها بنجاح.

نتيجة المرور الأخضر Selenium تم التحقق من عنواني نافذتي IDE

تذكر دائمًا أن تعيين هدف selectWindow إلى "null" يحدد تلقائيًا النافذة الأصلية - في هذه الحالة النافذة التي يوجد بها العنصر "link=here".

ملاحظة: غيّر فيسبوك عنوان صفحته منذ إنشاء هذا الشرح. عدّل العنوان المتوقع في البرنامج النصي وفقًا لذلك.

بلمسة عصرية Selenium مكافئات بيئات التطوير المتكاملة لهذه الأوامر

استخدم Firefoxتم إيقاف استخدام -plugin IDE عندما Firefox تم الانتقال إلى بنية WebExtensions، ومتصفح Chrome الحالي، Firefox وقد أعاد ملحق Edge تسمية معظم أوامر Selenese إلى صيغة مفصولة بمسافات. لم يتغير السلوك، لذا فإن الجدول أدناه هو كل ما تحتاجه لقراءة النصوص البرمجية المذكورة أعلاه على التثبيت الحالي.

الأوامر القديمة في هذا البرنامج التعليمي حالياًّ Selenium أمر بيئة التطوير المتكاملة
متجر متجر
صدى صدى
storeText نص المخزن
storeElementPresent قم بتخزين العنصر الموجود (أو تأكيد وجود العنصر)
assertAlert / verifyAlert تأكيد التنبيه / التحقق من التنبيه
اختر موافق في التأكيد التالي اختر "موافق" في التأكيد التالي
اختر إلغاء عند التأكيد التالي اختر إلغاء في التأكيد التالي
selectWindow (title as target) حدد النافذة ذات المقبض ${handle}

هناك فرقان جديران بالذكر. فالمطالبات، التي لم تتناولها المقالة القديمة، أصبحت الآن تحتوي على أوامرها الخاصة: أجب على السؤال التالي يخطط للرد قبل ظهور الحوار، و يجيب برنامج تشغيل الويب على الموجه المرئي يكتب في موجه أوامر مفتوح بالفعل. ولم يعد تبديل النوافذ يعتمد على عنوان الصفحة. تشغيل مقبض نافذة المتجر لالتقاط مقبض أولاً، ثم تمريره handle=${yourHandle} لتحديد النافذة. هذا التغيير يزيل وضع الفشل الموصوف في الملاحظة أعلاه، حيث يقوم الموقع ببساطة بإعادة تسمية صفحته ويتوقف البرنامج النصي عن العثور على النافذة. الرسمي Selenium موقع مشروع بيئة التطوير المتكاملة يعرض قائمة كاملة بمجموعة الأوامر الحالية.

الأسئلة الشائعة

نعم. يشير كل من ${myVariable} و${myvariable} إلى متغيرين مختلفين، والإشارة إلى متغير لم يتم تخزينه مسبقًا تُنتج سلسلة نصية فارغة بدلًا من ظهور خطأ. لذا، يُنصح باتباع اصطلاح تسمية موحد لجميع المتغيرات لتجنب ظهور فراغات صامتة.

نعم. يتم توسيع صيغة ${ } في أي Target أو حقل القيمة، بحيث يعمل داخل أمر فتح، أو XPath، أو مُحدِّد CSS. هكذا يتم تحويل نص برمجي مُسجَّل إلى نص برمجي مُعتمد على البيانات التي تم جمعها مُسبقًا أثناء التشغيل.

لا تحتوي لغة سيلينيز على عوامل حسابية. استخدم أمر تنفيذ البرنامج النصي مع قيمة صغيرة Javaتعبير برمجي يقرأ المتغير ويعيد النتيجة، ثم يخزن تلك القيمة المُعادة. تذكر أن كل قيمة مخزنة تصل كسلسلة نصية، لذا قم بتحويلها أولاً.

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

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

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

نعم. قم بتصدير الاختبار إلى Java or Pythonثم دع Copilot يُعيد هيكلة قائمة الأوامر المسطحة إلى كائنات صفحات وانتظارات قابلة لإعادة الاستخدام. تحقق من معالجة التنبيهات يدويًا، لأن الكود المُولّد غالبًا ما يفترض وجود مربع حوار مرئي أغلقه مُحرر الأكواد بالفعل.

يصبح التحديد بناءً على العنوان غامضًا، وقد يتم اختيار النافذة الخاطئة. لهذا السبب تحديدًا، يُفضل بيئة التطوير المتكاملة الحالية استخدام المقابض: حيث يتم التقاط مقبض النافذة وتخزينه مباشرةً بعد فتحها، ثم التبديل إليه باستخدام handle=${yourHandle}.

تلخيص هذه التدوينة بـ: