فئة العمل في Selenium

⚡ ملخص ذكي

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

  • 🖱️ الغرض الأساسي: تقوم فئة Actions بأتمتة أحداث الماوس ولوحة المفاتيح المركبة التي لا تستطيع وظيفة click() الأساسية القيام بها.
  • 🔑 فصلين: تُنشئ الإجراءات التفاعل؛ ويخزن الإجراء التسلسل المُجمّع للتنفيذ.
  • 🧱 قم بالبناء ثم التنفيذ: قم بتسلسل الأساليب، ثم أنهِ العملية باستخدام build()، وقم بتشغيلها باستخدام perform().
  • 📋 الطرق الرئيسية: moveToElement()، dragAndDrop()، keyDown()/keyUp()، contextClick()، و sendKeys().
  • 🤖 تمكين الذكاء الاصطناعي: تقوم المساعدات الذكية بإنشاء رمز فئة الإجراء وإصلاح محددات المواقع ذاتيًا أثناء اختبارات التفاعل.

مخرجات مؤشر الماوس

فئة العمل في Selenium

فئة العمل في Selenium هي ميزة مدمجة للتعامل مع أحداث لوحة المفاتيح والماوس. تدعم عمليات مثل النقر المتعدد باستخدام مفتاح التحكم، والسحب والإفلات، وغيرها الكثير. تُنفذ هذه العمليات باستخدام واجهة برمجة تطبيقات تفاعلات المستخدم المتقدمة (API) في Selenium برنامج تشغيل الويب.

التعامل مع أحداث لوحة المفاتيح والماوس

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

الأسلوب الوصف
انقر مع الاستمرار() النقرات (بدون تحرير) في موقع الماوس الحالي.
سياق النقر () يقوم بتنفيذ نقرة السياق (النقر بزر الماوس الأيمن) في موقع الماوس الحالي.
النقر المزدوج يقوم بالنقر المزدوج على موقع الماوس الحالي.
السحب والإسقاط (المصدر، الهدف) انقر مع الاستمرار على العنصر المصدر، ثم انتقل إلى العنصر الهدف، ثم حرر زر الماوس. المعلمات: المصدر (العنصر المراد الضغط عليه)، الهدف (العنصر المراد تحرير الزر عنده).
DragAndDropBy(المصدر، إزاحة x، إزاحة y) انقر مع الاستمرار على العنصر المصدر، ثم حركه بمقدار إزاحة محددة، ثم حرر الزر. المعلمات: المصدر، الإزاحة الأفقية (xOffset)، الإزاحة الرأسية (yOffset).
keyDown(modifier_key) يضغط على مفتاح تعديل دون رفعه، بحيث تفترض التفاعلات اللاحقة أنه لا يزال مضغوطًا. المعامل: مفتاح تعديل (Keys.ALT أو Keys.SHIFT أو Keys.CONTROL).
keyUp(modifier_key) يحرر مفتاح تعديل. المعامل: مفتاح تعديل (Keys.ALT أو Keys.SHIFT أو Keys.CONTROL).
moveByOffset(إزاحة x، إزاحة y) يحرك المؤشر من موضعه الحالي (أو 0,0) بمقدار الإزاحة المحددة. قيمة x سالبة تحرك المؤشر إلى اليسار؛ وقيمة y سالبة تحركه إلى الأعلى.
moveToElement(toElement) ينقل المؤشر إلى منتصف العنصر. المعامل: العنصر المراد الانتقال إليه.
إفراج() يحرر زر الفأرة الأيسر المضغوط في الموقع الحالي.
إرسال المفاتيح (onElement، charsequence) يرسل سلسلة من ضغطات المفاتيح إلى عنصر. المعلمات: onElement (عادةً ما يكون حقل نصي)، charsequence (ضغطات المفاتيح المراد إرسالها).

في المثال التالي ، نستخدم الامتداد moveToElement() طريقة للتمرير فوق أحد Mercury صفوف طاولات الجولات.

معالجة أحداث لوحة المفاتيح والماوس

الخلية الموضحة أعلاه هي جزء من العنصر. عندما لا يكون المؤشر فوقه، يكون لونه #FFC455 (برتقالي). بعد تمرير المؤشر فوقه، يصبح لون الخلية شفافًا ويتطابق مع خلفية الجدول المحيط.

الخطوة 1) قم باستيراد ملف الإجراءات و اكشن الطبقات.

استيراد الإجراءات وفئات الإجراءات

الخطوة 2) إنشاء مثيل لكائن إجراءات جديد.

إنشاء كائن الإجراءات

الخطوة 3) قم بإنشاء إجراء باستخدام كائن الإجراءات من الخطوة 2.

إنشاء كائن الإجراء

هنا نستخدم ملف moveToElement() طريقة تمرير مؤشر الماوس فوق رابط "الرئيسية". build() يتم استدعاء هذه الطريقة دائمًا في النهاية بحيث يتم تجميع جميع الإجراءات المدرجة في خطوة واحدة.

الخطوة 4) استخدم perform() طريقة لتنفيذ كائن الإجراء المصمم في الخطوة 3.

نفّذ الإجراء

فيما يلي الكود الكامل لبرنامج WebDriver الذي يتحقق من لون خلفية العنصر قبل وبعد تمرير مؤشر الماوس فوقه.

package newproject;

import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.interactions.Action;
import org.openqa.selenium.interactions.Actions;

public class PG7 {

    public static void main(String[] args) {
        String baseUrl = "https://demo.guru99.com/test/newtours/";
        System.setProperty("webdriver.gecko.driver", "C:\\geckodriver.exe");
        WebDriver driver = new FirefoxDriver();

        driver.get(baseUrl);
        WebElement link_Home = driver.findElement(By.linkText("Home"));
        WebElement td_Home = driver.findElement(By.xpath(
            "//html/body/div/table/tbody/tr/td"
            + "/table/tbody/tr/td"
            + "/table/tbody/tr/td"
            + "/table/tbody/tr"));

        Actions builder = new Actions(driver);
        Action mouseOverHome = builder.moveToElement(link_Home).build();

        String bgColor = td_Home.getCssValue("background-color");
        System.out.println("Before hover: " + bgColor);
        mouseOverHome.perform();
        bgColor = td_Home.getCssValue("background-color");
        System.out.println("After hover: " + bgColor);
        driver.close();
    }
}

يوضح الناتج أدناه أن لون الخلفية أصبح شفافًا بعد تمرير مؤشر الماوس فوقه.

مخرجات مؤشر الماوس

بناء سلسلة من الإجراءات المتعددة

يمكنك إنشاء سلسلة من الإجراءات باستخدام فئتي Action و Actions. تذكر إنهاء السلسلة باستخدام build() الطريقة. انظر إلى نموذج الكود أدناه.

بناء سلسلة من الإجراءات المتعددة

public static void main(String[] args) {
    String baseUrl = "https://www.facebook.com/";
    WebDriver driver = new FirefoxDriver();

    driver.get(baseUrl);
    WebElement txtUsername = driver.findElement(By.id("email"));

    Actions builder = new Actions(driver);
    Action seriesOfActions = builder
        .moveToElement(txtUsername)
        .click()
        .keyDown(txtUsername, Keys.SHIFT)
        .sendKeys(txtUsername, "hello")
        .keyUp(txtUsername, Keys.SHIFT)
        .doubleClick(txtUsername)
        .contextClick()
        .build();

    seriesOfActions.perform();
}

سلسلة من مخرجات الإجراءات

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

يمثل صنف Action سلسلة مُجمّعة من تفاعلات لوحة المفاتيح والماوس، تم إنشاؤها باستخدام صنف Actions. ويتم تنفيذها من خلال واجهة برمجة تطبيقات تفاعلات المستخدم المتقدمة (Advanced User Interactions API). Selenium برنامج تشغيل الويب.

تُستخدم كلمة "Actions" (بصيغة الجمع) لإنشاء سلسلة من التفاعلات مثل التمرير والنقر. أما كلمة "Action" (بصيغة المفرد) فهي الكائن المُجمَّع الذي تُرجعه الدالة build() والذي يتم تشغيله باستخدام الدالة perform().

تقوم الدالة build() بتجميع جميع التفاعلات المتسلسلة في إجراء مركب واحد. يتم استدعاؤها دائمًا في النهاية، قبل الدالة perform() مباشرةً، بحيث يتم تنفيذ الخطوات المدرجة في قائمة الانتظار معًا كسلسلة واحدة.

تقوم الدالة perform() بتنفيذ الإجراء المُنشأ على المتصفح. وبدونها، يتم وضع التفاعلات المتسلسلة في قائمة الانتظار فقط ولا يتم إرسالها فعليًا إلى الصفحة.

استخدم الدالة moveToElement(element) على كائن Actions، ثم استدعِ الدالتين build() و perform(). سيؤدي هذا إلى نقل المؤشر إلى مركز العنصر وتفعيل أي سلوك عند تمرير المؤشر فوقه، مثل قائمة منسدلة.

يدعم النقر مع الاستمرار، والنقر السياقي، والنقر المزدوج، والسحب والإفلات، والسحب والإفلات حسب، والضغط على المفتاح، ورفع المفتاح، والتحريك حسب الإزاحة، والتحريك إلى العنصر، والإفلات، وإرسال المفاتيح - مما يغطي معظم التفاعلات المتقدمة.

تستخدم أدوات الذكاء الاصطناعي محددات مواقع ذاتية الإصلاح تتكيف مع تغير العناصر، مما يقلل من حالات الفشل غير المتوقعة في اختبارات التمرير والسحب والإفلات. كما أنها توصي بمسارات XPath مستقرة وتضيف فترات انتظار ذكية تلقائيًا.

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

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