Comment gérer la fenêtre de connexion en utilisant Selenium Webdriver? J'ai joint l'exemple d'écran ici. Comment puis-je entrer/entrer le nom d'utilisateur et le mot de passe pour cette fenêtre de connexion/alerte de connexion
Merci et salutations,
Utilisez l'approche par laquelle vous envoyez un nom d'utilisateur et un mot de passe dans la requête d'URL:
http://username:[email protected]
Donc, juste pour le rendre plus clair. Le nom d'utilisateur est username
, le mot de passe est password
et le reste est l'URL habituelle de votre site Web test.
Fonctionne pour moi sans avoir besoin d'ajustements.
Exemple de code Java:
public static final String TEST_ENVIRONMENT = "the-site.com";
private WebDriver driver;
public void login(String uname, String pwd){
String URL = "http://" + uname + ":" + pwd + "@" + TEST_ENVIRONMENT;
driver.get(URL);
}
@Test
public void testLogin(){
driver = new FirefoxDriver();
login("Pavel", "UltraSecretPassword");
//Assert...
}
Cela devrait fonctionner avec Windows Server 2012 et IE.
var alert = driver.SwitchTo().Alert();
alert.SetAuthenticationCredentials("username", "password");
alert.Accept();
Solution: authentification Windows Active Directory avec Thread and Robot
J'ai utilisé Java Thread and Robot avec le WebDriver Selenium pour automatiser le processus d'authentification Windows Active Directory de notre site Web. Cette logique a bien fonctionné dans Firefox et Chrome, mais pas dans IE. Pour une raison quelconque, IE tue le pilote Web lorsque la fenêtre d'authentification s'affiche, alors que Chrome et Firefox empêchent le pilote Web de se faire tuer. Je n'ai pas essayé dans d'autres navigateurs Web tels que Safari.
//...
//Note: this logic works in Chrome and Firefox. It did not work in IE and I did not try Safari.
//...
//import relevant packages here
public class TestDemo {
static WebDriver driver;
public static void main(String[] args) {
//setup web driver
System.setProperty("webdriver.chrome.driver", "path to your chromedriver.exe");
driver = new ChromeDriver();
//create new thread for interaction with windows authentication window
(new Thread(new LoginWindow())).start();
//open your url. this will Prompt you for windows authentication
driver.get("your url");
//add test scripts below ...
driver.findElement(By.linkText("Home")).click();
//.....
//.....
}
//inner class for Login thread
public class LoginWindow implements Runnable {
@Override
public void run() {
try {
login();
} catch (Exception ex) {
System.out.println("Error in Login Thread: " + ex.getMessage());
}
}
public void login() throws Exception {
//wait - increase this wait period if required
Thread.sleep(5000);
//create robot for keyboard operations
Robot rb = new Robot();
//Enter user name by ctrl-v
StringSelection username = new StringSelection("username");
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(username, null);
rb.keyPress(KeyEvent.VK_CONTROL);
rb.keyPress(KeyEvent.VK_V);
rb.keyRelease(KeyEvent.VK_V);
rb.keyRelease(KeyEvent.VK_CONTROL);
//tab to password entry field
rb.keyPress(KeyEvent.VK_TAB);
rb.keyRelease(KeyEvent.VK_TAB);
Thread.sleep(2000);
//Enter password by ctrl-v
StringSelection pwd = new StringSelection("password");
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(pwd, null);
rb.keyPress(KeyEvent.VK_CONTROL);
rb.keyPress(KeyEvent.VK_V);
rb.keyRelease(KeyEvent.VK_V);
rb.keyRelease(KeyEvent.VK_CONTROL);
//press enter
rb.keyPress(KeyEvent.VK_ENTER);
rb.keyRelease(KeyEvent.VK_ENTER);
//wait
Thread.sleep(5000);
}
}
}
C’est très simple dans WebDriver 3.0 (pour l’instant, c’est en version bêta).
Alert alert = driver.switchTo().alert() ;
alert.authenticateUsing(new UserAndPassword(_user_name,_password));
driver.switchTo().defaultContent() ;
Espérons que cela aide.
J'ai utilisé IE, puis créer un code comme ça et travaille après modification de plusieurs codes:
public class TestIEBrowser {
public static void main(String[] args) throws Exception {
//Set path of IEDriverServer.exe.
// Note : IEDriverServer.exe should be In D: drive.
System.setProperty("webdriver.ie.driver", "path /IEDriverServer.exe");
// Initialize InternetExplorerDriver Instance.
WebDriver driver = new InternetExplorerDriver();
// Load sample calc test URL.
driver.get("http://... /");
//Code to handle Basic Browser Authentication in Selenium.
Alert aa = driver.switchTo().alert();
Robot a = new Robot();
aa.sendKeys("Host"+"\\"+"user");
a.keyPress(KeyEvent.VK_TAB);
a.keyRelease(KeyEvent.VK_TAB);
a.keyRelease(KeyEvent.VK_ADD);
setClipboardData("password");
a.keyPress(KeyEvent.VK_CONTROL);
a.keyPress(KeyEvent.VK_V);
a.keyRelease(KeyEvent.VK_V);
a.keyRelease(KeyEvent.VK_CONTROL);
//Thread.sleep(5000);
aa.accept();
}
private static void setClipboardData(String string) {
// TODO Auto-generated method stub
StringSelection stringSelection = new StringSelection(string); Toolkit.getDefaultToolkit().getSystemClipboard().setContents(stringSelection, null);
}
}
Le code Java suivant Selenium-Webdriver devrait fonctionner correctement pour gérer la fenêtre d'alerte/contextuelle:
driver.switchTo().alert();
//Selenium-WebDriver Java Code for entering Username & Password as below:
driver.findElement(By.id("userID")).sendKeys("userName");
driver.findElement(By.id("password")).sendKeys("myPassword");
driver.switchTo().alert().accept();
driver.switchTo().defaultContent();
Passez simplement à alert et utilisez authenticateUsing
pour définir le nom d'utilisateur et le mot de passe, puis revenez à la fenêtre parent
Alert Windowalert = driver.switchTo().alert() ;
Windowalert.authenticateUsing(new UserAndPassword(_user_name,_password));
driver.switchTo().defaultContent() ;
Le moyen le plus simple de gérer la fenêtre contextuelle d’authentification consiste à entrer les informations d’identification dans l’URL elle-même. Par exemple, j'ai des informations d'identification comme Username: admin
et Password: admin
:
WebDriver driver = new ChromeDriver();
driver.get("https://admin:admin@your website url");
Une façon de gérer cela, vous pouvez fournir les détails de connexion avec l'URL. par exemple. si votre url est " http: // localhost: 4040 " et que vous demandez "Nom d'utilisateur" et "Mot de passe" sur le message d'alerte, vous pouvez transmettre baseurl comme " http: // nom d'utilisateur: mot de passe @ localhost: 4040 ". J'espère que ça marche
Je recevais une alerte de sécurité Windows chaque fois que mon application était ouverte. pour résoudre ce problème, j'ai utilisé la procédure suivante
import org.openqa.Selenium.security.UserAndPassword;
UserAndPassword UP = new UserAndPassword("userName","Password");
driver.switchTo().alert().authenticateUsing(UP);
cela a résolu mon problème de connexion à l'application. J'espère que cela pourra aider ceux qui recherchent tous l'authentification de l'alerte de sécurité Windows.
Mieux vaut préférer l'outil Autoit pour gérer toute l'activité de Windows. Vous pouvez créer un script en utilisant l'outil AutoIt pour gérer votre tâche de fenêtre. Ensuite, vous pourrez exécuter ce fichier exe à l'aide de Selenium.
Dans C # Selenium Web Driver, j'ai réussi à le faire fonctionner avec le code suivant:
var alert = TestDriver.SwitchTo().Alert();
alert.SendKeys(CurrentTestingConfiguration.Configuration.BasicAuthUser + Keys.Tab + CurrentTestingConfiguration.Configuration.BasicAuthPassword);
alert.Accept();
Bien que cela semble similaire, les éléments suivants ne fonctionnaient pas avec Firefox (Keys.Tab réinitialise tout le formulaire et le mot de passe sera écrit dans le champ utilisateur):
alert.SendKeys(CurrentTestingConfiguration.Configuration.BasicAuthUser);
alert.SendKeys(Keys.Tab);
alert.SendKeys(CurrentTestingConfiguration.Configuration.BasicAuthPassword);
En outre, j'ai essayé la solution suivante qui a abouti à une exception:
var alert = TestDriver.SwitchTo().Alert();
alert.SetAuthenticationCredentials(
CurrentTestingConfiguration.Configuration.BasicAuthUser,
CurrentTestingConfiguration.Configuration.BasicAuthPassword);
System.NotImplementedException: 'POST /session/38146c7c-cd1a-42d8-9aa7-1ac6837e64f6/alert/credentials did ne correspond pas à une commande connue '
Ceci est une solution pour Selenium basé sur Python, après avoir parcouru le code source ( ici ) .
obj = driver.switch_to.alert
obj.send_keys(keysToSend="username\ue004password")
obj.accept()
Ici,\u004 est la valeur de la tabulation que vous pouvez trouver dans la classe Keys du code source.
J'imagine que la même approche peut également être utilisée en Java, mais pas avec certitude.