How to handle the new window in Selenium WebDriver using Java?

后端 未结 6 2113
北海茫月
北海茫月 2020-11-27 18:59

This is my code:

driver.findElement(By.id(\"ImageButton5\")).click();
//Thread.sleep(3000);
String winHandleBefore = driver.getWindowHandle();
driver.switchT         


        
相关标签:
6条回答
  • 2020-11-27 19:02

    I have a sample program for this:

    public class BrowserBackForward {

    /**
     * @param args
     * @throws InterruptedException 
     */
    public static void main(String[] args) throws InterruptedException {
        WebDriver driver = new FirefoxDriver();
        driver.get("http://seleniumhq.org/");
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        //maximize the window
        driver.manage().window().maximize();
    
        driver.findElement(By.linkText("Documentation")).click();
        System.out.println(driver.getCurrentUrl());
        driver.navigate().back();
        System.out.println(driver.getCurrentUrl());
        Thread.sleep(30000);
        driver.navigate().forward();
        System.out.println("Forward");
        Thread.sleep(30000);
        driver.navigate().refresh();
    
    }
    

    }

    0 讨论(0)
  • 2020-11-27 19:09
                    string BaseWindow = driver.CurrentWindowHandle;
                    ReadOnlyCollection<string> handles = driver.WindowHandles;
                    foreach (string handle in handles)
                    {
                        if (handle != BaseWindow)
                        {
                            string title = driver.SwitchTo().Window(handle).Title;
                            Thread.Sleep(3000);
                            driver.SwitchTo().Window(handle).Title.Equals(title);
                            Thread.Sleep(3000);
                        }
                    }
    
    0 讨论(0)
  • 2020-11-27 19:12

    It seems like you are not actually switching to any new window. You are supposed get the window handle of your original window, save that, then get the window handle of the new window and switch to that. Once you are done with the new window you need to close it, then switch back to the original window handle. See my sample below:

    i.e.

    String parentHandle = driver.getWindowHandle(); // get the current window handle
    driver.findElement(By.xpath("//*[@id='someXpath']")).click(); // click some link that opens a new window
    
    for (String winHandle : driver.getWindowHandles()) {
        driver.switchTo().window(winHandle); // switch focus of WebDriver to the next found window handle (that's your newly opened window)
    }
    
    //code to do something on new window
    
    driver.close(); // close newly opened window when done with it
    driver.switchTo().window(parentHandle); // switch back to the original window
    
    0 讨论(0)
  • 2020-11-27 19:15

    i was having some issues with windowhandle and tried this one. this one works good for me.

    String parentWindowHandler = driver.getWindowHandle(); 
    String subWindowHandler = null;
    
    Set<String> handles = driver.getWindowHandles();
    Iterator<String> iterator = handles.iterator();
    while (iterator.hasNext()){
        subWindowHandler = iterator.next();
        driver.switchTo().window(subWindowHandler);
    
        System.out.println(subWindowHandler);
    }
    
    
    driver.switchTo().window(parentWindowHandler); 
    
    0 讨论(0)
  • 2020-11-27 19:19

    I have an utility method to switch to the required window as shown below

    public class Utility 
    {
        public static WebDriver getHandleToWindow(String title){
    
            //parentWindowHandle = WebDriverInitialize.getDriver().getWindowHandle(); // save the current window handle.
            WebDriver popup = null;
            Set<String> windowIterator = WebDriverInitialize.getDriver().getWindowHandles();
            System.err.println("No of windows :  " + windowIterator.size());
            for (String s : windowIterator) {
              String windowHandle = s; 
              popup = WebDriverInitialize.getDriver().switchTo().window(windowHandle);
              System.out.println("Window Title : " + popup.getTitle());
              System.out.println("Window Url : " + popup.getCurrentUrl());
              if (popup.getTitle().equals(title) ){
                  System.out.println("Selected Window Title : " + popup.getTitle());
                  return popup;
              }
    
            }
                    System.out.println("Window Title :" + popup.getTitle());
                    System.out.println();
                return popup;
            }
    }
    

    It will take you to desired window once title of the window is passed as parameter. In your case you can do.

    Webdriver childDriver = Utility.getHandleToWindow("titleOfChildWindow");
    

    and then again switch to parent window using the same method

    Webdriver parentDriver = Utility.getHandleToWindow("titleOfParentWindow");

    This method works effectively when dealing with multiple windows.

    0 讨论(0)
  • 2020-11-27 19:23
    Set<String> windows = driver.getWindowHandles();
    Iterator<String> itr = windows.iterator();
    
    //patName will provide you parent window
    String patName = itr.next();
    
    //chldName will provide you child window
    String chldName = itr.next();
    
    //Switch to child window
    driver.switchto().window(chldName);
    
    //Do normal selenium code for performing action in child window
    
    //To come back to parent window
    driver.switchto().window(patName);
    
    0 讨论(0)
提交回复
热议问题