Comment effectuer L'authentification de base pour FirefoxDriver, ChromeDriver et IEdriver dans Selenium WebDriver?
j'utilise la Selenium-Firefox-driver et Selenium-Chrome-Driver version 2.0a5 ( web Driver API ), et j'essaie de tester une application web qui a une authentification de base (il y a un popup qui vient pour authentifier l'utilisateur quand je frappe n'importe quelle page, le popup 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 l'IE Pilote bientôt).
j'ai lu 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 ça ne semble pas marcher pour moi. Quelqu'un a-t-il une solution efficace pour ces navigateurs?
7 réponses
J'ai obtenu de travailler avec Firefox webdriver par le suivant:
profile.SetPreference("network.automatic-ntlm-auth.trusted-uris", "google.com");
driver = new FirefoxDriver(profile);
driver.Navigate().GoToUrl("http://user:pwd@google.com");
certes, L'authentification HTTP de base 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. J'ai essayé le 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 par le biais de Registre de Windows.
cette page "" http://code.google.com/p/selenium/issues/detail?id=34 peut aider.
ajouter 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 très bien sans demander aucune authentification lorsque vous faites les paramètres suivants..
- Type " about: config "on your FF url
- tapez maintenant " Proxy " dans le champ de recherche
- assurez-vous " signon.autologin.proxy "est ensemble" vrai " (Par défaut il est "faux")
Load Default/Custom Chrome Profil pour exécuter des tests à l'aide de Sélénium WebDriver
- télécharger chromedriver.exe
- extraire le chromedriver_win_26.0.1383.0.zip Dossier et localisez .exe fichier dans C:/ dossier
ajouter ce Script sur votre code 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);
Note: IE n'a pas besoin de configuration de profil pour exécuter des tests car ils tournent sur L'utilisateur du serveur tandis que Firefox et Chrome fonctionnent avec du binaire.
si vous voulez activer l'auteur http dans Internet explorer, vous devez éditer le registre et ajouter ceci (créer des clés si elles ne sont pas présentes):
-
dans
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_HTTP_USERNAME_PASSWORD_DISABLE
, créer un DWORDiexplore.exe
avec une valeur de0
-
dans
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_HTTP_USERNAME_PASSWORD_DISABLE
, créer un DWORDiexplore.exe
avec une valeur de0
-
fermer et rouvrir Internet explorer
si vous avez un x64 IE, le chemin est un peu différent :
-
HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_HTTP_USERNAME_PASSWORD_DISABLE
pour plus de portabilité, ceci peut être manipulé par l'API du talon et en utilisant Alert .
exemple de code 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 manuellement des clés comme:
SendKeys("user");
SendKeys("{TAB}");
SendKeys("password");
SendKeys("~"); // Enter
Voir aussi la demande de caractéristique suivante: #453 portable BASIC Auth at GitHub
Related:
il existe une solution pour effectuer l'authentification avec le sélénium 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 cela soit transférable au sélénium 2, car vous n'avez pas accès aux en-têtes.
Selon les informations de ici 'Authentification de Base de soutien pour le Sélénium 2" a été ajouté dans le Sélénium 2 Beta 2, mais à la recherche grâce au code source, Je ne peux le voir mis en œuvre que comme un moyen de sécuriser les serveurs de sélénium À Distance contre l'accès anonyme.
donc je pense que la réponse est que L'authentification HTTP de base n'est pas supportée actuellement.
Je n'ai pas pu utiliser L'authentification basic avec Selenium 2 et Chrome (à cause d'un bug avec Chrome), j'ai donc créé une extension pour Chrome qui envoie automatiquement les informations d'authentification basic (voir https://chrome.google.com/webstore/detail/basic-authentication-auto/dgpgkkfheijbcgjklcbnokoleebmeokn ).