So, the only workaround I could think of was to automatically click the Yes button (or maybe send alt+y). Below is the python code that seems to do the trick for me:
import win32gui import win32api def ie_secalert_yes(maxtry=10): """Left click YES button if the IE Security Alert dialog is found. Put this is in a thread, lest it be blocked from ever finding the alert. Keyword arguments: maxtry -- Give up looking for dialog after this many attempts (default 10) Note: (hdlg) FindWindow did not seem to work with class = "Dialog", but 32770 does. """ hdlg = 0 hwnd = 0 curtry = 0 while curtry < maxtry: hdlg = win32gui.FindWindow(32770, "Security Alert") if hdlg == 0: curtry += 1 time.sleep(0.2) else: curtry=maxtry if hdlg > 0: hwnd = win32gui.FindWindowEx(hdlg,0,"Button", "&Yes") if hwnd > 0: win32api.PostMessage(hwnd, 0x0201, 0, 0) #WM_LBUTTONDOWN win32api.PostMessage(hwnd, 0x0202, 0, 0) #WM_LBUTTONUP
You could return hdlg or hwnd if you wanted, they'll be > 0 if the dialog was found. The above also works fine when there is no alert dialog too, in case there's any concern. This could easily be adapted/extended to handle any other window outside of selenium's control.
You should put the above in a thread (I used a timer), then init the timer before selenium, but run it after selenium.start, an example
t = threading.Timer(3.0, ie_secalert_yes) self.selenium = selenium("localhost", 4444, "*iexplore", URL) self.selenium.start() t.start()
Caveats: Only tested in Windows XP, Selenium RC 2, and Python 2.6.5, Internet Explorer 6.