كيفية التعامل مع التنبيهات والنوافذ المنبثقة في Selenium?

⚡ ملخص ذكي

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

  • 🔔 التعريف الأساسي: A Selenium التنبيه هو Javaمربع حوار برمجي يظهر أعلى الصفحة، ويجب معالجته قبل اتخاذ أي إجراءات أخرى.
  • 🗂️ ثلاثة أنواع من التنبيهات: تتطلب كل من Simple (معلومات)، و Prompt (إدخال نص)، و Confirmation (نعم/لا) استدعاءات WebDriver مختلفة.
  • 🛠️ واجهة برمجة تطبيقات التنبيهات: استخدم driver.switchTo().alert() مع accept() و dismiss() و getText() و sendKeys() للتفاعل مع مربع الحوار.
  • 🪟 معالجة النوافذ: تقوم الدالة getWindowHandle() بإرجاع معرف النافذة الحالي؛ وتقوم الدالة getWindowHandles() بإرجاع المجموعة الكاملة للتبديل.
  • 🚀 Selenium ملاحظة 4: Selenium يقوم المدير بحل برامج التشغيل تلقائيًا، مما يلغي الحاجة إلى مسارات chromedriver.exe المضمنة في الكود.
  • 🤖 مساعدة الذكاء الاصطناعي: تقوم وكلاء الذكاء الاصطناعي بإنشاء نصوص تنبيه ونوافذ مدركة للموقع، مما يقلل من الحاجة إلى إنشاء هياكل يدوية في مجموعات الاختبار.

كيفية التعامل مع التنبيهات والنوافذ المنبثقة في Selenium

ما هو التنبيه في Selenium?

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

في هذا الدرس التعليمي، ستتعلم كيفية التعامل مع النوافذ المنبثقة في Selenium وأنواع التنبيهات المختلفة الموجودة في تطبيقات الويب تجريبسنتعرف أيضًا على كيفية التعامل مع التنبيهات في Selenium WebDriver وكيفية قبوله أو رفضه بناءً على نوع التنبيه.

أنواع التنبيهات في Selenium

Javaيعرض البرنامج النصي ثلاثة مربعات حوار تنبيهية Selenium يجب التعامل معها بشكل مختلف.

1) Simple Alert

يعرض التنبيه البسيط معلومات أو تحذيراً على الشاشة. ولا يمكن للمستخدم تأكيده إلا بالنقر. OK.

مثال بسيط لنافذة تنبيه في المتصفح

2) Prompt Alert

يطلب التنبيه من المستخدم إدخال بيانات. Selenium يمكن لـ WebDriver الكتابة فيه باستخدام sendKeys("input...").

مربع حوار تنبيه مع حقل إدخال

3) Confirmation Alert

يطلب تنبيه التأكيد من المستخدم الموافقة على العملية أو إلغائها. وهو يعرض كلا الأمرين OK و إلغاء أزرار.

نافذة تنبيه للتأكيد مع زري "موافق" و"إلغاء".

كيفية التعامل مع التنبيه في Selenium ويب درايفر

استخدم Alert واجهة في Selenium ويب درايفر يكشف عن أربع طرق تغطي كل تفاعل مع التنبيهات.

  1. استبعاد باطل () — ينقر على إلغاء .
driver.switchTo().alert().dismiss();
  1. قبول باطل () — ينقر على OK .
driver.switchTo().alert().accept();
  1. سلسلة getText () — يلتقط رسالة التنبيه.
driver.switchTo().alert().getText();
  1. مفاتيح الإرسال باطلة (سلسلة stringToSend) — يكتب نصًا في تنبيه موجه.
driver.switchTo().alert().sendKeys("Text");

Eclipse تُظهر خاصية الإكمال التلقائي طرق التنبيه المتاحة بعد typing alert. في سطر المحرر. يمكنك التبديل من النافذة الرئيسية إلى نافذة التنبيه في أي وقت باستخدام Seleniumالصورة .التبديل إلى() الأسلوب.

Eclipse إكمال تلقائي يعرض طرق معالجة التنبيهات

مثال عملي: حذف عرض توضيحي للعميل

لنقم بأتمتة السيناريو التالي. سنستخدم Guru99 موقعًا تجريبيًا للتوضيح Selenium معالجة التنبيهات.

الخطوة 1) قم بتشغيل المتصفح وافتحه https://demo.guru99.com/test/delete_customer.php.

الخطوة 2) أدخل أي رقم تعريف للعميل.

حذف صفحة العرض التوضيحي للعميل مع حقل معرف العميل

الخطوة 3) انقر على إرسال .

اضغط على زر الإرسال لتفعيل تنبيه التأكيد

الخطوة 4) اقبل أو ارفض تنبيه التأكيد الناتج.

تنبيه تأكيد تم تفعيله بواسطة عملية الحذف

Selenium Java Code: مقبض Confirmation Alert

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.NoAlertPresentException;
import org.openqa.selenium.Alert;

public class AlertDemo {

    public static void main(String[] args) throws NoAlertPresentException, InterruptedException {
        // Selenium 4 ships Selenium Manager, so an explicit driver path is no longer required.
        WebDriver driver = new ChromeDriver();

        // Open the Delete Customer demo page
        driver.get("https://demo.guru99.com/test/delete_customer.php");

        driver.findElement(By.name("cusid")).sendKeys("53920");
        driver.findElement(By.name("submit")).submit();

        // Switch to the confirmation alert
        Alert alert = driver.switchTo().alert();

        // Capture the alert message
        String alertMessage = alert.getText();
        System.out.println(alertMessage);
        Thread.sleep(5000);

        // Accept the alert
        alert.accept();

        driver.quit();
    }
}

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

كيفية التعامل مع النوافذ المنبثقة Windows in Selenium ويب درايفر

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

driver.getWindowHandles()

يعود أ Set<String> لكل مقبض نافذة مفتوحة. قم بالتكرار على المجموعة للتبديل من النافذة الرئيسية إلى أي نافذة فرعية في التطبيق.

driver.getWindowHandle()

يعود أ String باستخدام المعرّف الفريد للنافذة الحالية. التقط هذا المعرّف قبل فتح أي نافذة فرعية حتى تتمكن من العودة إلى النافذة الرئيسية لاحقًا.

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

مثال عملي: تبديل النوافذ

الخطوة 1) قم بتشغيل المتصفح وافتحه https://demo.guru99.com/popup.php.

Guruصفحة هبوط تجريبية منبثقة 99

الخطوة 2) انقر على اضغط هنا رابط. تفتح نافذة فرعية جديدة.

يتم فتح نافذة فرعية من خلال رابط "انقر هنا".

الخطوة 3) تطلب نافذة البرنامج الفرعي من المستخدم إدخال معرف البريد الإلكتروني ثم إرساله.

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

الخطوة 4) أدخل عنوان البريد الإلكتروني ثم أرسل.

إرسال البريد الإلكتروني داخل نافذة الطفل

الخطوة 5) تعرض الصفحة بيانات اعتماد الوصول التي تم إرجاعها بواسطة العرض التوضيحي.

بيانات اعتماد الوصول المعروضة في نافذة الطفل

بعد عرض بيانات الاعتماد:

  1. أغلق نافذة الطفل.

إغلاق نافذة البرنامج الفرعية في المتصفح

  1. أعد التركيز إلى النافذة الرئيسية.

إعادة التركيز إلى النافذة الأصلية

Selenium Java Codeالتعامل مع عدة مهام Windows

import java.util.Iterator;
import java.util.Set;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class WindowHandle_Demo {

    public static void main(String[] args) throws InterruptedException {
        // Selenium 4 auto-resolves the browser driver via Selenium Manager
        WebDriver driver = new FirefoxDriver();

        driver.get("https://demo.guru99.com/popup.php");
        driver.manage().window().maximize();

        driver.findElement(By.xpath("//*[contains(@href,'popup.php')]")).click();

        String mainWindow = driver.getWindowHandle();

        // Capture every open window handle
        Set<String> allWindows = driver.getWindowHandles();
        Iterator<String> iterator = allWindows.iterator();

        while (iterator.hasNext()) {
            String childWindow = iterator.next();

            if (!mainWindow.equalsIgnoreCase(childWindow)) {
                // Switch to the child window
                driver.switchTo().window(childWindow);
                driver.findElement(By.name("emailid")).sendKeys("gaurav.3n@gmail.com");
                driver.findElement(By.name("btnLogin")).click();

                // Close the child window
                driver.close();
            }
        }
        // Return focus to the main window
        driver.switchTo().window(mainWindow);
        driver.quit();
    }
}

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

تم الانتهاء من معالجة النوافذ المتعددة في Selenium

خاتمة

  • حدد الثلاثة Selenium أنواع التنبيهات - بسيطة، وفورية، وتأكيدية - مع لقطة شاشة لكل منها.
  • تم توضيح كيفية التعامل مع التنبيهات باستخدام WebDriver Alert واجهة تستخدم سيناريو حذف عميل فعال.
  • تمت معالجة نوافذ المتصفح المتعددة عن طريق التقاط المقابض باستخدام getWindowHandle() و getWindowHandles() والتبديل بينهما.

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

التنبيه هو خاصية أصلية Javaمربع حوار برمجي يُوقف الصفحة مؤقتًا حتى يتم التعامل معه. النافذة المنبثقة هي نافذة أو تبويب جديد في المتصفح. تستخدم التنبيهات الدالة switchTo().alert()، بينما تستخدم النوافذ المنبثقة الدالة switchTo().window() مع المعرّف المُعاد من الدالة getWindowHandles().

يُثار استثناء NoAlertPresentException عند تشغيل switchTo().alert() دون وجود تنبيه معروض حاليًا. قم بتغليف الاستدعاء باستخدام WebDriverWait حتى يصبح ExpectedConditions.alertIsPresent() صحيحًا لإتاحة الوقت الكافي للصفحة لعرض مربع الحوار.

لا تُعدّ النوافذ المنبثقة للمصادقة الأساسية معيارًا قياسيًا Javaتنبيهات البرامج النصية. مرر بيانات الاعتماد في URL (https://user:pass@site.com) أو استخدم Selenium 4. CDP Network.setExtraHTTPHeaders. بالنسبة للنوافذ المنبثقة لتسجيل الدخول الموحد، استخدم BrowserStack أو معالج hasAuthentication المسجل.

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

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

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