When opening the print page in Firefox a print dialog is triggered. As is mentioned in the answer linked here (How to handle print dialog in Selenium?), Selenium's WebDriver cant handle these sorts of browser (or OS) dialogs.
Im using Selenium with Java to test a particular website. So I included the following code (as was suggested by the answer linked above) which employed the use of Java Robot to get rid of the print dialog.:
// press Escape programatically - the print dialog must have focus, obviously.
Robot r = new Robot();
r.keyPress(KeyEvent.VK_ESCAPE);
r.keyRelease(KeyEvent.VK_ESCAPE);
This answer made sense to me because when I manually pressed the escape key, the print dialog was dismissed.
Unfortunately, the code mentioned above did not work for me i.e. the print dialog remained there. As suggested by some other posts, I made sure to wait until the print dialog appeared.
While running the automated test code I'm not entirely sure whether "the print dialog was focused" (as is mentioned in the comment in the code given above). I tried multiple methods to get it "in focus" such as switching to the last web handle, switching to the browser alert etc and all of those threw errors. This further confirmed to me the idea that selenium was unable to handle this dialog. I do suspect that the lack of "focus" on the print dialog is where I'm running into the issue.
I want to be able to dismiss this modal because I open the print page multiple times during my testing run which means that multiple print dialogs open. Once the testing code is completed, the browser quits and only one of these dialogs is closed. Could you please help me figure out what I'm doing wrong?
Im using the following:
- Geckodriver version: geckodriver-v0.26.0-macos
- Java: 1.8.0_191
- MacOS: Version 10.15.5 (19F101)
- Firefox version: 78.0.2
Please do let me know what other information I could include to help you answer this. Thanks! I would have commented on the thread I mentioned, but Im new to StackOverflow and you need 50 reputation points to make a comment :(