I am using a Chrome Driver and trying to test a webpage.
Normally it runs fine, but sometimes I get exceptions:
org.openqa.selenium.UnhandledAlertException: unexpected alert open
(Session info: chrome=38.0.2125.111)
(Driver info: chromedriver=2.9.248315,platform=Windows NT 6.1 x86) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 16 milliseconds: null
Build info: version: '2.42.2', revision: '6a6995d', time: '2014-06-03 17:42:30'
System info: host: 'Casper-PC', ip: '10.0.0.4', os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.8.0_25'
Driver info: org.openqa.selenium.chrome.ChromeDriver
Then I tried to handle the alert:
Alert alt = driver.switchTo().alert();
alt.accept();
But this time I received:
org.openqa.selenium.NoAlertPresentException
I am attaching the screenshots of the alert:
I am not able to figure out what to do now. The problem is that I do not always receive this exception. And when it occurs, the test fails.
You can use
Wait
functionality in Selenium WebDriver to wait for an alert, and accept it once it is available.In C# -
Its equivalent in Java -
It will wait for 5 seconds until an alert is present, you can catch the exception and deal with it, if the expected alert is not available.
I had this problem too. It was due to the default behaviour of the driver when it encounters an alert. The default behaviour was set to "ACCEPT", thus the alert was closed automatically, and the switchTo().alert() couldn't find it.
The solution is to modify the default behaviour of the driver ("IGNORE"), so that it doesn't close the alert:
Then you can handle it:
You can try this snippet:
Following is working for me
You can use
UnexpectedAlertBehaviour.ACCEPT
orUnexpectedAlertBehaviour.DISMISS
Is your switch to alert within a try/catch block? You may also want to add a wait timeout to see if the alert shows up after a certain delay