2013-10-16 5 views
20

Je veux traiter une partie connexion dans l'rediff.com, mais le code ci-dessous ne fonctionne pas pour cela:Comment gérer pop-up en Sélénium WebDriver en utilisant Java

driver.get("http://www.rediff.com/"); 
WebElement sign = driver.findElement(By.xpath("//html/body/div[3]/div[3]/span[4]/span/a")); 
sign.click(); 
String myWindowHandle = driver.getWindowHandle(); 
driver.switchTo().window(myWindowHandle); 
WebElement email_id= driver.findElement(By.xpath("//*[@id='signin_info']/a[1]")); 
email_id.sendKeys("hi"); 

Si myWindowHandle est pas chaîne correcte, puis laissez-moi savoir comment obtenir le nom de fenêtre pop-up, car je ne trouve pas le nom de la fenêtre pop-up.

+0

Prenez la liste des fenêtres en utilisant driver.getWindowHandles(). –

Répondre

32

Pour passer à une fenêtre pop-up, vous devez utiliser getWindowHandles() et itérer à travers eux.

Dans votre code, vous utilisez getWindowHandle() qui vous donnera la fenêtre parente elle-même.

String parentWindowHandler = driver.getWindowHandle(); // Store your parent window 
String subWindowHandler = null; 

Set<String> handles = driver.getWindowHandles(); // get all window handles 
Iterator<String> iterator = handles.iterator(); 
while (iterator.hasNext()){ 
    subWindowHandler = iterator.next(); 
} 
driver.switchTo().window(subWindowHandler); // switch to popup window 

// Now you are in the popup window, perform necessary actions here 

driver.switchTo().window(parentWindowHandler); // switch back to parent window 
+0

Mais je dois juste gérer une seule fenêtre que je pense donc pas de sens à utiliser itérateur ... avez-vous une autre façon. J'ai juste besoin d'écrire l'adresse email et le mot de passe sous forme de connexion de rediff.com .pls me diriger dans ce. – Niyati

+0

Le code ci-dessus va gérer cela. Une fois que vous passez à la sous-fenêtre qui est votre popup.Choisissez les éléments Web et remplissez votre identifiant d'email, votre mot de passe et soumettez-le. Puis revenez à votre fenêtre parente. – LINGS

+1

Essayé mais le code ne fonctionne pas sur le lien: rediff.com -> cliquez sur le lien de connexion et essayer de signer – Niyati

2

Ne compliquez pas la situation. Utilisez ID s'ils sont disponibles.

driver.get("http://www.rediff.com"); 
WebElement sign = driver.findElement(By.linkText("Sign in")); 
sign.click(); 
WebElement email_id= driver.findElement(By.id("c_uname")); 
email_id.sendKeys("hi"); 
+0

Je ne peux pas utiliser directement le champ email_id car sa fenêtre pop-up ..pls visite rediff.com car je veux écrire l'adresse e-mail et le mot de passe sous forme de rediff.com. lien: http://www.rediff.com/ – Niyati

+0

quel navigateur utilisez-vous? Parce que je ne vois aucune fenêtre pop-up après avoir cliqué sur la connexion. c'est juste une autre fenêtre modale (à l'intérieur de la fenêtre principale). J'utilise firefox23. – Hemanth

+0

yeh j'ai besoin d'accéder à cela et signé – Niyati

11

Je trouve la solution pour le programme ci-dessus, qui avait l'objectif de la signature pour http://rediff.com

public class Handle_popupNAlert 
{ 
    public static void main(String[] args) throws InterruptedException 
    { 
     WebDriver driver= new FirefoxDriver(); 
     driver.get("http://www.rediff.com/"); 
     WebElement sign = driver.findElement(By.xpath("//html/body/div[3]/div[3]/span[4]/span/a")); 
     sign.click(); 

     Set<String> windowId = driver.getWindowHandles(); // get window id of current window 
     Iterator<String> itererator = windowId.iterator(); 

     String mainWinID = itererator.next(); 
     String newAdwinID = itererator.next(); 

     driver.switchTo().window(newAdwinID); 
     System.out.println(driver.getTitle()); 
     Thread.sleep(3000); 
     driver.close(); 

     driver.switchTo().window(mainWinID); 
     System.out.println(driver.getTitle()); 
     Thread.sleep(2000); 

     WebElement email_id= driver.findElement(By.xpath("//*[@id='c_uname']")); 
     email_id.sendKeys("hi"); 
     Thread.sleep(5000); 

     driver.close(); 
     driver.quit(); 
    } 
} 
-1
 //get the main handle and remove it 
     //whatever remains is the child pop up window handle 

     String mainHandle = driver.getWindowHandle(); 
     Set<String> allHandles = driver.getWindowHandles(); 
     Iterator<String> iter = allHandles.iterator(); 
     allHandles.remove(mainHandle); 
     String childHandle=iter.next(); 
4

Vous pouvez gérer la fenêtre pop-up ou zone d'alerte:

Alert alert = driver.switchTo().alert(); 
alert.accept(); 

Vous pouvez également refuser la boîte d'alerte:

Alert alert = driver.switchTo().alert(); 
alert().dismiss(); 
+0

Cela a fonctionné pour moi – sinisterrook

0

Lorsque le message toastr est apparu sur l'écran de firefox. l'étiquette ci-dessous était affichée dans un bug de feu.

<div class="toast-message">Invalid Credentials, Please check Password</div>. 

J'ai pris la capture d'écran à ce moment-là. Et a fait les changements ci-dessous dans le code de sélénium java.

String alertText = ""; 
WebDriverWait wait = new WebDriverWait(driver, 5); 
wait.until(ExpectedConditions.visibilityOfElementLocated(By.className("toast-message"))); 
WebElement toast1 = driver.findElement(By.className("toast-message")); 
alertText = toast1.getText(); 
System.out.println(alertText); 

Et mon problème de toastr popup a été résolu.

-1
public void Test(){ 

    WebElement sign = fc.findElement(By.xpath(".//*[@id='login-scroll']/a")); 
     sign.click(); 
     WebElement LoginAsGuest=fc.findElement(By.xpath(".//*[@id='guest-login-option']")); 
     LoginAsGuest.click(); 
     WebElement email_id= fc.findElement(By.xpath(".//*[@id='guestemail']")); 
     email_id.sendKeys("[email protected]"); 
     WebElement ContinueButton=fc.findElement(By.xpath(".//*[@id='contibutton']")); 
     ContinueButton.click(); 

} 
4

Vous pouvez utiliser le code ci-dessous dans votre code lorsque vous obtenez une boîte de message d'alerte de navigateur Web.

// Accepts (Click on OK) Chrome Alert Browser for RESET button. 

Alert alertOK = driver.switchTo().alert(); 
alertOK.accept(); 



//Rejects (Click on Cancel) Chrome Browser Alert for RESET button. 

Alert alertCancel = driver.switchTo().alert(); 
alertCancel.dismiss(); 
+0

Vous pouvez utiliser le code ci-dessus dans votre code lorsque vous obtenez une boîte de message d'alerte de navigateur Web. –

Questions connexes