Удаленка для jenkins+selenide+selenoid+allure+docker спецов на 2-3 часа в день. 100% remote! Присоединиться к проекту

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

java
webdriver
Теги: #<Tag:0x00007fedc45a15b8> #<Tag:0x00007fedc45a1400>

(Артем Хоружий) #1

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

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

Браузер Chrome.


(Dmitry Astanin) #2

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


(Vasiliy Rakshin) #3

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

    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;
                }
            }
        });
    }

(Артем Хоружий) #4
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";
    }

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


(Vasiliy Rakshin) #5

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


(Артем Хоружий) #6
    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)


(Vasiliy Rakshin) #7

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


(Артем Хоружий) #8


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


(Артем Хоружий) #9

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


(Vasiliy Rakshin) #10

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


(Артем Хоружий) #11

А как можно?


(Vasiliy Rakshin) #12

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


(Артем Хоружий) #13

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


(Vasiliy Rakshin) #14

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