web-dev-qa-db-fra.com

Comment passer à la fenêtre contextuelle d'authentification de la fenêtre et entrer les informations d'identification?

Après avoir ouvert l'URL de l'application, l'utilisateur est redirigé vers la page de connexion où se trouve un bouton de connexion.

driver.get("abc.com")

Désormais, lorsque l'utilisateur clique sur le bouton de connexion, l'URL est modifiée dans la même fenêtre et devient xyz.com et affiche une fenêtre contextuelle d'authentification à des fins de connexion similaires à l'image ci-dessous.  enter image description here

Pour entrer le nom d'utilisateur et le mot de passe dans la fenêtre d'authentification, j'ai essayé le code ci-dessous.

Shell = win32com.client.Dispatch("WScript.Shell")
Shell.Sendkeys("username")
time.sleep(1)
Shell.Sendkeys("{TAB}")
time.sleep(1)
Shell.Sendkeys("password") 
time.sleep(1)
Shell.Sendkeys("{ENTER}")
time.sleep(1)

Ça n'a pas marché. Ensuite, j'ai essayé d'ouvrir le popup d'authentification de Windows directement (en copiant l'URL après avoir cliqué sur le bouton de connexion) avec le code ci-dessus, cela a fonctionné

driver.get("xyz.com")//instead of abc.com my application URL

Je suis un peu confus. Si j'ouvre l'URL de l'application abc.com, cliquez sur le bouton Sign-In, utilisez autoit, les informations d'identification ne sont pas entrées. Mais si j’envoie directement l’URL d’authentification de la fenêtre xyz.com au lieu de l’URL de l’application abc.com et l’utilise autoit, cela fonctionne.

Quelqu'un peut-il suggérer ce que je manque ici? J'ai également essayé de changer de fenêtre après avoir cliqué sur le bouton Sign-In en pensant à sa nouvelle URL, puis à la commande autoit, mais cela ne fonctionnait toujours pas.

driver.switch_to_window(driver.window_handles[1])

Une idée sur ça?

Remarque: J'ai remarqué que cliquez sur le bouton Connexion, Windows se charge à l'infini et que le curseur est actif sur le champ de nom d'utilisateur du groupe d'authentification Windows. De plus, une fois la fenêtre d’authentification Windows apparue, aucune commande Selenium ne fonctionne et aucune commande autoit.

7
Shoaib Akhtar

Le dialogue est traité comme une alerte par Selenium. En c #, le code à saisir pour les informations d'identification d'un test Firefox ressemble à ceci:

// Inputs id with permissions into the Windows Authentication box
var alert = driver.SwitchTo().Alert();
alert.SendKeys( @"username" + Keys.Tab + 
                @"password" + Keys.Tab);
alert.Accept();

La première ligne indique au pilote de vérifier les alertes ouvertes (la boîte de dialogue).

La deuxième ligne envoie le nom d'utilisateur et le mot de passe à l'alerte

La troisième ligne envoie ensuite ces informations d'identification et, si elles sont valides, le test se poursuivra.

En supposant que vous testiez avec Firefox, il n’est pas nécessaire d’utiliser des frameworks supplémentaires pour gérer cette boîte d’authentification.

3
Rescis

Vous devez passer à l'alerte, qui est différente d'une fenêtre. Une fois l'alerte présente, vous changez le descripteur d'alerte, puis utilisez la méthode .authenticate pour lui attribuer le nom d'utilisateur et le mot de passe.

alert = driver.switch_to.alert
alert.authenticate(username, password)

Vous voudrez peut-être attendre la condition EC.alert_is_present attendue pour être sûr que l'alerte est présente.

0
sytech

Il semble que vous devez simplement ouvrir l'URL avec les informations d'identification d'authentification de base . Pouvez-vous essayer ceci en premier?

driver.get('http://username:[email protected]')

Si vous obtenez toujours le popup, essayez ceci

driver.get('http://username:[email protected]') #assuming this is the site that handles authentication
driver.get('abc.com')

Il faut arrêter le popup

0
Aldo Suwandi

D'accord avec la réponse de Aldo. Essayez avec https au lieu de http comme:

driver.get('https://username:[email protected]')

Vous pouvez chercher d'autres moyens ici

0
Chanda Korat

A ce stade, ce n'est pas le navigateur que vous automatisez. Vous automatisez le clavier .

import keyboard
keyboard.write("username")
time.sleep(5)
keyboard.press_and_release("tab")
time.sleep(5)
keyboard.write("password")
time.sleep(5)
keyboard.press_and_release("enter")

Ajustez les temps de sommeil avec des coups et des ratés.

Remarque: vous devrez peut-être utiliser le filetage pour le faire.

Pour votre information, voici un exemple concret qui a fonctionné pour moi. Tweak autour pour le rendre plus rapide. Je voulais juste tester si cela fonctionne, même lentement.

from Selenium.webdriver.firefox.webdriver import WebDriver
import keyboard
import time

Selenium = WebDriver()
Selenium.get("somelink")

time.sleep(5)
print "write user"
keyboard.press_and_release('tab')
keyboard.press_and_release('shift + tab')
time.sleep(2)
keyboard.write("user", delay=1)
print "done"
time.sleep(5)
keyboard.press_and_release('tab')
print "pressed tab"
time.sleep(5)
print "write password"
keyboard.write("pass", delay=1)
print "done"
time.sleep(2)
keyboard.press_and_release('enter')
print "pressed enter"

Notez également que si vous êtes sur ubuntu, keyboard nécessite l’autorisation root, lancez le script comme ceci -

Sudo ./venv/bin/python 1.py 
0
Sahil Agarwal