t.me/atinfo_chat Telegram группа по автоматизации тестирования

как обработать модальный диалог при выходе из аккаунта

При выходе из аккаунта по ссылке

<a href="login.php?do=logout&amp;logouthash=4637900989834072386734876" onclick="return log_out('Вы действительно хотите выйти?')">Выход</a>

появляется диалоговое окно с кнопками “ок” и “отмена”.
Но на этом диалоге не действует контекстное меню браузера, чтобы понять как найти и обработать эту кнопку с помощью вебдрайвера.

При инициализации firefox вебдрайвера я использую
CapabilityType.UNEXPECTED_ALERT_BEHAVIOUR, UnexpectedAlertBehaviour.IGNORE
но видно на это диалоговое окно это не срабатывает.

Как подтвердить выход на этом диалоге?

Попробовал сделать так

Keyboard keyboard = ((HasInputDevices) wd).getKeyboard();
keyboard.pressKey(Keys.ENTER); // ошибка - строка 217

но показывает ошибку на указанной строке

Exception in thread "main" org.openqa.selenium.UnhandledAlertException: Modal dialog present: Вы действительно хотите выйти?
Driver info: org.openqa.selenium.firefox.FirefoxDriver
Capabilities [{platform=WINDOWS, acceptSslCerts=true, javascriptEnabled=true, cssSelectorsEnabled=true, databaseEnabled=true, browserName=firefox, handlesAlerts=true, nativeEvents=false, webStorageEnabled=true, rotatable=false, locationContextEnabled=true, applicationCacheEnabled=true, takesScreenshot=true, version=47.0.2}]
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
	at java.lang.reflect.Constructor.newInstance(Unknown Source)
	at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:206)
	at org.openqa.selenium.remote.ErrorHandler.createUnhandledAlertException(ErrorHandler.java:187)
	at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:154)
	at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:678)
	at org.openqa.selenium.remote.RemoteExecuteMethod.execute(RemoteExecuteMethod.java:35)
	at org.openqa.selenium.remote.RemoteKeyboard.pressKey(RemoteKeyboard.java:43)
	at main.Start.run(Start.java:217)
	at main.Start.main(Start.java:40)

webdriver.switchTo().alert().dismiss()

только не dismis а accept …
сделал так, - действительно выходит из аккаунта, но программа показывает ошибку на этой строке
Exception in thread "main" org.openqa.selenium.NoAlertPresentException: No alert is present (WARNING: The server did not provide any stacktrace information)

покажите код и строку где ошибка

все-таки dimiss сработал… (с ним ошибка не появляется)
хотя dismiss - отменить, а акцепт - подтвердить
где логика?

нужно посметреть Ваш код где NoAlertException кидает

там особо смотреть нечего, т.к. эта ошибка возникала на строке
webdriver.switchTo().alert().accept();
когда я заменил на dismiss(), то не ошибка не проявлялась, но
возможно нужно было просто добавить задержку перед accept()

Возможно alert не успевает появиться, когда драйвер пытается на него свичнуться, попробуй вейт поставить

1 Симпатия

я тоже пришел к такому выводу, что дело скорее всего было в задержке