Возникла проблема с обработкой Alert при использовании FirefoxDriver (а точнее RemoteWebDriver). При появлении Alert он не хендлится как с помощью ожидания UnexpectedAlertException так и при попытке перейти на алерт, с игнорированием NoAlertPresentException.
Версии браузера и селениума последние, но и на более ранних версиях было.
А данный “алерт” - нативный (alert, prompt и тд) или какой-нибудь хитрый, фреймворочный? Можно пример кода как он вызывается + пример кода как вы его обрабатываете webdriver-ом.
Этот алерт появляется после закрытия дополнительного всплывающего окна. Алерт находится в основном окне и содержит просьбу обновить страницу.
Для перехода в основное окно используется метод (опустим вопрос откуда драйвер и какой метод из какого хелпера ):
Для обработки используется метод > accetptAlert()
public static void switchToSpecificWindow(final String value, int seconds, final boolean isByTitle) {
try {
new WebDriverWait(getDriver(), seconds).until((WebDriver driver) -> {
for (String handle : driver.getWindowHandles()) {
driver.switchTo().window(handle);
acceptAlert();
if ((isByTitle && driver.getTitle().contains(value))
|| driver.getCurrentUrl().contains(value)) {
return true;
}
}
return false;
});
} catch (WebDriverException ex) {
throw new WebDriverException("Cannot switch to Specific window - time out");
}
}
private static boolean acceptAlert() {
try {
Alert alert = getDriver().switchTo().alert();
alertStorage.setAlertText(alert.getText());
alert.accept();
return true;
} catch (NoAlertPresentException ignored) {
return false;
}
}
Попытка дождаться появления алерта и словить UnhandledAlertException не работает потому что нужно переключиться в нужное окно для начала.
Данный метод работает в ИЕ, в хроме он не нужен потому что страница сама без алерта перезагружается.
На данный момент проблема не актуальна из-за обновления браузера на виртуалках до последней версии, но это привело просто к тому что алерт не появляется... но не решило проблему :smile: