Search code examples
javaseleniumselenium-webdriverwindow-handleswebdriverwait

getWindowHandles() not working in firefox 58.The focus remains on parent tab and does not transfer to next tab


I am starting to learn how to handle multiple tabs in a browser using Selenium with Java. looks like my code below is not working.

    import java.util.ArrayList;
    import org.openqa.selenium.By;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.firefox.FirefoxDriver;

    public class HandlingWindows {

    public static void main(String[] args) throws InterruptedException
    {

        WebDriver driver= new FirefoxDriver();
        driver.get("https://www.facebook.com/");
        String parent= driver.getWindowHandle();
        System.out.println("Parent Window is"+parent);

        //Get Data Policy
        WebElement we= driver.findElement(By.linkText("Data Policy"));
        //Click Data Policy link
        we.click();
        //Create an arrayList
        ArrayList<String> s1= new ArrayList<String>(driver.getWindowHandles());


         for(String s2:s1)
           {


            if(!(s2.equalsIgnoreCase(parent)))
              {
               driver.switchTo().window(s2);
               Thread.sleep(5000);
               System.out.println(driver.getWindowHandle());
               System.out.println("get title of window"+driver.getTitle());
              }
             }
    }

}

Please let me know how can I display the title 'Data Policy' without using getWindowHandles().


Solution

  • getWindowHandles() works pretty fine but before invoking getWindowHandles() you have to induce WebDriverwait as follows :

    System.setProperty("webdriver.gecko.driver", "C:\\Utility\\BrowserDrivers\\geckodriver.exe");
    WebDriver driver= new FirefoxDriver();
    driver.get("https://www.facebook.com/");
    String parent= driver.getWindowHandle();
    System.out.println("Parent Window is"+parent);
    driver.findElement(By.linkText("Data Policy")).click();
    WebDriverWait wait = new WebDriverWait(driver,5);
    wait.until(ExpectedConditions.numberOfWindowsToBe(2));
    Set<String> s1= driver.getWindowHandles();
    for(String s2:s1)
    {
        if(!parent.equalsIgnoreCase(s2))
            {
                driver.switchTo().window(s2);
                Thread.sleep(5000);
                System.out.println(driver.getWindowHandle());
                System.out.println("get title of window"+driver.getTitle());
            }
    }
    

    Console Output :

    Parent Window is4294967297
    4294967303
    get title of windowData Policy