Не могу переключиться в алерт. Java + Selenium WebDriver

Всем привет. Не могу понять почему здесь выбраcывается NoAlertPresentException.

element.findElement(getCallSales()).click();
Alert alert;
try {
     driver.switchTo().alert();
} catch (NoAlertPresentException e) {
     System.out.println("Exception");
}

Браузер Chrome.

Эм… мб его на самом деле нет?) Попробуйте подебажить, и выполнить driver.switchTo().alert(); именно в тот момент, когда вы уверены, что алерт отображается

Потому что надо подождать появление алерта, а не переключаться сразу на него.
Что-то типа так

    public static Alert getAlert(final long time) {
        return new WebDriverWait(driver, time, 200).until(new ExpectedCondition<Alert>() {
            @Override
            public Alert apply(WebDriver d) {
                Alert alert = d.switchTo().alert();
                if (alert != null) {
                    return alert;
                } else {
                    return null;
                }
            }
        });
    }
2 Likes
public String checkAlertPresenceAfterClickOnCallSales(WebElement element){
        element.findElement(getCallSales()).click();


        (new WebDriverWait(driver, 5, 5000)).until(new ExpectedCondition<Alert>() {
            @Override
            public Alert apply(WebDriver driver) {
                Alert alert = driver.switchTo().alert();
                if (alert != null){
                    return alert;
                } else {
                    return null;
                }
            }
        });
        return "+ Alert appeared.\n";
    }

Все-таки по прежнему бросает экспепшн

надо WebDriverWait(driver, 5000, 200)

1 Like
    public String checkAlertPresenceAfterClickOnCallSales(WebElement element){
        element.findElement(getCallSales()).click();

        try {
            (new WebDriverWait(driver, 10, 200)).until(new ExpectedCondition<Alert>() {
                @Override
                public Alert apply(WebDriver driver) {
                    Alert alert = driver.switchTo().alert();
                    if (alert != null){
                        return alert;
                    } else {
                        return null;
                    }
                }
            });
        } catch (Exception e){
            System.out.println(e.toString());
        }

        return "+ Alert with text appeared.\n";

Все-таки по-прежнему не проходит. Вот такой вывод в этом случае: org.openqa.selenium.TimeoutException: Expected condition failed: waiting for com.hpe.automation.verifyelement.components.ContactUs$1@a99c42c (tried for 10 second(s) with 200 milliseconds interval)

Так значит это у вас не алерт появляется. Вы разницу понимаете между алертом и каком-нибудь скриптовом на странице сообщении?

1 Like


Ну это же алерт, верно?

Хотя все-таки это не алерт. Как можно отловить с помощью селениума это скриптовое сообщение на странице?

Селениумом - никак.

1 Like

А как можно?

Что там у вас после согласия происходит? Скачивается файл?

1 Like

Окно для выбора программы для набора номера.

Проверяйте изредка это руками, не автоматизируйте. Это стандартный фукционал браузера.

1 Like