it-swarm.com.de

Wie wechsle ich zum Popup für die Fensterauthentifizierung und gebe Anmeldeinformationen ein?

Nach dem Öffnen der Anwendungs-URL wird der Benutzer zur Anmeldeseite weitergeleitet, auf der sich eine Schaltfläche zum Anmelden befindet.

driver.get("abc.com")

Wenn der Benutzer nun auf die Schaltfläche Anmelden klickt, wird die URL im selben Fenster geändert, dh es wird zu xyz.com und es wird ein Authentifizierungs-Popup-Fenster für Anmeldezwecke angezeigt, ähnlich dem unten gezeigten Bild.  enter image description here

Um den Benutzernamen und das Passwort in das Authentifizierungsfenster einzugeben, habe ich den folgenden Code ausprobiert

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)

Es hat nicht funktioniert. Dann habe ich versucht, das Windows-Authentifizierungs-Popup direkt zu öffnen (durch Kopieren der URL nach Klicken auf die Schaltfläche Anmelden)

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

Ich bin etwas verwirrt. Wenn ich meine App-URL abc.com öffne, auf die Schaltfläche Anmelden klicken und autoit verwenden, wurden keine Anmeldeinformationen eingegeben. Wenn ich jedoch direkt die Fensterauthentifizierungs-URL xyz.com anstelle der App-URL abc.com sende und autoit verwende, funktioniert dies.

Kann jemand vorschlagen, was ich hier vermisse? Ich habe auch versucht, das Fenster zu wechseln, nachdem ich auf die Schaltfläche "Anmelden" geklickt habe. Ich dachte an die neue URL und dann an den Befehl "autoit", aber es funktionierte immer noch nicht.

driver.switch_to_window(driver.window_handles[1])

Irgendeine Idee dazu?

Hinweis: Ich habe festgestellt, dass beim Klicken auf die Schaltfläche "Anmelden" Windows unendlich geladen wird und der Cursor im Textfeld "Benutzername" der Windows-Authentifizierungsgruppe aktiv ist. Sobald das Windows-Authentifizierungsfenster angezeigt wird, funktioniert weder der Selenium-Befehl noch der autoit-Befehl.

7
Shoaib Akhtar

Der Dialog wird von Selen als Warnung behandelt. In c # sieht der Code für die Eingabe der Anmeldeinformationen für einen Firefox-Test folgendermaßen aus:

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

In der ersten Zeile wird der Treiber aufgefordert, auf geöffnete Warnmeldungen zu prüfen (das Dialogfeld).

Die zweite Zeile sendet den Benutzernamen und das Passwort an die Benachrichtigung

Die dritte Zeile sendet dann diese Berechtigungsnachweise, und der Test wird fortgesetzt, sofern er gültig ist.

Wenn Sie mit Firefox testen, ist es nicht erforderlich, zusätzliche Frameworks für dieses Authentifizierungsfeld zu verwenden.

3
Rescis

Sie müssen zu der Warnung wechseln, die sich von einem Fenster unterscheidet. Sobald die Warnung vorliegt, wechseln Sie die Warnmeldung und geben dann den Benutzernamen und das Kennwort mit der Methode .authenticate an

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

Möglicherweise möchten Sie auf die erwartete EC.alert_is_present-Bedingung warten, um sicherzustellen, dass die Warnung vorhanden ist.

0
sytech

Es sieht so aus, als müssten Sie die URL nur mit den grundlegenden Anmeldeinformationen öffnen. Können Sie dies zuerst versuchen?

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

Wenn Sie immer noch das Popup sehen, versuchen Sie es

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

Es sollte das Popup stoppen

0
Aldo Suwandi

Stimmen Sie Aldos Antwort zu. Versuchen Sie es mit https anstelle von http wie:

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

Sie können nach anderen Wegen suchen hier

0
Chanda Korat

In diesem Stadium automatisieren Sie nicht den Browser. Sie automatisieren die Tastatur .

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")

Optimieren Sie die Schlafzeiten mit Treffern und Fehlern.

Hinweis: Möglicherweise müssen Sie dazu das Threading verwenden.

Zu Ihrer Information, hier ist ein aktuelles Beispiel, das für mich funktioniert hat. Tweak herum, um es schneller zu machen. Ich wollte nur testen, ob das funktioniert, allerdings langsam.

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"

Beachten Sie auch: Wenn Sie sich auf Ubuntu befinden, erfordert keyboard die Root-Berechtigung. Führen Sie das Skript wie folgt aus:

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