Bypass "External protocol request" popup during selenium automation

I am using chromedriver with selenium and python. I encountered same problem and following code worked for me-

driver.execute_script("window.confirm = function(msg) { return true; }")

prefs = {"protocol_handler.excluded_schemes":{"afp":True,"data":True,"disk":True,"disks":True,"file":True,"hcp":True,"intent":True, "itms-appss":True, "itms-apps":True,"itms":True,"market":True,"javascript":True,"mailto":True,"ms-help":True,"news":True,"nntp":True,"shell":True,"sip":True,"snews":False,"vbscript":True,"view-source":True,"vnd":{"ms":{"radio":True}}}}    

chrome_options.add_experimental_option("prefs",prefs)

Let's say you want to suppress protocol handler popup for links starting with "sip://"
Just add an extra entry as "sip":True in "protocol_handler.excluded_schemes"


You have 2 possible options.

1) Is running a chrome with a predefined profile, where you have disabled protocol handling manually (via interface or config file) ("Local State" file in profile settings, you should add "waze": false in the appropriate section, you can search for "mailto" to know where is it).

2) Another way is to put put the setting in your tests' constructor before all your tests will start (I'll write an algo, because it depends on your framework and language):

  • navigate to "chrome://settings"
  • press link with css selector "#advanced-settings-expander"
  • press button with css selector "#privacyContentSettingsButton"
  • press label with the needed option using css selector "#handlers-section input[value=block]"
  • press done via css selector "#content-settings-overlay-confirm"