I'm trying to write a test with selenium in python language for a web page that manages users. In this page someone can add role for users and if a role exists while adding it, an alert raises. I don't know if the alert is a javascript alert or an element of the web page. I want to automatically check the existence of the alert, because checking for the role in the list wastes time and has an enormous load. I tried this:
browser = webdriver.Firefox()
browser.get("url")
browser.find_the_element_by_id("add_button").click()
try:
alert = browser.switch_to_alert()
alert.accept()
print "alert accepted"
except:
print "no alert"
But it didn't work and I got the "UnexpectedAlertPresentException". I also tried this:
browser = webdriver.Firefox()
browser.get("url")
browser.find_the_element_by_id("add_button").click()
s = set(browser.window_handles)
s.remove(browser.current_window_handle)
browser.switch_to_window(s.pop())
But I got the same exception. Additionally, I tried to access the alert with firebug to check if I can get access with its properties, but right click was disabled. I need a solution very quickly, even in other languages. I can understand the approach anyway. I will appreciate any help.
In java we do it like this
It will implicitly wait for alert if alert is not present it will throw 'Alert is not present Exceptio' which we can catch and move ahead.
Hope it helps.
I know this is a too late answer and you have solved this question years ago, but I still want to post my analysis and findings for possible future readers' reference.
I am working on a Django website development project, and currently there is a bug that once a particular web page is opened, an error message box is popped up. My environment is:
I read the document here about the "UnexpectedAlertPresentException", and it says:
I tested in my project and my findings are:
find_element_by_X
methods can succeed.Therefore, I think the
try...catch
block doesn't work because the "UnexpectedAlertPresentException" is thrown in the line ofThis also means that the alert box may appear as soon as the web page is opened by this line:
In other words, there might be a problem hidden deeper behind that caused the alert box up as soon as the page is opened. You may need to fix that problem first.
Another thing is: Assuming the alert box showed up after this line:
Then the
alert = browser.switch_to_alert()
should work well with no exception thrown, which contradicts to what you describe here. This also made me think that the problem is as early as thebrowser.get("url")
line.I'm not very sure how the selected solution helped you solve the problem because my analysis shows the problem lies in a different place. Anyway, I am not asking for reselecting the accepted solution. I just want to share my thoughts for future readers. Apologize in case that I overlooked or misunderstood something in this question which caused my analysis to be wrong (and which wastes your time reading this :-).
What I do is to set a conditional delay with WebDriverWait just before the point I expect to see the alert, then switch to it, like this:
WebDriverWait(browser,
3)
will wait for at least 3 seconds for a supported alert to appear.