وظائف السيلينيوم مع المؤقتات

الوظيفة

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

التنبيهات

وقت التشغيل، رمز الاستجابة، رمز النتيجة

معلومات عامة عن مهمة Selenium

يمكن إنشاء مشاريع Selenium إما باستخدام RobotFramework أو لغة Python.

لجعل ملفات مشاريع Selenium متاحة على أجهزة التجميع الخارجية، يجب تكوين خدمات SKOOR syncfs وتشغيلها. يجب تكوين المستخدم reranger لتسجيل الدخول بدون كلمة مرور كما هو موضح في دليل النسخ المتماثل

RobotFramework

يتم إنشاء ملف الروبوت باستخدام الرأس الموجود في /opt/eranger/collector/robot.robot ويتم إلحاقه بالملف المقدم في المحرك. قد يرغب المستخدم في تقديم ملف روبوت كامل فقط في حالات خاصة. يُعد دليل مستخدم RobotFramework مصدرًا جيدًا للمعلومات حول الإمكانيات المتاحة. سيتم وضع ملفات الروبوت في /opt/eranger/collector/upload/

قسم المعلومات في تكوين المهمة:

يمكن استخدام ملحق Chrome أو Firefox المسمى Katalon Recorder لتسجيل إجراء الاختبار وتصدير جزء حالة الاختبار (التنسيق: Robot Framework).

أمثلة على البرامج النصية:

قد يبدو ملف الروبوت البسيط كما يلي:

    [Teardown]    Run Keyword If Test Failed    Capture Page Screenshot
    Set Window Size    ${1920}    ${1200}
	Start Timer		totalTime
	Start Timer		Open
	Goto    https://my.great.business.com/
	Stop Timer 		Open
	click	link=Business
	sleep	3s
    Stop Timer		totalTime

نص برمجي أكثر تقدمًا يحتوي على مؤقتات متعددة وكتل TRY/EXCEPT:

    Start Timer    TotalTime

    Start Timer    Open
    TRY
        Goto    https://my.great.business.com/
        Stop Timer    Open
    EXCEPT
        Capture Page Screenshot
        Error Timer     Website unavailable
        ErrorCode Timer    11
        Stop Timer    Open
    END
    
    Start Timer    Contact
    TRY
        click    link=Contact
        Stop Timer    Contact
    EXCEPT
        Capture Page Screenshot
        Error Timer     Contact link failed
        ErrorCode Timer    22
        Stop Timer    Contact
    END	
    sleep    2s

    Start Timer    Home
    TRY
        click    link=Home
        Stop Timer    Home
    EXCEPT
        Capture Page Screenshot
        Error Timer     Home link failed
        ErrorCode Timer    33
        Stop Timer    Home
    END
    sleep    2s

    Stop Timer    TotalTime

Python

يتم تثبيت وحدات Selenium و SKOOR Python الخاصة باختبار الويب باستخدام Selenium مسبقًا مع SKOOR Collectors. يمكن تطوير نصوص Python واستخدامها مع المكون الإضافي فور تطويرها. بالإضافة إلى ذلك، يمكن استخدام Selenium IDE لتسجيل حالات الاستخدام. 

قسم المعلومات في تكوين المهمة:

مثال على البرنامج النصي: أولاً، يتم استيراد الوحدات المطلوبة وتعيين معلمات المتصفح. بعد ذلك، يتم تشغيل مؤقت SKOOR totalTime ويتم تنفيذ خطوة اختبار في كتلة try/except باستخدام مؤقت ثانٍ هو step1. وبهذه الطريقة، يمكن تكوين المؤقتات واستخدامها لاحقًا في محرك SKOOR.

#!/usr/bin/python3
import sys, time, skoor, traceback
from skoor import SkoorTimer, Variables, SkoorScreenshot

from selenium import webdriver
from selenium.webdriver import Chrome
from selenium.webdriver import ChromeOptions
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

opts = ChromeOptions()
opts.add_argument("--headless=new")
opts.add_argument("--no-sandbox")
opts.add_argument("--disable-setuid-sandbox")
opts.add_argument("--disable-gpu")
opts.add_argument("--allow-running-insecure-content")
opts.add_argument("--disable-extensions")
opts.add_argument("--ignore-certificate-errors")
opts.binary_location = os.getenv("SKOOR_PUPPETEER_CHROME_EXECUTABLE")

cap = DesiredCapabilities().CHROME
cap["marionette"] = True

driver = webdriver.Chrome(chrome_options=opts)

skoor.setLogLevel(skoor.INFO)
driver.set_window_size(1920,1200)

totalTime = SkoorTimer("TotalTime")
step1 = SkoorTimer("Step 1")

totalTime.start()

try:
    step1.start()
    skoor.log(skoor.INFO, "Search started")
    driver.get("https://xyz.com")
    driver.find_element_by_id("html-element1")
    skoor.log(skoor.INFO, "Step 1 done")
    step1.stop()
        
except:
    skoor.log(skoor.ERROR, traceback.format_exc())
    SkoorScreenshot().capture(driver)
    step1.error(-2, "Step 1 failed")

totalTime.stop()
driver.quit()

skoor.log(skoor.INFO, "Script done")

إذا تم استخدام Selenium IDE لتسجيل حالة اختبار، فيمكن نسخ محتوى الدالة test_<name> إلى كتلة try في البرنامج النصي لـ Python 3:

  def test_dict(self):
    self.driver.get("https://dict.leo.org/englisch-deutsch/")
    self.driver.set_window_size(1515, 948)
    self.driver.find_element(By.LINK_TEXT, "Forum").click()

 إذا تم استخدام وحدات Python إضافية مثل by أو key بواسطة Selenium IDE، فيجب إضافة هذه الوحدات أيضًا إلى قسم الاستيراد في البرنامج النصي النهائي:

#!/usr/bin/python3
import sys, time, skoor, traceback
from skoor import SkoorTimer, Variables, SkoorScreenshot

from selenium import webdriver
from selenium.webdriver import Chrome
from selenium.webdriver import ChromeOptions
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
 
...


من المهم أن تتم معالجة عملية driver.quit() في جميع الأحوال. وإلا فسيحدث تسرب في الموارد!

جهاز Selenium

عند إنشاء جهاز Selenium، تظهر شاشة خيارات التكوين التالية:


سيتم تشغيل المكون الإضافي Selenium في متصفح بدون واجهة مستخدم مباشرةً على المجمع المحدد. 

معلمات مهمة Selenium

المعلمة

الوصف

حد وقت التشغيل

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

اسم المجموعة

إذا تم توفير ملف روبوت كامل مع "الإعدادات" وما إلى ذلك، فسيتم تنفيذه دون تعديل. عادةً ما يكون جزء "حالة الاختبار" هو المطلوب فقط. في هذه الحالة، يتم أخذ الرأس من /opt/eranger/collector/robot.robot.

خصائص Selenium

المعلمة

الوصف

خيار Selenium

يمكن تعيين تسلسلات الهروب والخيارات الأخرى بواسطة هذه الخاصية.

متغيرات سيلينيوم

يمكن تعريف المتغيرات الخاصة بملف الروبوت في هذه الخاصية مثل INFO:info أو TIMEOUT:0

تفاصيل مؤقت Selenium

بنفس الطريقة التي تُضاف بها مهام المؤقت إلى مهام مشروع EEM، يمكن إضافة مهام المؤقت أسفل مهمة السيلينيوم. المعلمة الوحيدة هي اسم المؤقت. 

تُعتبر المؤقتات التي تحتوي على إدخال بدء وإيقاف (يتم إنشاؤها إما بواسطة "إيقاف المؤقت" أو "إيقاف المؤقت مؤقتًا") ناجحة.

الكلمات الرئيسية التالية متاحة لاستخدام المؤقتات في ملف الروبوت

  • بدء المؤقت $name

  • إيقاف المؤقت مؤقتًا $name

  • استئناف المؤقت $name

  • إيقاف المؤقت $name

معلمات مؤقت Selenium

المعلمة

الوصف

اسم المؤقت

يمكن تكوين اسم المهمة واسم المؤقت فقط في مهمة مؤقت Selenium. يمكن أن يختلف اسم المهمة عن اسم المؤقت، ولكن يجب أن يتطابق اسم المؤقت مع اسم المؤقت كما هو مكتوب في ملف الروبوت.

قيم مؤقت Selenium وحدود التنبيه

القيمة / حد التنبيه

الوصف

وقت التشغيل

وقت تشغيل هذا المؤقت بالذات

رمز النتيجة

 0 = صحيح -
1 = لم يتم التشغيل - 2
= فشل
- 3 = انتهى ولكن لم يبدأ - 4
= اسم المؤقت فارغ - 5
= خطأ في Selenium

رمز الخطأ

رمز خطأ عام في المهمة (انظر قسم رموز أخطاء المهام)

نتائج Selenium

بعد تشغيل المكون الإضافي، يبدو قسم القيم في مهمة Selenium كما يلي:

أو في حالة حدوث خطأ أثناء التنفيذ:

سيؤدي النقر على رابط "ملفات النتائج" في قسم "القيم" إلى فتح علامة تبويب جديدة في المتصفح كما يلي:

تقدم هذه الصفحة نظرة عامة على الاختبارات التي تم تشغيلها ونتائجها. لكل عملية تشغيل تم فيها جمع السجلات بواسطة محرك SKOOR، يوجد سطر يحتوي على طابع زمني ورابط إلى ملف النتائج المقابل. إذا حدثت أخطاء أثناء التشغيل، فسيتم وضع الرابط في عمود «الاختبارات الفاشلة»، إلى جانب لقطة شاشة (إذا تم التقاطها بواسطة البرنامج النصي) والمؤقت (المؤقتات) الفاشلة. وهذا يعطي في الغالب فكرة جيدة عن سبب فشل تشغيل الاختبار. 

سيؤدي النقر فوق ملف التقرير في قسم "القيم" إلى ظهور صفحة HTML تتضمن نظرة عامة على مخرجات التنفيذ بالإضافة إلى رابط لملف تقرير HTML أكثر تفصيلاً (وهو نفس الملف الذي يمكن الوصول إليه مباشرةً في قسم "القيم").

قيم Selenium وحدود الإنذار

القيمة / حد الإنذار

الوصف

وقت التشغيل

وقت تشغيل المكون الإضافي

رمز النتيجة

 0 = صحيح -
1 = خطأ عام - 10
= فشل التنفيذ - 11
= معلمة مفقودة - 12
= لم يتم العثور على ملف الروبوت - 13
= فشل Selenium

رمز الخطأ

رمز خطأ عام في المهمة (انظر قسم رموز أخطاء المهام)