Как да се справяме с предупреждения и изскачащи прозорци в Selenium?

⚡ Умно обобщение

Сигнали и изскачащи прозорци в Selenium сте JavaДиалогови прозорци на скриптове и дъщерни прозорци, които блокират потока на автоматизация. Тази статия обяснява как да се идентифицират прости, подканващи и потвърдителни сигнали, да се превключва към тях с WebDriver и да се управляват множество прозорци с помощта на getWindowHandles().

  • 🔔 Основна дефиниция: A Selenium предупреждението е JavaДиалоговият прозорец на скрипта, изобразен над страницата, трябва да бъде обработен преди по-нататъшни действия.
  • 🗂️ Три вида предупреждения: Обикновено (информация), подкана (въвеждане на текст) и потвърждение (Да/Не) изискват различни извиквания на WebDriver.
  • 🛠️ API за предупреждения: Използвайте driver.switchTo().alert() с accept(), dismiss(), getText() и sendKeys(), за да взаимодействате с диалоговия прозорец.
  • 🪟 Работа с прозорци: getWindowHandle() връща текущия идентификатор на прозореца; getWindowHandles() връща пълния набор за превключване.
  • ???? Selenium Забележка: Selenium Мениджърът автоматично разрешава драйверите, премахвайки необходимостта от твърдо кодирани пътища към chromedriver.exe.
  • 🤖 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 намлява Отказ бутони.

Диалогов прозорец за потвърждение с бутони OK и Cancel

Как да се справим с предупреждение в Selenium уебдрайвер

- Alert интерфейс в Selenium уебдрайвер предоставя четири метода, които обхващат всяко взаимодействие с предупреждения.

  1. void dismiss() — кликва върху Отказ бутон.
driver.switchTo().alert().dismiss();
  1. невалиден прием () — кликва върху OK бутон.
driver.switchTo().alert().accept();
  1. Низ getText() — записва предупредителното съобщение.
driver.switchTo().alert().getText();
  1. void sendKeys (низ stringToSend) — въвежда текст в подканово предупреждение.
driver.switchTo().alert().sendKeys("Text");

Eclipse Автоматичното довършване показва наличните методи за предупреждение след typing alert. на реда на редактора. Превключете от главния прозорец към предупреждението по всяко време, като използвате SeleniumЕ .switchTo() метод.

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 предоставя два метода, които правят това възможно.

драйвер.getWindowHandles()

Връща a Set<String> на всеки отворен дескриптор на прозорец. Обходете множеството, за да превключите от главния прозорец към всеки дъщерен прозорец в приложението.

driver.getWindowHandle()

Връща a String с уникалния дескриптор на текущия прозорец. Запишете това, преди да отворите дъщерен прозорец, за да можете да се върнете към родителския по-късно.

Следвайте тези стъпки, за да демонстрирате обработката на прозорци спрямо Guru99 изскачаща демонстрация.

Разработен пример: Превключване на прозорци

Стъпка 1) Стартирайте браузъра и отворете https://demo.guru99.com/popup.php.

Guru99 изскачащи демонстрационни целеви страници

Стъпка 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() стане true, за да дадете време на страницата да задейства диалоговия прозорец.

Изскачащите прозорци за основно удостоверяване не са стандартни JavaИзвестия за скриптове. Предайте идентификационните данни в URL (https://user:pass@site.com) или използвайте Selenium 4 CDP Network.setExtraHTTPHeaders. За изскачащи прозорци за единично влизане (SSO) използвайте BrowserStack или регистриран манипулатор hasAuthentication.

Асистенти с изкуствен интелект, като например AI Копилотите на кода генерират обработчици на предупреждения, съобразени с локатора, предвиждат необходимите чакания и рефакторират крехкия XPath. Те също така изготвят твърдения за текст на предупреждения и дъщерен прозорец. URLс, ускоряващ Selenium създаване на тест.

Да. Самовъзстановяващите се тестови платформи използват изкуствен интелект, за да откриват промени в DOM, да сменят повредени локатори и да коригират чаканията, когато се променят предупрежденията или изскачащите прозорци. Това намалява поддръжката за Selenium пакети, работещи с често актуализирани интерфейси.

Обобщете тази публикация с: