دروس سيكولي ل Selenium أتمتة
⚡ ملخص ذكي
يقوم برنامج Sikuli بأتمتة واجهة المستخدم الرسومية من خلال التعرف على لقطات الشاشة المخزنة بدلاً من محددات المواقع، مما يسمح بـ Selenium تجربة قيادة Windows النوافذ المنبثقة، ومربعات حوار الملفات الأصلية، وكائنات فلاش التي لا يستطيع برنامج WebDriver وحده الوصول إليها.
ما هو سيكولي في 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 باستخدام النقر بزر الماوس الأيمن على المشروع -> مسار الإنشاء -> تكوين مسار الإنشاء، كما هو موضح أدناه.
بعد إضافة ملف 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' وزر 'فتح'، كما هو موضح أدناه.
هكذا يجب أن تبدو لقطة الشاشة الخاصة بك:
يتم تخزين الصور الخاصة بمربع نص إدخال ملف 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. أدخل البيانات في مربع نص "إدخال الملف" وانقر على زر "فتح"
تظهر الشاشة أدناه بمجرد اكتمال تحميل الملف وإغلاق المتصفح
لأن المطابقة تعتمد على وحدات البكسل، يجب إعادة التقاط كل صورة مرجعية كلما تم تغيير تصميم الواجهة. هذا الضعف هو السبب في أن الفرق تحتفظ بـ Sikuli للنوافذ المنبثقة. معالجة الملفات البسيطة في WebDriver لا يمكن الوصول.






