วิธีจัดการการแจ้งเตือนและป๊อปอัปใน Selenium?

⚡ สรุปอย่างชาญฉลาด

การแจ้งเตือนและป๊อปอัพใน Selenium เป็น Javaสคริปต์ไดอะล็อกและหน้าต่างย่อยที่ขัดขวางการทำงานของระบบอัตโนมัติ บทความนี้อธิบายวิธีการระบุการแจ้งเตือนแบบง่าย การแจ้งเตือนแบบทันที และการแจ้งเตือนแบบยืนยัน วิธีการสลับไปยังการแจ้งเตือนเหล่านั้นด้วย WebDriver และการจัดการหน้าต่างหลายบานโดยใช้ getWindowHandles()

  • 🔔 คำจำกัดความหลัก: A Selenium การแจ้งเตือนคือ Javaมีกล่องโต้ตอบสคริปต์แสดงอยู่เหนือหน้าเว็บ ซึ่งต้องจัดการก่อนดำเนินการต่อไป
  • 🗂️ มีการแจ้งเตือน 3 ประเภท: ฟังก์ชัน Simple (ข้อมูล), Prompt (ป้อนข้อความ) และ Confirmation (ใช่/ไม่ใช่) แต่ละแบบต้องการการเรียกใช้ WebDriver ที่แตกต่างกัน
  • 🛠️ API แจ้งเตือน: ใช้ driver.switchTo().alert() ร่วมกับ accept(), dismiss(), getText() และ sendKeys() เพื่อโต้ตอบกับกล่องโต้ตอบ
  • 🪟 การจัดการหน้าต่าง: getWindowHandle() จะส่งคืน ID ของหน้าต่างปัจจุบัน ส่วน getWindowHandles() จะส่งคืน Set ทั้งหมดสำหรับการสลับหน้าต่าง
  • 🚀 Selenium 4 หมายเหตุ: Selenium โปรแกรมจัดการไดรเวอร์จะแก้ไขไดรเวอร์โดยอัตโนมัติ ทำให้ไม่จำเป็นต้องระบุเส้นทางของ chromedriver.exe แบบตายตัว
  • 🤖 ความช่วยเหลือจาก AI: เอージェนต์ AI สร้างสคริปต์การแจ้งเตือนและหน้าต่างที่คำนึงถึงตำแหน่งที่ตั้ง ช่วยลดการสร้างโครงร่างด้วยตนเองในชุดทดสอบ

วิธีจัดการการแจ้งเตือนและป๊อปอัปใน 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 ไดรเวอร์เว็บ นำเสนอ 4 วิธีที่ครอบคลุมการโต้ตอบการแจ้งเตือนทุกรูปแบบ

  1. ยกเลิกเป็นโมฆะ () — คลิก ยกเลิก ปุ่ม
driver.switchTo().alert().dismiss();
  1. เป็นโมฆะยอมรับ () — คลิก OK ปุ่ม
driver.switchTo().alert().accept();
  1. สตริงgetText() — บันทึกข้อความแจ้งเตือน
driver.switchTo().alert().getText();
  1. เป็นโมฆะ sendKeys (สตริง stringToSend) — พิมพ์ข้อความลงในช่องข้อความแจ้งเตือน
driver.switchTo().alert().sendKeys("Text");

Eclipse ระบบเติมข้อความอัตโนมัติจะแสดงวิธีการแจ้งเตือนที่มีให้เลือกหลังจากพิมพ์ping alert. บนบรรทัดแก้ไข สลับจากหน้าต่างหลักไปยังการแจ้งเตือนได้ตลอดเวลาโดยใช้ Selenium's .switchTo() วิธี

Eclipse แสดงวิธีจัดการการแจ้งเตือนแบบเติมข้อความอัตโนมัติ

ตัวอย่างการใช้งาน: ลบข้อมูลลูกค้าทดลองใช้

เรามาสร้างระบบอัตโนมัติสำหรับสถานการณ์ต่อไปนี้กัน เราจะใช้ Guruเว็บไซต์สาธิต 99 แห่งเพื่อแสดงให้เห็น 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();
    }
}

Output: เบราว์เซอร์จะเปิดหน้า "ลบข้อมูลลูกค้า" ป้อนรหัสลูกค้า ยอมรับข้อความยืนยัน และลบข้อมูลออกจากแอปพลิเคชันสาธิต

วิธีรับมือกับป๊อปอัป Windows in Selenium ไดรเวอร์เว็บ

เมื่อระบบอัตโนมัติต้องทำงานข้ามหน้าต่างเบราว์เซอร์หลายหน้าต่าง การทดสอบจะต้องสลับโฟกัสระหว่างหน้าต่างเหล่านั้นและกลับไปยังหน้าต่างหลักหลังจากแต่ละการดำเนินการ Selenium WebDriver มีสองเมธอดที่ทำให้สิ่งนี้เป็นไปได้

driver.getWindowHandles()

ส่งคืน a Set<String> ของแฮนเดิลหน้าต่างที่เปิดอยู่ทุกบาน วนซ้ำชุดเพื่อสลับจากหน้าต่างหลักไปยังหน้าต่างย่อยใดๆ ในแอปพลิเคชัน

ไดร์เวอร์.getWindowHandle()

ส่งคืน a String โดยใช้แฮนเดิลเฉพาะของหน้าต่างปัจจุบัน บันทึกแฮนเดิลนี้ก่อนเปิดหน้าต่างย่อยใดๆ เพื่อให้คุณสามารถกลับไปยังหน้าต่างหลักได้ในภายหลัง

ทำตามขั้นตอนเหล่านี้เพื่อสาธิตการจัดการหน้าต่างกับ... Guruสาธิตป๊อปอัพ 99 รายการ

ตัวอย่างการใช้งาน: การสลับหน้าต่าง

ขั้นตอน 1) เปิดเบราว์เซอร์และเปิด https://demo.guru99.com/popup.php.

Guruหน้า Landing Page สาธิตป๊อปอัพ 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();
    }
}

Output: เว็บไซต์เปิดตัวแล้ว คลิกที่นี่ ลิงก์นี้จะเปิดแท็บย่อย Selenium ป้อนอีเมลและกดส่ง ปิดหน้าต่างย่อย และกลับไปยังหน้าต่างหลัก

การจัดการหน้าต่างหลายบานเสร็จสมบูรณ์แล้ว Selenium

สรุป

  • กำหนดทั้งสาม Selenium ประเภทของการแจ้งเตือน — แบบง่าย แบบแจ้งเตือนทันที และแบบยืนยัน — พร้อมภาพหน้าจอประกอบแต่ละประเภท
  • สาธิตการจัดการการแจ้งเตือนด้วย WebDriver Alert อินเทอร์เฟซที่ใช้สถานการณ์การลบลูกค้าที่ใช้งานได้จริง
  • จัดการหน้าต่างเบราว์เซอร์หลายหน้าต่างโดยการจับแฮนด์เดิลด้วย getWindowHandle() และ getWindowHandles() และสลับไปมาระหว่างสิ่งเหล่านั้น

คำถามที่พบบ่อย

การแจ้งเตือนเป็นคุณสมบัติพื้นฐาน Javaสคริปต์ไดอะล็อกที่ระงับหน้าเว็บไว้จนกว่าจะได้รับการจัดการ หน้าต่างป๊อปอัพคือหน้าต่างหรือแท็บใหม่ของเบราว์เซอร์ การแจ้งเตือนใช้ switchTo().alert(); ป๊อปอัพใช้ switchTo().window() โดยใช้แฮนเดิลที่ส่งคืนโดย getWindowHandles()

ข้อผิดพลาด NoAlertPresentException จะเกิดขึ้นเมื่อเรียกใช้ switchTo().alert() แต่ไม่มีการแจ้งเตือนใด ๆ แสดงอยู่ในขณะนี้ ให้ครอบการเรียกใช้ด้วย WebDriverWait until ExpectedConditions.alertIsPresent() เป็นจริง เพื่อให้หน้าเว็บมีเวลาในการเรียกใช้กล่องโต้ตอบ

หน้าต่างป๊อปอัพขอสิทธิ์การเข้าถึงขั้นพื้นฐานไม่ใช่มาตรฐาน Javaสคริปต์แจ้งเตือน ส่งข้อมูลรับรองใน URL (https://user:pass@site.com) หรือใช้ Selenium 4. CDP Network.setExtraHTTPHeaders สำหรับป๊อปอัป SSO ให้ใช้ BrowserStack หรือแฮนด์เลอร์ hasAuthentication ที่ลงทะเบียนไว้

ผู้ช่วย AI เช่น AI ผู้ช่วยเขียนโค้ดจะสร้างตัวจัดการการแจ้งเตือนที่คำนึงถึงตำแหน่ง ทำนายเวลารอที่จำเป็น และปรับปรุง XPath ที่เปราะบาง นอกจากนี้ยังร่างข้อความยืนยันสำหรับข้อความแจ้งเตือนและหน้าต่างย่อยด้วย URLs, เร่งความเร็ว Selenium การสร้างการทดสอบ

ใช่แล้ว แพลตฟอร์มทดสอบที่แก้ไขตัวเองได้จะใช้ AI ในการตรวจจับการเปลี่ยนแปลงของ DOM สลับตัวระบุตำแหน่งที่เสียหาย และปรับเวลารอเมื่อการแจ้งเตือนหรือป๊อปอัพเปลี่ยนแปลง ซึ่งจะช่วยลดภาระในการบำรุงรักษา Selenium ชุดโปรแกรมที่ทำงานร่วมกับส่วนหน้าเว็บที่มีการอัปเดตบ่อยครั้ง

สรุปโพสต์นี้ด้วย: