Selenium مع Cucumber (دليل إطار عمل BDD)

⚡ ملخص ذكي

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

  • 🥒 التعريف الأساسي: Cucumber هي أداة اختبار BDD تصف سلوك التطبيق بلغة إنجليزية بسيطة باستخدام لغة جيركين، و Selenium يتحكم في إجراءات المتصفح في الخلفية.
  • 🤝 جسر أصحاب المصلحة: Cucumber يربط محللي الأعمال، ومختبري الاختبارات اليدوية، ومهندسي الأتمتة، والمطورين من خلال مواصفات اختبار مشتركة وسهلة القراءة.
  • 📦 البرطمانات المطلوبة: Selenium مستقل، Cucumber-جوهر، Cucumber-جافا، Cucumber-junit، غيركين، JUnit، و Hamcrest-core يشكلان الحد الأدنى من مجموعة التبعيات.
  • 🧱 ثلاثة ملفات للمشروع: ملف .feature يحتوي على سيناريوهات، وفئة Steps.java لتعريف الخطوات، وبرنامج تشغيل اختبار Runner.java مع @Cucumberخيارات الغراء.
  • 🔁 الاختبارات القائمة على البيانات: استخدم مخطط السيناريو بالإضافة إلى جداول الأمثلة لتشغيل نفس التدفق على مجموعات متعددة من بيانات الاعتماد في عملية تنفيذ واحدة.

Selenium مع Cucumber (دليل إطار عمل BDD)

في هذا البرنامج التعليمي، سوف تتعلم كيفية التكامل Cucumber مع Selenium WebDriver لبناء إطار عمل لتطوير البرمجيات القائم على السلوك (BDD) يكون قابلاً للقراءة والصيانة ويعتمد على البيانات.

ما هي تفاصيل Cucumber?

Cucumber هي أداة اختبار تدعم تطوير البرمجيات الموجه بالسلوك (BDD). تصف هذه الأداة سلوك التطبيق بنص إنجليزي بسيط باستخدام لغة غيركين، مما يتيح لغير المطورين المساهمة في مواصفات الاختبار دون الحاجة إلى تعلم لغة برمجة. تعرف على المزيد في صفحتنا Cucumber البرنامج التعليمي.

ما هي تفاصيل Selenium?

Selenium هي أداة أتمتة تُستخدم لـ الاختبار الوظيفي من تطبيقات الويب. Selenium يدعم لغات برمجة متعددة بما في ذلك Javaروبي, PythonوC#، مما يجعلها خيارًا مثاليًا للفرق ذات الخلفيات التقنية المتنوعة. تعرف على المزيد في قسمنا Selenium البرنامج التعليمي.

لماذا الاستخدام Cucumber مع Selenium?

Cucumber و Selenium تُعدّان من أكثر تقنيات الاختبار استخداماً على نطاق واسع. وتستخدمها معظم المؤسسات بالفعل. Selenium لأغراض الاختبار الوظيفي، وأرغب في إضافة طبقات. Cucumber في القمة لأن Cucumber يسهل قراءة وفهم تدفق التطبيق.

Cucumber يعتمد على إطار عمل التطوير القائم على السلوك الذي بمثابة جسر بين الأدوار التالية:

  1. مهندس برمجيات ومحلل أعمال.
  2. اختبار يدوي واختبار الأتمتة.
  3. اختبار يدوي والمطورين.

استخدم Cucumber إطار عمل BDD أيضًا يساعد العملاء على فهم رمز التطبيق لأنه يستخدم لغة غيركين، وهي لغة نصية بسيطة. يستطيع أي شخص في المؤسسة فهم سلوك البرنامج. تتميز صيغة غيركين بلغة إنجليزية سهلة القراءة، مما يجعل المواصفات في متناول القراء غير التقنيين.

Cucumber مع Selenium نظرة عامة على إطار عمل BDD

المتطلبات الأساسية للاستخدام Cucumber مع Selenium

قبل أن نبدأ Cucumber-Selenium للتكامل، ستحتاج إلى العناصر التالية:

Selenium ملفات الجرة:

  • Selenium-خادم مستقل

يمكنك تنزيلها من https://www.selenium.dev/downloads/.

Selenium صفحة تنزيل ملفات JAR

ملفات 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 "الأساسي" كما هو موضح في لقطة الشاشة أدناه:

البحث عن Cucumber ملف JAR الأساسي في مستودع Maven

في الصفحة التالية، انقر فوق الإصدار 1.2.2:

اختر Cucumber الإصدار الأساسي 1.2.2 في Maven

في الشاشة التالية، انقر فوق "تنزيل" للحصول على Cucumber ملف JAR الأساسي:

تحميل Cucumber ملف جافا الأساسي

ملاحظة: لتسهيل الأمر، قمنا بتجميع ملفات Maven jar المطلوبة. اضغط هناقد تصبح هذه الملفات قديمة وغير متوافقة بمرور الوقت، لذلك نوصي بتنزيلها بنفسك باستخدام الطريقة الموضحة أعلاه.

اختبار الأتمتة باستخدام Cucumber مع Selenium

دعونا نستعرض كيفية الاستخدام Cucumber مع Selenium خطوة بخطوة. سنتناول هنا ثلاثة سيناريوهات:

  • السيناريو 1: طباعة النص في وحدة التحكم.
  • السيناريو الثاني: أدخل بيانات اعتماد تسجيل الدخول وأعد ضبط القيمة.
  • السيناريو 3: أدخل بيانات تسجيل الدخول على Guru99 وإعادة ضبط القيمة - كرر ذلك لثلاث مجموعات من البيانات.

السيناريو 1: طباعة النص في وحدة التحكم

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

الخطوة 1) أنشئ مشروعًا في Eclipse.

إنشاء Java مشروع باسم "CucumberمعSelenium" كما هو موضح في لقطة الشاشة أدناه.

إنشاء CucumberمعSelenium Java مشروع في Eclipse

Java تكوين اسم المشروع في Eclipse

الخطوة 2) أضف ملفات jar إلى المشروع.

انقر بزر الماوس الأيمن على المشروع > خصائص > Java مسار الإنشاء. أضف جميع المكتبات التي قمت بتنزيلها سابقًا.

إضافة Cucumber و Selenium ملفات jar إلى Java مسار بناء

الخطوة 3) أنشئ ملفًا للميزات.

لإنشاء ملف ميزات، قم أولاً بإنشاء مجلد الميزات كما هو موضح في لقطة الشاشة أدناه.

أنشئ مجلد الميزات في Eclipse تنفيذ المشاريع

أدخل اسم المجلد "الميزات" وانقر فوق "إنهاء".

قم بتكوين اسم مجلد الميزات في Eclipse

مجلد الميزات مرئي في مستكشف المشروع

الآن قم بإنشاء ملف ميزات داخل مجلد الميزات باسم ميزة الاختبار الخاص بيالعملية مشابهة لإنشاء مجلد.

أنشئ ملف MyTest.feature في مجلد Features

ملاحظة: قد تحتاج إلى تثبيت 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:

Runner.java النصي TestRunner ل Cucumber

الخطوة 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 النصي وشجرة المشروع:

ملف Steps.java script وشجرة المشروع في Eclipse

ملاحظة: تعريف الخطوة هو الكود الذي تريده Cucumber لتنفيذه عندما يتطابق مع خطوة ملف الميزات.

الخطوة 7) تنفيذ البرنامج النصي.

قم بتشغيل هذا البرنامج النصي من ملف TestRunner (Runner.java) كما هو موضح أدناه.

قم بتشغيل Runner.java لتشغيل Cucumber تجربه بالعربي

الخطوة 8) تحليل الإخراج.

عند تنفيذ ملف Runner.java، Cucumber يطبع نفس النص المحدد في ملف Steps.java إلى وحدة التحكم.

مخرجات وحدة التحكم من Cucumber تنفيذ الاختبار

السيناريو الثاني: أدخل بيانات تسجيل الدخول وأعد تعيين القيمة

هنا ندخل بيانات الاعتماد على Guruصفحة تسجيل الدخول التجريبية 99 وإعادة ضبط القيمة.

بالنسبة للسيناريو الثاني، نحتاج فقط إلى التحديث Steps.javaوهنا نضيف الحقيقة Selenium الكود. أولاً، تأكد من أن Selenium تمت إضافة ملف jar إلى المشروع.

أكد 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 النصي:

Scenario 2 Steps.java with Selenium منطق

الخطوة 2) تنفيذ البرنامج النصي.

بعد تحديث ملف Steps.java، قم بتشغيل ملف Runner.java.

الخطوة 3) قم بتحليل المخرجات. ستجد في المخرجات ما يلي:

  • تم إطلاق المتصفح.
  • Guruافتتاح الموقع التجريبي لبنك 99.
  • يتم إدخال اسم المستخدم وكلمة المرور في صفحة تسجيل الدخول.
  • زر إعادة الضبط يمسح القيم.

عرض توضيحي للسيناريو الثاني Cucumber Selenium اختبار المدى

السيناريو 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();
    }
}

تم تحديث ملف Steps.java باستخدام بيانات اعتماد مُعَلمة.

الخطوة 3) قم بتنفيذ البرنامج النصي المحدث.

تعرض الشاشة أدناه عملية تنفيذ ناجحة والوقت الذي استغرقته كل مجموعة بيانات.

تم تنفيذ السيناريو 3 بنجاح باستخدام ثلاث مجموعات بيانات

الخطوة 4) قم بتحليل المخرجات. كرر الخطوات التالية لكل مجموعة من مجموعات البيانات الثلاث:

  • تم إطلاق المتصفح.
  • Guruافتتاح الموقع التجريبي لبنك 99.
  • يتم إدخال اسم المستخدم وكلمة المرور في صفحة تسجيل الدخول.
  • زر إعادة الضبط يمسح القيم.

عرض متحرك للسيناريو 3 يوضح المعلمات Cucumber اختبار المدى

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

Cucumber هو إطار عمل BDD يقوم بتشغيل سيناريوهات مكتوبة بلغة Gherkin. Selenium هي مكتبة لأتمتة المتصفح تعمل على تشغيل صفحات الويب. Cucumber لا يتفاعل مع المتصفحات بشكل مباشر - بل يستدعيها Selenium تعريفات الخطوات لتنفيذ إجراءات واجهة المستخدم الفعلية.

Cucumber تستخدم ملفات الميزات لغة غيركين، وهي لغة إنجليزية بسيطة خاصة بالمجال، تُنظّم السيناريوهات باستخدام كلمات مفتاحية مثل: الميزة، السيناريو، المعطيات، متى، ثم، و، لكن، مخطط السيناريو، والأمثلة. ويمكن قراءة غيركين من قِبل كلٍّ من أصحاب المصلحة التقنيين وغير التقنيين.

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

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

نعم. تقوم برامج المساعدة البرمجية المدعومة بالذكاء الاصطناعي بقراءة ملفات ميزات Gherkin وإنشاء ملفات مطابقة. Java أو تعريفات خطوات Kotlin، بما في ذلك Selenium استدعاءات WebDriver، واستراتيجيات تحديد المواقع، وربط المعلمات. ثم يقوم المطورون بتحسين الكود المُولّد، مما يقلل بشكل كبير من التعليمات البرمجية المتكررة عند بدء التشغيل.ping أجنحة تطوير الأعمال الجديدة.

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