web-dev-qa-db-fra.com

Comment cliquer sur Autoriser l'affichage des notifications en incrustation à l'aide de Selenium Webdriver

J'essaie de me connecter à Facebook. Après une connexion réussie, je reçois une fenêtre contextuelle du navigateur: 

 Show Notifications

Comment, avec le WebDriver, puis-je cliquer sur Autoriser et continuer?

23
Sidhant

Veuillez suivre les étapes ci-dessous:

Étape 1:  

// Créer une instance de la classe ChromeOptions

ChromeOptions options = new ChromeOptions();

Étape 2:  

// Ajoute un commutateur chrome pour désactiver la notification - " --disable-notifications "

options.addArguments("--disable-notifications");

Étape 3:  

// Définit le chemin pour le pilote exe 

System.setProperty("webdriver.chrome.driver","path/to/driver/exe");

Étape 4 :  

// Passage de l'instance ChromeOptions à ChromeDriver Constructor

WebDriver driver =new ChromeDriver(options);
23
Pritam Maske

Ce n'est pas une boîte d'alerte, vous ne pouvez donc pas l'utiliser avec Alert, il s'agit d'une notification de navigateur chrome. Pour désactiver cette notification, vous devez créer une carte de préférences chromée avec option chromée, comme indiqué ci-dessous: -

//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

J'espère que ça aide..:)

8
Saurabh Gaur
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/")

Cela fonctionne pour moi ... Plus de détails ici: http://nullege.com/codes/show/src@t@a@[email protected]/21/Selenium.webdriver.Chrome

7
Igor Z

La seule et unique solution efficace que j'ai rencontrée jusqu'à présent est la suivante:

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)
5
SIM

aucune réponse n'a encore été acceptée, ce code suivant fonctionne pour moi 

Rubis, 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
2
Jin.X
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.
  }
1
Leon Barkan

si vous jouez avec Ruby et Capybara, essayez ce 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
0
Daniel Deng

La fenêtre d'authentification Facebook affiche une superposition couvrant le bouton continue as [nom d'utilisateur]

 enter image description here

Cela rend le bouton Continuer non-cliquable. Pour contourner ce problème, vous pouvez masquer ces couches par programmation à l'aide de JavaScript (non recommandé) à l'aide de ce code (à ne pas faire).

  // 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);
  }

Vous pouvez également fermer la boîte de dialogue des notifications, après quoi facebook découvrira le bouton continuer. Mais avant de frapper sauvagement Escape dans le navigateur, assurez-vous d’abord que le bouton continuer a bien été affiché.

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

var confirmButtonSelector = "[name=__CONFIRM__]";

Cette solution est vraiment celle de Matthijs (voir commentaires ci-dessus)

0
Garrett