Selenium مع Cucumber (دليل إطار عمل BDD)
⚡ ملخص ذكي
Selenium مع Cucumber يشكل إطار عمل قويًا لتطوير البرمجيات الموجه بالسلوك (BDD) يجمع بين بناء جملة Gherkin باللغة الإنجليزية البسيطة و Selenium أتمتة WebDriver. يشرح هذا البرنامج التعليمي المتطلبات الأساسية، ويستعرض ثلاثة سيناريوهات عملية، ويوضح كيفية دمج ملفات الميزات وتعريفات الخطوات وفئة TestRunner لتنفيذ اختبارات المتصفح.

في هذا البرنامج التعليمي، سوف تتعلم كيفية التكامل Cucumber مع Selenium WebDriver لبناء إطار عمل لتطوير البرمجيات القائم على السلوك (BDD) يكون قابلاً للقراءة والصيانة ويعتمد على البيانات.
ما هي تفاصيل Cucumber?
Cucumber هي أداة اختبار تدعم تطوير البرمجيات الموجه بالسلوك (BDD). تصف هذه الأداة سلوك التطبيق بنص إنجليزي بسيط باستخدام لغة غيركين، مما يتيح لغير المطورين المساهمة في مواصفات الاختبار دون الحاجة إلى تعلم لغة برمجة. تعرف على المزيد في صفحتنا Cucumber البرنامج التعليمي.
ما هي تفاصيل Selenium?
Selenium هي أداة أتمتة تُستخدم لـ الاختبار الوظيفي من تطبيقات الويب. Selenium يدعم لغات برمجة متعددة بما في ذلك Javaروبي, PythonوC#، مما يجعلها خيارًا مثاليًا للفرق ذات الخلفيات التقنية المتنوعة. تعرف على المزيد في قسمنا Selenium البرنامج التعليمي.
لماذا الاستخدام Cucumber مع Selenium?
Cucumber و Selenium تُعدّان من أكثر تقنيات الاختبار استخداماً على نطاق واسع. وتستخدمها معظم المؤسسات بالفعل. Selenium لأغراض الاختبار الوظيفي، وأرغب في إضافة طبقات. Cucumber في القمة لأن Cucumber يسهل قراءة وفهم تدفق التطبيق.
Cucumber يعتمد على إطار عمل التطوير القائم على السلوك الذي بمثابة جسر بين الأدوار التالية:
- مهندس برمجيات ومحلل أعمال.
- اختبار يدوي واختبار الأتمتة.
- اختبار يدوي والمطورين.
استخدم Cucumber إطار عمل BDD أيضًا يساعد العملاء على فهم رمز التطبيق لأنه يستخدم لغة غيركين، وهي لغة نصية بسيطة. يستطيع أي شخص في المؤسسة فهم سلوك البرنامج. تتميز صيغة غيركين بلغة إنجليزية سهلة القراءة، مما يجعل المواصفات في متناول القراء غير التقنيين.
المتطلبات الأساسية للاستخدام Cucumber مع Selenium
قبل أن نبدأ Cucumber-Selenium للتكامل، ستحتاج إلى العناصر التالية:
Selenium ملفات الجرة:
- Selenium-خادم مستقل
يمكنك تنزيلها من https://www.selenium.dev/downloads/.
ملفات JAR لـ Cucumber:
- Cucumber-النواة
- Cucumber-لغة البرمجة
- Cobertura مدونة التغطية
- Cucumber-جافا
- Cucumber-جونيت
- Cucumber-jvm-deps
- Cucumber-التقارير
- هامكريست الأساسية
- الجيركين خيار صغير
- JUnit
يمكنك تنزيلها من https://mvnrepository.com/search?q=Cucumberستحتاج إلى البحث عن كل ملف jar وتنزيله واحداً تلو الآخر.
على سبيل المثال، إليك كيفية تنزيل أحد ملفات jar، وهو "Cucumberمكتبة "-core".
انقر على رابط التنزيل أعلاه. سيتم توجيهك إلى موقع مستودع Maven. ابحث الآن عن ملف jar المحدد (في هذه الحالة "Cucumber "الأساسي" كما هو موضح في لقطة الشاشة أدناه:
في الصفحة التالية، انقر فوق الإصدار 1.2.2:
في الشاشة التالية، انقر فوق "تنزيل" للحصول على Cucumber ملف JAR الأساسي:
ملاحظة: لتسهيل الأمر، قمنا بتجميع ملفات Maven jar المطلوبة. اضغط هناقد تصبح هذه الملفات قديمة وغير متوافقة بمرور الوقت، لذلك نوصي بتنزيلها بنفسك باستخدام الطريقة الموضحة أعلاه.
اختبار الأتمتة باستخدام Cucumber مع Selenium
دعونا نستعرض كيفية الاستخدام Cucumber مع Selenium خطوة بخطوة. سنتناول هنا ثلاثة سيناريوهات:
- السيناريو 1: طباعة النص في وحدة التحكم.
- السيناريو الثاني: أدخل بيانات اعتماد تسجيل الدخول وأعد ضبط القيمة.
- السيناريو 3: أدخل بيانات تسجيل الدخول على Guru99 وإعادة ضبط القيمة - كرر ذلك لثلاث مجموعات من البيانات.
السيناريو 1: طباعة النص في وحدة التحكم
في هذا السيناريو، نقوم ببساطة بطباعة النص في وحدة التحكم باستخدام Cucumber.
الخطوة 1) أنشئ مشروعًا في Eclipse.
إنشاء Java مشروع باسم "CucumberمعSelenium" كما هو موضح في لقطة الشاشة أدناه.
الخطوة 2) أضف ملفات jar إلى المشروع.
انقر بزر الماوس الأيمن على المشروع > خصائص > Java مسار الإنشاء. أضف جميع المكتبات التي قمت بتنزيلها سابقًا.
الخطوة 3) أنشئ ملفًا للميزات.
لإنشاء ملف ميزات، قم أولاً بإنشاء مجلد الميزات كما هو موضح في لقطة الشاشة أدناه.
أدخل اسم المجلد "الميزات" وانقر فوق "إنهاء".
الآن قم بإنشاء ملف ميزات داخل مجلد الميزات باسم ميزة الاختبار الخاص بيالعملية مشابهة لإنشاء مجلد.
ملاحظة: قد تحتاج إلى تثبيت Cucumber Eclipse قم بتثبيت الإضافة أولاً. انتقل إلى المساعدة ← تثبيت برامج جديدة، ثم الصق الرابط. http://cucumber.github.io/cucumber-eclipse/update-site/، وتثبيته.
الخطوة 4) اكتب السيناريوهات.
الأسطر أدناه مكتوبة بـ ميزة الاختبار الخاص بي باستخدام لغة غيركين:
Feature: Reset functionality on login page of Application
Scenario: Verification of Reset button
Given Open the Firefox and launch the application
When Enter the Username and Password
Then Reset the credential
Code تفسير
خط 1) يحدد الوظائف التجارية.
خط 2) يحدد سيناريو للاختبار.
خط 3) يحدد الشرط المسبق (معطى).
خط 4) يحدد الإجراء المطلوب تنفيذه (متى).
خط 5) يحدد النتيجة المتوقعة (ثم).
الخطوة 5) اكتب ال Selenium برنامج تشغيل الاختبار لـ Cucumber تصميم الإطار.
إنشاء تسترنر حزمة ثم أ Runner.java ملف الفئة الموجود أسفله.
package TestRunner;
import org.junit.runner.RunWith;
import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;
@RunWith(Cucumber.class)
@CucumberOptions(features = "Features", glue = {"StepDefinition"})
public class Runner
{
}
في ما سبق Cucumber Java على سبيل المثال، نقوم بتشغيل اختبار الخيار باستخدام التعليقات التوضيحية التالية:
@إركض مع() يروي JUnit حول فئة تشغيل الاختبار التي تبدأ بتنفيذ اختباراتنا.
@Cucumberخيارات() يحدد خصائص الاختبار مثل مسار ملف الميزة وحزمة تعريف الخطوة.
لقطة شاشة لملف TestRunner:
الخطوة 6) أنشئ نص تعريف الخطوة.
الآن إنشاء تعريف الخطوة حزمة ثم أ Steps.java ملف البرنامج النصي الموجود أسفله. داخل ملف Steps.java نكتب Selenium منطق يُطابق كل خطوة من خطوات Gherkin.
package StepDefinition;
import cucumber.api.java.en.Given;
import cucumber.api.java.en.Then;
import cucumber.api.java.en.When;
public class Steps {
@Given("^Open the Firefox and launch the application$")
public void open_the_Firefox_and_launch_the_application() throws Throwable
{
System.out.println("This Step open the Firefox and launch the application.");
}
@When("^Enter the Username and Password$")
public void enter_the_Username_and_Password() throws Throwable
{
System.out.println("This step enter the Username and Password on the login page.");
}
@Then("^Reset the credential$")
public void Reset_the_credential() throws Throwable
{
System.out.println("This step click on the Reset button.");
}
}
اسم الفئة خطواتو Cucumber تُربط التعليقات التوضيحية كل طريقة بخطوة من خطوات ملف الميزات:
@منح يحدد طريقة الفتح Firefox ثم قم بتشغيل التطبيق.
@متى يحدد طريقة إدخال اسم المستخدم وكلمة المرور.
@ثم يحدد طريقة إعادة تعيين بيانات الاعتماد.
تقوم كل طريقة ببساطة بطباعة رسالة على وحدة التحكم.
تُظهر لقطة الشاشة أدناه ملف Steps.java النصي وشجرة المشروع:
ملاحظة: تعريف الخطوة هو الكود الذي تريده Cucumber لتنفيذه عندما يتطابق مع خطوة ملف الميزات.
الخطوة 7) تنفيذ البرنامج النصي.
قم بتشغيل هذا البرنامج النصي من ملف TestRunner (Runner.java) كما هو موضح أدناه.
الخطوة 8) تحليل الإخراج.
عند تنفيذ ملف Runner.java، Cucumber يطبع نفس النص المحدد في ملف Steps.java إلى وحدة التحكم.
السيناريو الثاني: أدخل بيانات تسجيل الدخول وأعد تعيين القيمة
هنا ندخل بيانات الاعتماد على Guruصفحة تسجيل الدخول التجريبية 99 وإعادة ضبط القيمة.
بالنسبة للسيناريو الثاني، نحتاج فقط إلى التحديث Steps.javaوهنا نضيف الحقيقة Selenium الكود. أولاً، تأكد من أن Selenium تمت إضافة ملف jar إلى المشروع.
الخطوة 1) قم بتحديث ملف Steps.java script كما هو موضح أدناه.
package StepDefinition;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import cucumber.api.java.en.Given;
import cucumber.api.java.en.Then;
import cucumber.api.java.en.When;
public class Steps {
WebDriver driver;
@Given("^Open the Firefox and launch the application$")
public void open_the_Firefox_and_launch_the_application() throws Throwable
{
System.setProperty("webdriver.gecko.driver", "E://Selenium//Selenium_Jars//geckodriver.exe");
driver = new FirefoxDriver();
driver.manage().window().maximize();
driver.get("http://demo.guru99.com/v4");
}
@When("^Enter the Username and Password$")
public void enter_the_Username_and_Password() throws Throwable
{
driver.findElement(By.name("uid")).sendKeys("username12");
driver.findElement(By.name("password")).sendKeys("password12");
}
@Then("^Reset the credential$")
public void Reset_the_credential() throws Throwable
{
driver.findElement(By.name("btnReset")).click();
}
}
لقطة شاشة لما سبق Selenium النصي:
الخطوة 2) تنفيذ البرنامج النصي.
بعد تحديث ملف Steps.java، قم بتشغيل ملف Runner.java.
الخطوة 3) قم بتحليل المخرجات. ستجد في المخرجات ما يلي:
- تم إطلاق المتصفح.
- Guruافتتاح الموقع التجريبي لبنك 99.
- يتم إدخال اسم المستخدم وكلمة المرور في صفحة تسجيل الدخول.
- زر إعادة الضبط يمسح القيم.
السيناريو 3: تشغيل عملية تسجيل الدخول وإعادة التعيين باستخدام 3 مجموعات من البيانات
هنا نحتاج إلى تحديث كليهما Steps.java وملف الميزات لتشغيل نفس التدفق بثلاث مجموعات من بيانات الاعتماد.
الخطوة 1) قم بتحديث ملف الميزات كما هو موضح أدناه.
نستخدم مخطط السيناريو و أمثلة بناء الجملة Cucumber يكرر نفس السيناريو عبر كل صف من صفوف البيانات.
Feature: Reset functionality on login page of Application
Scenario Outline: Verification of reset button with multiple credentials
Given Open the Firefox and launch the application
When Enter the Username <username> and Password <password>
Then Reset the credential
Examples:
| username | password |
| User1 | password1 |
| User2 | password2 |
| User3 | password3 |
الخطوة 2) قم بتحديث ملف Steps.java script.
هنا نقوم بتحديث توقيعات الطرق بحيث تقبل المعلمات من جدول الأمثلة.
package StepDefinition;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import cucumber.api.java.en.Given;
import cucumber.api.java.en.Then;
import cucumber.api.java.en.When;
public class Steps {
WebDriver driver;
@Given("^Open the Firefox and launch the application$")
public void open_the_Firefox_and_launch_the_application() throws Throwable
{
System.setProperty("webdriver.gecko.driver", "E://Selenium//Selenium_Jars//geckodriver.exe");
driver = new FirefoxDriver();
driver.manage().window().maximize();
driver.get("http://demo.guru99.com/v4");
}
@When("^Enter the Username \"(.*)\" and Password \"(.*)\"$")
public void enter_the_Username_and_Password(String username, String password) throws Throwable
{
driver.findElement(By.name("uid")).sendKeys(username);
driver.findElement(By.name("password")).sendKeys(password);
}
@Then("^Reset the credential$")
public void Reset_the_credential() throws Throwable
{
driver.findElement(By.name("btnReset")).click();
}
}
الخطوة 3) قم بتنفيذ البرنامج النصي المحدث.
تعرض الشاشة أدناه عملية تنفيذ ناجحة والوقت الذي استغرقته كل مجموعة بيانات.
الخطوة 4) قم بتحليل المخرجات. كرر الخطوات التالية لكل مجموعة من مجموعات البيانات الثلاث:
- تم إطلاق المتصفح.
- Guruافتتاح الموقع التجريبي لبنك 99.
- يتم إدخال اسم المستخدم وكلمة المرور في صفحة تسجيل الدخول.
- زر إعادة الضبط يمسح القيم.























