Handling a popup window using selenium Handling a popup window using selenium selenium selenium

Handling a popup window using selenium


driver.findElement(By.linkText("Click me")).click();// when this line of code is reached then a popup window opens.

System.out.println("After Clicking me"); // After the popup window opens this line of code is never executed.

The line of code is never executed because the process is waiting for the popup to be handled.

getWindowHandles() works properly in this situation.

Example:

//handle of the master window before clicking the linkString master = driver.getWindowHandle();driver.findElement(By.linkText("Click me")).click();//logic for waiting for the popup, checking the size to become greater than 1 or breaking after sometime to avoid the infinite loop.int timeCount = 1;do{   driver.getWindowHandles();   Thread.sleep(200);   timeCount++;   if ( timeCount > 50 )    {       break;   }}while ( driver.getWindowHandles().size == 1 );//Assigning the handles to a setSet<String> handles = driver.getWindowHandles();//Switching to the popup window.for ( String handle : handles ){    if(!handle.equals(master))    {         driver.switchTo().window(handle);    }}

Now driver is switched to the popup window. If the popup window has a frame then you need to switch to the frame before identifying elements in it.


This is a code i use when i need to work with a following pop-up window, close it and go back to my main window. Of course it has been simplified for the purpose of this answer. It maintains a handle of the original window (main) so it can make a difference between the others.

It requires an explicit WebDriverWait because i did have problems during development that code got run before the window actually got open, so this might not be a ideal condition,

function manipulatePopUp(final WebDriver driver, final WebDriverWait wait) {    final String mainWindowHandle = driver.getWindowHandle();    driver.findElement(By.id("linkThatOpensPopUp")).click();    wait.until(new ExpectedConditions<Boolean>() {        @Override        public Boolean apply(WebDriver d) {            return (d.getWindowHandles().size() != 1);        }    });    for (String activeHandle : driver.getWindowHandles()) {        if (!activeHandle.equals(mainWindowHandle)) {            driver.switchTo().window(activeHandle);        }    }    driver.close();    driver.switchTo().window(mainWindowHandle);}


public class socialSignOn extends masterBaseClassNewSiteStage {    @Test    public void testSocialSignOn() throws Throwable {        openParticularUrl("/my-lfc/join/user-details?user_type=free");        driver.findElement(By.cssSelector("#socialSignOn > div.left.socialLogin.googleButton")).click();        String MainWindow = driver.getWindowHandle();        for (String activeHandle : driver.getWindowHandles()) {            if (!activeHandle.equals(MainWindow)) {                driver.switchTo().window(activeHandle);            }        }        driver.findElement(By.cssSelector("#Email")).sendKeys("");        driver.findElement(By.cssSelector("#next")).click();        pauseFiveSeconds();        driver.findElement(By.cssSelector("#Passwd")).sendKeys("");        driver.findElement(By.cssSelector("#signIn")).click();        pauseOneSecond();        driver.switchTo().window(MainWindow);        pauseTenSeconds();        closeDriver();    }}