J'essaie de me connecter à Facebook. Après une connexion réussie, je reçois une fenêtre contextuelle du navigateur:
Comment, avec le WebDriver, puis-je cliquer sur Autoriser et continuer?
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);
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..:)
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
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)
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
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.
}
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
La fenêtre d'authentification Facebook affiche une superposition couvrant le bouton continue as [nom d'utilisateur].
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)