Gradle > работа с окнами/поп-ап: узнать кол-во, закрыть...

Gradle + Selenide + Cucumber всё в Intelj Idea

при логине в приложение - может всплывать от 0 до 3 (обычно 1) поп-ап окон.

ВАЖНО: фокус НЕ переводится в эти всплывающие окна, т.е. если запросить getWindowHandler() - он вернёт значение базовой страницы

я реализовал максимально простой вариант:

switchTo().window(1);
closeWindow();
switchTo().window(0);

но в этом варианте есть 2 проблемы:

  1. если вдруг не случилось ни одного поп-апа - то сценарий вылетает по эксепшену
  2. изза п.1. не возможно добавить код вроде

switchTo().window(3);
switchTo().window(2);

можно было бы написать поиск по title-ам этих поп-апов… но хотелось бы какого-то универсального решения, вроде:

int winNum = $(get number of opened windows/pop-ups)
for (int i = winNum; i >=1; i-- ){
switchTo.window(i);
closeWindow();
switchTo.window(i-1);
}

не подскажите как лучше реализовать закрытие ВСЕХ всплывших окон?

поковырявшись в примерах Selenium получился вот такой код:

предварительно, после исполнения open()

String mainWinHandler = WebDriverRunner.getWebDriver.getWindowHandler();

затем при входе в приложение:

for (String: win: WebDriverRunner.getWebDriver.getWindowHandlers()){
       switchTo.window(win);
       if (!win.equals(mainWinHandler)){
            closeWindow();
       }
}
switchTo.window(winMainHandler);

если вдруг есть более удачное решение - поделитесь плз…

Да не, нормальное решение. Можно его ещё чуть укоротить:

for (String: win: WebDriverRunner.getWebDriver.getWindowHandlers()){
       if (!win.equals(mainWinHandler)){
            switchTo.window(win);
            closeWindow();
       }
}
switchTo.window(winMainHandler);