Chrome 59 a supprimé la prise en charge de https: // utilisateur: [email protected] URL .
J'ai un test qui utilisait cette fonctionnalité qui est maintenant défectueux, j'essaie donc de le remplacer par une version qui attend la fenêtre d'authentification et complète les détails. Mais ce qui suit ne fonctionne pas sur Chrome (qui ne voit pas la fenêtre d'authentification en tant qu'alerte):
alert().authenticateUsing(new UserAndPassword("test", "test"));
La version réservée au sélénium a le même problème:
WebDriverWait wait = new WebDriverWait(getDriver(), 10);
Alert alert = wait.until(ExpectedConditions.alertIsPresent());
alert.authenticateUsing(new UserAndPassword("test", "test"));
(basé sur la réponse donnée ici: Comment gérer l'authentification contextuelle avec Selenium WebDriver en utilisant Java )
Je peux voir plusieurs solutions de contournement pour gérer cela dans FireFox, mais rien pour Chrome. Y a-t-il une approche alternative?
Je suis sûr que les solutions de Florent B sont viables, mais pour réajuster un ancien test, j’ai trouvé que la solution de zoonabar avait été postée sur cette question dupliquée est plus facile à mettre en œuvre, prend beaucoup moins de code et ne nécessite aucune préparation particulière de la boîte de test. Il semble également que ce serait plus facile à suivre pour les nouveaux développeurs qui consultent le code.
En bref: si vous visitez n'importe quelle URL avec des informations d'identification avant de visiter l'URL testée (sans informations d'identification), le navigateur se souviendra des informations d'identification.
goTo("http://user:password@localhost"); // Caches auth, but page itself is blocked
goTo("http://localhost"); // Uses cached auth, page renders fine
// Continue test as normal
Cela peut ressembler à une vulnérabilité du navigateur qui sera corrigée, mais je pense que cela est peu probable; la restriction a été imposée pour éviter les risques d'hameçonnage (lorsque le nom d'utilisateur choisi ressemble à un domaine, par exemple " http://google.com:long-token-here-which-mose-the-real-domain-disappear@example .com/ "), et cette solution de contournement pour la définition des informations d’identification ne pose pas le même risque.
Une solution consiste à exécuter un proxy transparent pour injecter à l'en-tête les informations d'identification requises.
Mais une autre solution, plus simple, consiste à créer une petite extension pour définir automatiquement les informations d'identification:
https://Gist.github.com/florentbr/25246cd9337cebc07e2bbb0b9bf0de46
Dans https://bugs.chromium.org/p/chromium/issues/detail?id=435547#c33 , vous pouvez voir un message disant qu'il y a eu un bogue concernant les informations d'authentification de base et que les mêmes sites Origin ont créé stable.
Si vous utilisez "--disable-blink-features = BlockCredentialedSubresources" ou accédez à une version Chrome Canary, vous constaterez peut-être que le problème initial que vous rencontriez ne se produit plus ...
Florent B. a trouvé une solution à l’aide d’une rallonge en chrome, qui s’ajoute à la volée dans le test au sélénium. L'extension gère les informations d'authentification de base, si nécessaire:
ChromeOptions options = new ChromeOptions();
options.addExtensions(new File("C:/path_to/credentials_extension.Zip"));
driver = new RemoteWebDriver(new URL("http://127.0.0.1:9515"), options);
Code d’extension Chrome: https://Gist.github.com/florentbr/25246cd9337cebc07e2bbb0b9bf0de46
(il suffit de modifier le nom d'utilisateur et le mot de passe dans background.js, puis de compresser les fichiers background.js et manifest.json à credentials_extension.Zip)
Trouvé ici: Selenium - Authentification de base via url