Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to handle/accept JS Alerts in PhantomJS using WebDriver?

Being new to PhantomJSDriver for Selenium, how does it handle JS alerts?

I've found the JSPhantom onAlert documentation, but what would the equivalent PhantomJSDriver code for

Driver.SwitchTo().Alert().Accept();

be?

At the moment, I've returning early with a guard clause for PhantomJSDriver, to stop exceptions, but how should js alerts in PhantomJS be interacted with?

like image 693
StuperUser Avatar asked Dec 24 '22 20:12

StuperUser


1 Answers

I had similar problems with PhantomJS Web Driver handling alerts. The below code seems to resolve the issue. This is a C# implementation but should work with Java too..

      public IAlert GetSeleniumAlert()
            {
                //Don't handle Alerts using .SwitchTo() for PhantomJS
                if (webdriver is PhantomJSDriver)
                {
                  var js = webdriver as IJavaScriptExecutor;

                 
                  var result = js.ExecuteScript("window.confirm = function(){return true;}") as string;
                    
                  ((PhantomJSDriver)webdriver).ExecutePhantomJS("var page = this;" +
                                                 "page.onConfirm = function(msg) {" +
                                                 "console.log('CONFIRM: ' + msg);return true;" +
                                                    "};");
                  return null;
                }

                try
                {
                    return webdriver.SwitchTo().Alert();
                }
                catch (NoAlertPresentException)
                {
                    return null;
                }
            }

And later in the code where you expect Alerts to occur

IAlert potentialAlert = GetSeleniumAlert();
                if (potentialAlert != null) //will always be null for PhantomJS
                {
                    //code to handle Alerts
                    IAlert alert=webDriver.SwitchTo().Alert();
                    alert.Accept();
                }

For PhantomJS, we are setting the default response to Alerts as accept.

like image 144
JSDeveloper Avatar answered Feb 23 '23 12:02

JSDeveloper