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

Какво е предупреждение в 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 уебдрайвер предоставя четири метода, които обхващат всяко взаимодействие с предупреждения.
- void dismiss() — кликва върху Отказ бутон.
driver.switchTo().alert().dismiss();
- невалиден прием () — кликва върху OK бутон.
driver.switchTo().alert().accept();
- Низ getText() — записва предупредителното съобщение.
driver.switchTo().alert().getText();
- void sendKeys (низ stringToSend) — въвежда текст в подканово предупреждение.
driver.switchTo().alert().sendKeys("Text");
Eclipse Автоматичното довършване показва наличните методи за предупреждение след typing alert. на реда на редактора. Превключете от главния прозорец към предупреждението по всяко време, като използвате SeleniumЕ .switchTo() метод.
Разработен пример: Изтриване на демо версия на клиент
Нека автоматизираме следния сценарий. Ще използваме 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.
Стъпка 2) Щракнете върху Натисни тук връзка. Отваря се нов дъщерен прозорец.
Стъпка 3) Дъщерният прозорец подканва потребителя да въведе имейл адрес и да го изпрати.
Стъпка 4) Въведете имейл адреса и го изпратете.
Стъпка 5) Страницата показва данните за достъп, върнати от демонстрацията.
След показване на идентификационните данни:
- Затворете детския прозорец.
- Превключване на фокуса обратно към родителския прозорец.
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 видове предупреждения – прости, бързи и потвърдителни – със екранна снимка за всяко от тях.
- Демонстрирана обработка на предупреждения с WebDriver
Alertинтерфейс, използващ работещ сценарий за изтриване на клиент. - Обработва множество прозорци на браузъра чрез заснемане на манипулатори с
getWindowHandle()намляваgetWindowHandles()и превключване между тях.















