How to switch between two windows in browser using Selenium java

前端 未结 8 1154
面向向阳花
面向向阳花 2020-12-11 06:57

I\'m working with Selenium Automation. In this, When i click a link in a current window, a new window opens. I just want to switch the control to the new window. But i can\'

相关标签:
8条回答
  • 2020-12-11 07:28

    I finally found the answer, I used the below method to switch to the new window,

    public String switchwindow(String object, String data){
            try {
    
            String winHandleBefore = driver.getWindowHandle();
    
            for(String winHandle : driver.getWindowHandles()){
                driver.switchTo().window(winHandle);
            }
            }catch(Exception e){
            return Constants.KEYWORD_FAIL+ "Unable to Switch Window" + e.getMessage();
            }
            return Constants.KEYWORD_PASS;
            }
    

    To move to parent window, i used the following code,

     public String switchwindowback(String object, String data){
                try {
                    String winHandleBefore = driver.getWindowHandle();
                    driver.close(); 
                    //Switch back to original browser (first window)
                    driver.switchTo().window(winHandleBefore);
                    //continue with original browser (first window)
                }catch(Exception e){
                return Constants.KEYWORD_FAIL+ "Unable to Switch to main window" + e.getMessage();
                }
                return Constants.KEYWORD_PASS;
                }
    
    0 讨论(0)
  • 2020-12-11 07:31
          Set <String> set = driver.getWindowHandles();
          Iterator<String> it = set.iterator();
          String parentWindowId = it.next();
          String childWindowId = it.next();
          System.out.println(set);
          driver.switchTo().window(childWindowId);
    
    0 讨论(0)
  • 2020-12-11 07:33

    Here is the best methods to switch in window using index and title. you can add in base class and use it frequently.

    public  void switchToWindow(String windowTitle) {
        Set<String> windows = driver.getWindowHandles();
        for (String window : windows) {
            driver.switchTo().window(window);
            if (driver.getTitle().contains(windowTitle)) {
                return;
            }
        }
    }
    
    
    
    
      public void switchToWindow(int index) {
        Set<String> windows = driver.getWindowHandles();
        int totalWin= windows.size();
        String winTitle = null;
        for(int i=0;i<totalWin;i++) {
            if(i==index) {
            winTitle = windows.toArray()[i].toString();
        }
        }
        driver.switchTo().window(winTitle);
        System.out.println(winTitle);
    }
    
    0 讨论(0)
  • 2020-12-11 07:43

    In an excerpt from a getting started with selenium webdriver project on github,

        /**
         * Waits for a window to appear, then switches to it.
         * @param regex Regex enabled. Url of the window, or title.
         * @return
         */
        public AutomationTest waitForWindow(String regex) {
            Set<String> windows = driver.getWindowHandles();
    
            for (String window : windows) {
                try {
                    driver.switchTo().window(window);
    
                    p = Pattern.compile(regex);
                    m = p.matcher(driver.getCurrentUrl());
    
                    if (m.find()) {
                        attempts = 0;
                        return switchToWindow(regex);
                    }
                    else {
                        // try for title
                        m = p.matcher(driver.getTitle());
    
                        if (m.find()) {
                            attempts = 0;
                            return switchToWindow(regex);
                        }
                    }
                } catch(NoSuchWindowException e) {
                    if (attempts <= MAX_ATTEMPTS) {
                        attempts++;
    
                        try {Thread.sleep(1);}catch(Exception x) { x.printStackTrace(); }
    
                        return waitForWindow(regex);
                    } else {
                        fail("Window with url|title: " + regex + " did not appear after " + MAX_ATTEMPTS + " tries. Exiting.");
                    }
                }
            }
    
            // when we reach this point, that means no window exists with that title..
            if (attempts == MAX_ATTEMPTS) {
                fail("Window with title: " + regex + " did not appear after 5 tries. Exiting.");
                return this;
            } else {
                System.out.println("#waitForWindow() : Window doesn't exist yet. [" + regex + "] Trying again. " + attempts + "/" + MAX_ATTEMPTS);
                attempts++;
                return waitForWindow(regex);
            }
        }
    
        /**
         * Switch's to a window that is already in existance.
         * @param regex Regex enabled. Url of the window, or title.
         * @return
         */
        public AutomationTest switchToWindow(String regex) {
            Set<String> windows = driver.getWindowHandles();
    
            for (String window : windows) {
                driver.switchTo().window(window);
                System.out.println(String.format("#switchToWindow() : title=%s ; url=%s",
                        driver.getTitle(),
                        driver.getCurrentUrl()));
    
                p = Pattern.compile(regex);
                m = p.matcher(driver.getTitle());
    
                if (m.find()) return this;
                else {
                    m = p.matcher(driver.getCurrentUrl());
                    if (m.find()) return this;
                }
            }
    
            fail("Could not switch to window with title / url: " + regex);
            return this;
        }
    

    These are 2 custom functions to help you get started. Or you can check out that project from github to make your selenium projects better designed and easier.

    These functions can switch to, or wait for (if it doesn't exist) a window with a certain title / url.

    0 讨论(0)
  • 2020-12-11 07:47
    //to get the current/parent window
    
    String parentWindowContact = driver.getWindowHandle();
    
    //to switch to the new window from current/parent window
    
    Set<String> handleswindow =driver.getWindowHandles();
    
    for(String windowHandle : handleswindow)
    
    {
    
       driver .switch To().window(windowHandle);
    
    }
    
    //to close the new window
    
    driver.close();
    
    //to switch back to the parent window
    
    driver.switchTo().window(parentWindowContact);
              o switch back to the parent window
    
    driver.switchTo().window(parentWindowContact);
    
    0 讨论(0)
  • 2020-12-11 07:52

    Yes this is possible. First you need to save the refrence to current window.

    String parentWindow= driver.getWindowHandle();
    

    The after having clicked the link, you need to switch to the other window.

    List<String> allWindows = driver.getWindowHandles();
    for(String curWindow : allWindows){
        driver.switchTo().window(curWindow);
    }
    

    This is where you perform operations on new window, finally closing it with

    driver.close();
    

    and switch back to parent window

    driver.switchTo().window(parentWindow);
    
    0 讨论(0)
提交回复
热议问题