web-dev-qa-db-fra.com

Comment effectuer l'authentification de base pour FirefoxDriver, ChromeDriver et IEdriver dans Selenium WebDriver?

J'utilise les pilotes Selenium-Firefox et Selenium-Chrome-Driver version 2.0a5 (API du pilote Web), et j'essaie de tester une application Web qui a l'authentification BASIQUE (il y a une fenêtre contextuelle qui apparaît pour authentifier l'utilisateur lorsque je frappe n'importe quelle page, la fenêtre contextuelle ne fait pas partie du HTML).

Maintenant, j'ai besoin d'une stratégie pour authentifier l'utilisateur dans Firefox, Chrome et IE (je vais importer le IE Driver bientôt).

Je lisais dans quelques articles que je peux définir un profil Firefox par exemple ... quelque chose comme:

FirefoxProfile ffProfile = new FirefoxProfile();
ffProfile.setPreference("network.http.phishy-userpass-length", 255);
WebDriver driver = new FirefoxDriver(ffProfile);
driver.get("http://username:password@hostname");  

mais cela ne semble pas fonctionner pour moi. Quelqu'un a-t-il une solution de travail pour ces navigateurs?

39
sebarmeli

Certes, l'authentification HTTP BASIQUE n'est pas actuellement prise en charge, mais je l'ai fait fonctionner maintenant pour FF et pour Chrome.

Le code que j'ai écrit dans les questions fonctionne pour ces pilotes. Je viens d'essayer d'utiliser FF3.6 comme navigateur par défaut de Firefox (installé dans le dossier Firefox) au lieu de FF4 (pas encore pris en charge). Pour IE, je peux essayer de désactiver l'authentification via le registre Windows.

Cette page http://code.google.com/p/Selenium/issues/detail?id=34 peut vous aider.

6
sebarmeli

Je l'ai fait fonctionner avec le webdriver Firefox par ce qui suit:

profile.SetPreference("network.automatic-ntlm-auth.trusted-uris", "google.com");
driver = new FirefoxDriver(profile);

driver.Navigate().GoToUrl("http://user:[email protected]");
10
Rod

Ajoutez ce nouveau profil Firefox sur votre code

ProfilesIni profile = new ProfilesIni();
FirefoxProfile myprofile = profile.getProfile("myProjectProfile"); //replace "myProjectProfile" with your profile"
WebDriver driver = new FirefoxDriver(myprofile);

Paramètres de configuration de Firefox

Cela fonctionne correctement sans demander d'authentification lorsque vous effectuez les réglages suivants.

  • Tapez "about: config" sur votre URL FF
  • Tapez maintenant "Proxy" dans le champ de recherche
  • Assurez-vous que "signon.autologin.proxy" est défini "true" (Par défaut, il est "false")

Charger le profil par défaut/personnalisé Chrome Profile pour exécuter des tests à l'aide de Selenium WebDriver


  1. Télécharger chromedriver.exe
  2. Extrayez le dossier chromedriver_win_26.0.1383.0.Zip et recherchez le fichier .exe dans le dossier C: /

Ajoutez ce script sur votre Java

DesiredCapabilities capability = DesiredCapabilities.chrome();
System.setProperty("webdriver.chrome.driver", "C:/chromedriver.exe");
capability.setCapability("chrome.switches", Arrays.asList("–disable-extensions"));
capability.setCapability("chrome.binary", "C:/Users/user_name/AppData/Local/Google/Chrome/Application/chrome.exe");
ChromeOptions options = new ChromeOptions();
options.addArguments("user-data-dir=C:/Users/user_name/AppData/Local/Google/Chrome/User Data/Default");
driver = new ChromeDriver(capability);

Remarque: IE n'a pas besoin de configuration de profil pour exécuter des tests car ils s'exécutent sur l'utilisateur du serveur tandis que Firefox et Chrome fonctionne avec le binaire.

3
Prashanth Sams

Pour plus de portabilité, cela peut être géré par l'API stub et en utilisant Alert .

Exemple Java ( exemple ):

import org.openqa.Selenium.Alert;
import org.openqa.Selenium.security.Credentials;
public void authenticateUsing(Credentials credentials) {
    private final Alert alert;
    alert.authenticateUsing(credentials);
}

Voir aussi: auth_tests.py

Ou en envoyant des clés manuellement comme:

SendKeys("user");
SendKeys("{TAB}");
SendKeys("password");
SendKeys("~"); // Enter

Voir également la demande de fonctionnalité suivante: # 453 Portable BASIC Auth at GitHub

En relation:

2
kenorb

Si vous souhaitez activer l'authentification http dans Internet Explorer, vous devez modifier le registre et l'ajouter (créer des clés si elles ne sont pas présentes):

  1. dans HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_HTTP_USERNAME_PASSWORD_DISABLE, créez un DWORD iexplore.exe avec une valeur de 0

  2. dans HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_HTTP_USERNAME_PASSWORD_DISABLE, créez un DWORD iexplore.exe avec une valeur de 0

  3. Fermez et rouvrez Internet Explorer

Si vous avez un IE x64, le chemin est un peu différent:

  • HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_HTTP_USERNAME_PASSWORD_DISABLE
2
onionpsy

Je n'ai pas pu utiliser l'authentification de base avec Selenium 2 et Chrome (en raison d'un bug avec Chrome), j'ai donc créé une extension pour Chrome qui envoie le les informations d'authentification de base automatiquement (voir https://chrome.google.com/webstore/detail/basic-authentication-auto/dgpgkkfheijbcgjklcbnokoleebmeokn ).

1
Juan Lago

Il existe une solution pour effectuer l'authentification avec Selenium 1.x en définissant manuellement les en-têtes HTTP à http://mogotest.com/blog/2010/06/23/how-to-perform-basic-auth-in -Selenium mais je ne pense pas que ce soit transférable à Selenium 2, car vous n'avez pas accès aux en-têtes.

Selon les informations ici 'Prise en charge de l'authentification de base pour Selenium 2' a été ajouté dans Selenium 2 Beta 2 mais en parcourant le code source, je ne peux que le voir implémenté comme un moyen de sécuriser les serveurs Selenium distants contre un accès anonyme .

Je pense donc que la réponse est que l'authentification BASIC HTTP n'est pas actuellement prise en charge.

1
Naishy