دروس سيكولي ل Selenium أتمتة

⚡ ملخص ذكي

يقوم برنامج Sikuli بأتمتة واجهة المستخدم الرسومية من خلال التعرف على لقطات الشاشة المخزنة بدلاً من محددات المواقع، مما يسمح بـ Selenium تجربة قيادة Windows النوافذ المنبثقة، ومربعات حوار الملفات الأصلية، وكائنات فلاش التي لا يستطيع برنامج WebDriver وحده الوصول إليها.

  • 🔘 الفكرة الأساسية: يتم تخزين كل عنصر كصورة PNG، ويجده برنامج Sikuli من خلال مطابقة وحدات البكسل على الشاشة.
  • ☑️ الإعداد: إضافة SikuliX API JAR إلى Java مسار البناء بجانب Selenium الجرار.
  • ✅ فئة الشاشة: يوفر النقر، والنقر المزدوج، والكتابة، والتمرير، والبحث، وكل منها يأخذ اسم صورة.
  • 🧪 فئة النمط: يقوم بتغليف مسار الصورة وضبط المطابقة من خلال similar() و exact().
  • 🛠️ مثال عملي: يقوم اختبار Chrome بالنقر على "اختيار ملف"، ثم يقوم Sikuli بكتابة المسار والنقر على "فتح".
  • ⚙️ على سبيل الحصر: يؤدي تغيير الدقة أو حجم البكسل إلى تعطل عملية المطابقة وظهور خطأ FindFailed.

دروس سيكولي ل Selenium أتمتة

ما هو سيكولي في Selenium?

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

⚠️ ملاحظة التسمية: يتم الحفاظ على المشروع اليوم كـ SikuliX، نُشر على موقع Maven Central باسم com.sikulix:sikulixapiأسماء الفئات أدناه لم تتغير.

كيفية استخدام سيكولي مع Selenium برنامج تشغيل الويب

يمكن دمج سيكولي مع Selenium استخدام WebDriver باستخدام ملف Sikuli JAR، في الخطوتين التاليتين.

الخطوة 1) التنزيل ملف Sikuli JAR من الأسفل URLو على سبيل المثالtracقم بنقل محتويات ملف ZIP إلى مجلد.

https://mvnrepository.com/artifact/com.sikulix/sikulixapi/2.0.5

الخطوة 2) قم بإنشاء مشروع JAVA جديد في Eclipse وقم بإضافة ملف JAR إلى مسار الإنشاء، إلى جانب ملفات selenium jar باستخدام النقر بزر الماوس الأيمن على المشروع -> مسار الإنشاء -> تكوين مسار الإنشاء، كما هو موضح أدناه.

تمت إضافة ملف Sikuli JAR إلى Java مسار البناء في Eclipse تكوين مسار البناء

بعد إضافة ملف JAR إلى مسار بناء المشروع، يُمكن استخدام الفئات التي يوفرها Sikuli. كما يُمكن لمشروع Maven تعريف نفس العنصر كاعتمادية.

فئة الشاشة في سيكولي

تُعدّ فئة الشاشة (Screen class) الفئة الأساسية لجميع الطرق التي توفرها مكتبة Sikuli. تحتوي هذه الفئة على طرق مُعرّفة مسبقًا لجميع العمليات الشائعة التي تُجرى على عناصر الشاشة، مثل النقر، والنقر المزدوج، وإدخال البيانات في مربع نص، والتمرير فوق العنصر، وما إلى ذلك. فيما يلي قائمة بالطرق الشائعة الاستخدام التي توفرها فئة الشاشة.

الأسلوب الوصف بناء الجملة
انقر تُستخدم هذه الطريقة للنقر على عنصر على الشاشة باستخدام اسم الصورة كمعلمة.

الشاشة s = شاشة جديدة ()؛

s.click("QA.png");

النقر المزدوج تُستخدم هذه الطريقة للنقر المزدوج على عنصر ما. وتقبل اسم الصورة كمعلمة.

الشاشة s = شاشة جديدة ()؛

s.doubleClick("QA.png");

النوع يتم استخدام هذه الطريقة لتوفير قيمة الإدخال لعنصر ما. يقبل اسم الصورة والنص المراد إرسالهما كمعلمات.

s.type("QA.png"،"TEXT");

رفرفة يتم استخدام هذه الطريقة للتمرير فوق عنصر ما. يقبل اسم الصورة كمعلمة.

s.hover("QA.png");

تُستخدم هذه الطريقة للعثور على عنصر معين على الشاشة. يقبل اسم الصورة كمعلمة.

s.find("QA.png");

فئة النمط في سيكولي

بينما تتعامل دالة Screen مع اسم صورة عادي، تُستخدم فئة Pattern لربط ملف الصورة بسمات إضافية لتحديد العنصر بشكل فريد. وتأخذ هذه الدالة مسار الصورة كمعامل.

Pattern p = new Pattern(“Path of image”);

فيما يلي أكثر الأساليب استخدامًا لفئة النمط.

الأسلوب الوصف بناء الجملة
getFileName إرجاع اسم الملف الموجود في كائن النمط.

النمط p = نمط جديد("D:\Demo\QA.png");

اسم ملف السلسلة = p.getFileName();

مماثل تقوم هذه الطريقة بإرجاع كائن نمط جديد مع تعيين التشابه على قيمة محددة. يقبل قيمة التشابه بين 0 إلى 1 كمعلمة. يبحث Sikuli عن كافة العناصر التي تقع ضمن نطاق التشابه المحدد ويعيد كائن نمط جديد.

النمط p1 = p.similar(0.7f);

دقيق تقوم هذه الطريقة بإرجاع كائن نمط جديد مع تعيين التشابه على 1. وتبحث فقط عن التطابق التام للعنصر المحدد.

النمط p1 = p.exact();

Code مثال لتحميل الملفات باستخدام سيكولي

يشرح الكود أدناه استخدام Sikuli لتحميل الملفات في متصفح Chrome.

package com.sikuli.demo;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.sikuli.script.FindFailed;
import org.sikuli.script.Pattern;
import org.sikuli.script.Screen;
import org.openqa.selenium.chrome.ChromeDriver;

public class SikuliDemo {

    public static void main(String[] args) throws FindFailed {

        System.setProperty("webdriver.chrome.driver", "D:\\chromedriver.exe");
        String filepath = "D:\\Guru99Demo\\Files\\";
        String inputFilePath = "D:\\Guru99Demo\\Files\\";
        Screen s = new Screen();
        Pattern fileInputTextBox = new Pattern(filepath + "FileTextBox.PNG");
        Pattern openButton = new Pattern(filepath + "OpenButton.PNG");
        WebDriver driver;

        // Open Chrome browser    
        driver = new ChromeDriver();
        driver.get("https://demo.guru99.com/test/image_upload/index.php");

        // Click on Browse button and handle windows pop up using Sikuli
        driver.findElement(By.xpath(".//*[@id='photoimg']")).click();
        s.wait(fileInputTextBox, 20);
        s.type(fileInputTextBox, inputFilePath + "Test.docx");
        s.click(openButton);

        // Close the browser
        driver.close();
    }
}

Code تفسير

الخطوة 1) يتضمن البيان الأول تحديد المسار القابل للتنفيذ لبرنامج التشغيل لـ chrome.

System.setProperty("webdriver.chrome.driver", "D:\\ chromedriver.exe");

⚠️ ملاحظة حول الإصدار: Selenium 4- يقوم بحل ملف تعريف برنامج التشغيل الثنائي من خلال Selenium يا مدير، لذا أصبح هذا السطر اختيارياً الآن. وقد تم الاحتفاظ به كما ورد في المصدر.

الخطوة 2) استخدم أداة التقاط الشاشة مثل Snipping Tool لالتقاط لقطات شاشة للنافذة المنبثقة "FileText"Box' وزر 'فتح'، كما هو موضح أدناه.

Snipping Tool الاختيار على Windows مربع إدخال نص الملف في نافذة التحميل المنبثقة

هكذا يجب أن تبدو لقطة الشاشة الخاصة بك:

ملف نصي تم التقاطهBox وصور مرجعية لزر الفتح يستخدمها برنامج Sikuli النصي

يتم تخزين الصور الخاصة بمربع نص إدخال ملف Windows والزر المفتوح على "FileText"Box".PNG" و"OpenButton.PNG".

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

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

الخطوة 3) تتضمن العبارات التالية إنشاء كائنات لفئات الشاشة والنمط. إنشاء كائن شاشة جديد. قم بتعيين مسار الملف الذي تريد تحميله كمعلمة لكائن النمط.

Screen s = new Screen();
Pattern fileInputTextBox = new Pattern(filepath + "FileTextBox.PNG");
Pattern openButton = new Pattern(filepath + "OpenButton.PNG");

الخطوة 4) تتضمن العبارات التالية فتح متصفح كروم باستخدام URL تطبيق تجريبي لتحميل الملفات: https://demo.guru99.com/test/image_upload/index.php

driver = new ChromeDriver();
driver.get("https://demo.guru99.com/test/image_upload/index.php");

الخطوة 5) انقر فوق زر اختيار ملف باستخدام البيان أدناه

driver.findElement(By.xpath(".//*[@id='photoimg']")).click();

الخطوة 6) انتظر حتى تظهر النافذة المنبثقة. تُستخدم طريقة الانتظار للتعامل مع التأخير المرتبط بفتح النافذة المنبثقة بعد النقر على زر التصفح.

s.wait(fileInputTextBox, 20);

الخطوة 7) اكتب مسار الملف في مربع نص ملف الإدخال وانقر على زر فتح

s.type(fileInputTextBox, inputFilePath + "Test.docx");
s.click(openButton);

الخطوة 8) أغلق المتصفح

driver.close();

الناتج

في البداية، يفتح البرنامج النصي متصفح Chrome

تم فتح متصفح كروم على صفحة تحميل الملفات التجريبية في بداية التشغيل

انقر على زر "اختيار ملف"، ستظهر شاشة منبثقة لملف Windows. أدخل البيانات في مربع نص "إدخال الملف" وانقر على زر "فتح"

Windows نافذة منبثقة تحتوي على مسار الملف الذي تم إدخاله في مربع نص إدخال الملف

تظهر الشاشة أدناه بمجرد اكتمال تحميل الملف وإغلاق المتصفح

صفحة تجريبية تؤكد اكتمال التحميل قبل إغلاق المتصفح مباشرةً

لأن المطابقة تعتمد على وحدات البكسل، يجب إعادة التقاط كل صورة مرجعية كلما تم تغيير تصميم الواجهة. هذا الضعف هو السبب في أن الفرق تحتفظ بـ Sikuli للنوافذ المنبثقة. معالجة الملفات البسيطة في WebDriver لا يمكن الوصول.

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

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

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

نعم. أعلن com.sikulix:sikulixapi باعتباره تبعية، ويستخدم Maven نفس واجهة برمجة التطبيقات، احتفظping الإصدار الموجود في ملف البناء بدلاً من Eclipse مسار البناء.

نعم، SikuliX يعمل على Windowsو Linux و macOS. لا يمكن نقل الصور المرجعية بينها، لأن الزخارف والخطوط تختلف، لذلك تحتاج كل منصة إلى التقاطاتها الخاصة.

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

مساعد الطيار جيثب تتضمن هذه العملية مسودات لشاشات العرض وأنماطها وإعدادات WebDriver الخاصة بها. لا يمكنها التقاط ملفات PNG، لذا يُرجى التحقق من مسار كل صورة مُنشأة.

تتعطل عملية المطابقة عند إعادة تصميم واجهة المستخدم أو تغيير دقة الشاشة، وتعمل بشكل أبطأ من أتمتة DOM، كما أنها لا تُبلغ عن الأعطال بوضوح كافٍ. وهي مناسبة للواجهات التي نادراً ما تتغير.

ليس مشروع سيكولي البحثي الأصلي هو نفسه، بل المشروع الذي خلفه. SikuliX يقوم هذا الموقع بنشر ملف sikulixapi المستخدم هنا. وتصف المقالات التي تستشهد بملفات JAR المكتوبة بلغة sikuli السطر السابق.

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