Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

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


(Ezzr Qvap) #1

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

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

(Taras) #2

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


(Ezzr Qvap) #3

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


(Taras) #4

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


(Ezzr Qvap) #5

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


(Taras) #6

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


(Ezzr Qvap) #7

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


#8

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


(Ezzr Qvap) #9

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