'How to click Allow on Show Notifications popup using Selenium Webdriver

I'm trying to login to Facebook. After a successful login, I get a browser popup:

Show Notifications

How with the webdriver can I click Allow and proceed forward?



Solution 1:[1]

import unittest
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.chrome.options import Options
from selenium import webdriver
import time


class SendMsgSkype(unittest.TestCase):

    @classmethod
    def setUpClass(cls):

        options = Options()
        options.add_argument("--disable-notifications")

        cls.driver = webdriver.Chrome("./chromedriver.exe", chrome_options=options)

        cls.driver.implicitly_wait(5)
        cls.driver.maximize_window()
        cls.driver.get("https://web.skype.com/ru/")

It works for me. More details here: http://nullege.com/codes/show/src@t@a@[email protected]/21/selenium.webdriver.Chrome

Solution 2:[2]

This not an alert box, so you can't handle it using Alert, this is a chrome browser notification, To Switch off this browser notification you need to create chrome preference map with chrome option as below :

//Create prefs map to store all preferences 
Map<String, Object> prefs = new HashMap<String, Object>();
    
//Put this into prefs map to switch off browser notification
prefs.put("profile.default_content_setting_values.notifications", 2);

//Create chrome options to set this prefs
ChromeOptions options = new ChromeOptions();
options.setExperimentalOption("prefs", prefs);
    
//Now initialize chrome driver with chrome options which will switch off this browser notification on the chrome browser
WebDriver driver = new ChromeDriver(options);

//Now do your further steps

Hope it helps..:)

Solution 3:[3]

The one and only working solution I've come across so far is this:

from selenium.webdriver.chrome.options import Options

chrome_options = webdriver.ChromeOptions()
prefs = {"profile.default_content_setting_values.notifications": 2}
chrome_options.add_experimental_option("prefs", prefs)
driver = webdriver.Chrome(chrome_options=chrome_options)

Solution 4:[4]

no answer has been accepted yet, this following code works for me

ruby, rspec, capybara

Capybara.register_driver :selenium_chrome do |app|
  prefs = {"profile.managed_default_content_settings.notifications" => 2,}
  caps = Selenium::WebDriver::Remote::Capabilities.chrome(chrome_options: { prefs: prefs })

  Capybara::Selenium::Driver.new(app, browser: :chrome, desired_capabilities: caps)
end

Capybara.javascript_driver = :selenium_chrome

Solution 5:[5]

try {

   // Check the presence of alert
   Alert alert = driver.SwitchTo().Alert();

   // if present consume the alert
   alert.Accept();

  } catch (NoAlertPresentException ex) {
     //code to do if not exist.
  }

Solution 6:[6]

Facebook authentication window displays an overlay that covers the continue as [username] button.

enter image description here

This makes the continue button un-clickable. To circumvent that problem, you can hide those layers programmatically using JavaScript (not recommended) using this code (don't do this).

  // DO NOT USE THIS CODE.
  function forceClickSetup(targetSelector) {
      return browser.selectorExecute("div", 
      function(divs, targetSelector) {
        var button = document.querySelector(targetSelector);
        for(var i = 0; i < divs.length; i++) {
          if(!divs[i].contains(button)) {
            divs[i].remove();
          }
        }
        return i;
    }, targetSelector);
  }

Or instead, you can dismiss the notifications dialog, after which facebook will uncover the continue button. But before wildly hitting Escape at the browser, first make sure that the continue button has been shown.

// USE THIS CODE.
browser.waitForVisible("[name=__CONFIRM__]");
browser.keys("Escape"); // Dismiss "notifications" dialog box.

var confirmButtonSelector = "[name=__CONFIRM__]";

This solution is really Matthijs' (see comments above)

Solution 7:[7]

if you play with Ruby and Capybara try this code

    Capybara.register_driver :chrome_no_image_popup_maximize do |app|
    # 2: disable, other than 2 means enable it
    preferences = {
        "profile.managed_default_content_settings.notifications" => 2,
        "profile.managed_default_content_settings.images" => 2,
        "profile.managed_default_content_settings.popups" => 2   
    }

    caps = Selenium::WebDriver::Remote::Capabilities.chrome( 
        'chromeOptions' => {
            'prefs' => preferences, 
        } 
    )

    args = [ "--start-maximized" ]

    Capybara::Selenium::Driver.new(app, {:browser => :chrome, :desired_capabilities => caps, :args => args})
end

Capybara.default_driver = :chrome_no_image_popup_maximize
Capybara.javascript_driver = :chrome_no_image_popup_maximize

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 S.B
Solution 2 S.B
Solution 3 S.B
Solution 4 Dorian
Solution 5 Leon Barkan
Solution 6 Garrett
Solution 7 Daniel Deng