Como lidar com Pop-up no Selenium WebDriver usando Java

Eu quero lidar com parte de login em rediff.com, mas o código abaixo não funciona para isso:

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

Se myWindowHandle não for a string correta, deixe-me saber como obter o nome da janela pop-up, porque não consigo encontrar o nome da janela pop-up.

Para alternar para uma janela pop-up, você precisa usar getWindowHandles() e iterar através deles.

No seu código você está usando getWindowHandle() que lhe dará a janela pai em si.

 String parentWindowHandler = driver.getWindowHandle(); // Store your parent window String subWindowHandler = null; Set handles = driver.getWindowHandles(); // get all window handles Iterator 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 

Eu encontrei a solução para o programa acima, que tinha o objective de entrar no 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 windowId = driver.getWindowHandles(); // get window id of current window Iterator 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(); } } 

Você pode manipular janela pop-up ou checkbox de alerta:

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

Você também pode recusar a checkbox de alerta:

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

Você pode usar o código abaixo dentro do seu código quando você receber qualquer checkbox de mensagem de alerta pop-up do navegador da 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(); 

Não torne a situação complexa. Use o ID se estiverem disponíveis.

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

Quando a mensagem toastr apareceu na canvas do firefox. A tag abaixo foi exibida no bug de fogo.

 
Invalid Credentials, Please check Password
.

Eu tirei a captura de canvas naquele momento. E fez as alterações abaixo no código java selenium.

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

E meu problema de popup toastr foi resolvido.

  //get the main handle and remove it //whatever remains is the child pop up window handle String mainHandle = driver.getWindowHandle(); Set allHandles = driver.getWindowHandles(); Iterator iter = allHandles.iterator(); allHandles.remove(mainHandle); String childHandle=iter.next(); 
 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("ankushdeoladore@gmail.com"); WebElement ContinueButton=fc.findElement(By.xpath(".//*[@id='contibutton']")); ContinueButton.click(); }