J'essaie d'ajouter des cookies à un lien avant de l'ouvrir avec Webdriver, mais il continue de me donner l'erreur suivante:
org.openqa.Selenium.UnableToSetCookieException: impossible de définir un cookie (AVERTISSEMENT: le serveur n'a fourni aucune information sur le chemin de pile)
Veuillez trouver mon code ci-dessous:
System.setProperty("webdriver.Edge.driver","C:\\Program Files\\Latest Webdriver\\MicrosoftWebDrive.exe" );
EdgeDriver = new EdgeDriver();
Thread.sleep(2000);
Cookie cookie = new Cookie("Testing", "11111");
EdgeDriver.manage().addCookie(cookie);
EdgeDriver.get("https://www.google.ca/?gws_rd=ssl"); // The link is an example
S'il vous plaît aider avec une solution pertinente.
Vous créez le cookie avant de naviguer sur le site. Si vous essayez de créer un cookie sur le domaine www.example.com, vous souhaitez naviguer vers une page de ce domaine, créer le cookie, puis lancer votre test.
D'après ce que j'ai lu il y a quelque temps, la meilleure façon de le faire est de naviguer vers une page dont vous savez qu'elle n'existe pas sur le domaine, par exemple. www.example.com/this404page, puis créez le cookie. Il devrait se charger beaucoup plus rapidement car c'est une page d'erreur et ne devrait pas contenir beaucoup de contenu. Après avoir créé le cookie sur la page 404, démarrez votre test.
Vous ne pouvez pas effectuer cette opération car la spécification WebDriver requiert que le navigateur se trouve sur le domaine pour lequel vous essayez de définir des cookies.
La solution consiste à aller sur la page avant de définir le cookie. Mais cela cause quelques problèmes:
Cela empêche malheureusement 2 cas d'utilisation clés:
La spécification Webdriver doit clairement en tenir compte. J'ai ouvert un problème ici:
https://github.com/w3c/webdriver/issues/1238
Donnez-lui des votes. Tous les navigateurs devraient commencer à trouver un moyen de gérer cela.
Naviguez d'abord vers l'URL, puis essayez d'ajouter des cookies, essayez le code ci-dessous:
System.setProperty("webdriver.Edge.driver","C:\\Program Files\\Latest Webdriver\\MicrosoftWebDrive.exe" );
EdgeDriver = new EdgeDriver();
Thread.sleep(2000);
Cookie cookie = new Cookie("Testing", "11111");
EdgeDriver.manage().addCookie(cookie);
EdgeDriver.get("https://www.google.ca/?gws_rd=ssl"); // The link is an example
Remplacez votre code par ceci:
System.setProperty("webdriver.Edge.driver","C:\\Program Files\\Latest Webdriver\\MicrosoftWebDrive.exe" );
EdgeDriver = new EdgeDriver();
Thread.sleep(2000);
EdgeDriver.get("https://www.google.ca/?gws_rd=ssl"); // The link is an example
Cookie cookie = new Cookie("Testing", "11111");
EdgeDriver.manage().addCookie(cookie);
L'ajout de cookies avant d'accéder au domaine s'appelle des cookies sans domaine, ce qui, à mon avis, n'est pas possible.
Je n'ai pas trouvé de moyen de déposer un cookie avant l'URL, mais je pense que le scénario ci-dessous pourrait vous aider à sortir.
Au cas où cela serait plus simple, je n’aurais pas besoin de créer une classe d’usine, mais simplement de charger la page racine du site (ce qui n’exigeait pas de cookie)
Commencez par collecter le cookie comme décrit ci-dessus
pickle.dump(driver.get_cookies(), open("ChromeCookies.pkl", "wb"))
Ensuite, obtenez la racine du site Web qui ne nécessite pas de cookie (dans mon cas)
driver.get(url_root)
Puis exécutez le chargement de cookies
for cookie in pickle.load(open("ChromeCookies.pkl", "rb")):
driver.add_cookie(cookie)
Ensuite, allez à la page que je voulais réellement accéder
driver.get(url_not_root_demanding_cookie_which_is_now_there)
S'il vous plaît, postez s'il y a un problème avec cette approche