Switch tabs using Selenium WebDriver with Java

前端 未结 21 1180
野性不改
野性不改 2020-11-22 12:09

Using Selenium WebDriver with JAVA. I am trying to automate a functionality where I have to open a new tab do some operations there and come back to previous tab (Parent). I

相关标签:
21条回答
  • 2020-11-22 12:57
    String selectLinkOpeninNewTab = Keys.chord(Keys.CONTROL, Keys.RETURN);
        WebElement e = driver.findElement(By
                .xpath("html/body/header/div/div[1]/nav/a"));
    e.sendKeys(selectLinkOpeninNewTab);//to open the link in a current page in to the browsers new tab
    
        e.sendKeys(Keys.CONTROL + "\t");//to move focus to next tab in same browser
        try {
            Thread.sleep(8000);
        } catch (InterruptedException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        //to wait some time in that tab
        e.sendKeys(Keys.CONTROL + "\t");//to switch the focus to old tab again
    

    Hope it helps to you..

    0 讨论(0)
  • 2020-11-22 12:57

    To get parent window handles.

    String parentHandle = driverObj.getWindowHandle();
    public String switchTab(String parentHandle){
        String currentHandle ="";
        Set<String> win  = ts.getDriver().getWindowHandles();   
    
        Iterator<String> it =  win.iterator();
        if(win.size() > 1){
            while(it.hasNext()){
                String handle = it.next();
                if (!handle.equalsIgnoreCase(parentHandle)){
                    ts.getDriver().switchTo().window(handle);
                    currentHandle = handle;
                }
            }
        }
        else{
            System.out.println("Unable to switch");
        }
        return currentHandle;
    }
    
    0 讨论(0)
  • 2020-11-22 12:58
        public void closeAndSwitchToNextTab() {
            driver.close();
            ArrayList<String> tab = new ArrayList<>(driver.getWindowHandles());
            driver.switchTo().window(tab.get(1));
        }
    
        public void switchToPreviousTab() {
            ArrayList<String> tab = new ArrayList<>(driver.getWindowHandles());
            driver.switchTo().window(tab.get(0));
        }
    
        public void closeTabAndReturn() {
            driver.close();
            ArrayList<String> tab = new ArrayList<>(driver.getWindowHandles());
            driver.switchTo().window(tab.get(0));
        }
    
        public void switchToPreviousTabAndClose() {
            ArrayList<String> tab = new ArrayList<>(driver.getWindowHandles());
            driver.switchTo().window(tab.get(1));
            driver.close();
        }
    
    0 讨论(0)
  • 2020-11-22 12:59

    I had a problem recently, the link was opened in a new tab, but selenium focused still on the initial tab.

    I'm using Chromedriver and the only way to focus on a tab was for me to use switch_to_window().

    Here's the Python code:

    driver.switch_to_window(driver.window_handles[-1])
    

    So the tip is to find out the name of the window handle you need, they are stored as list in

    driver.window_handles
    
    0 讨论(0)
  • 2020-11-22 13:01

    public class TabBrowserDemo {

    public static void main(String[] args) throws InterruptedException {
        System.out.println("Main Started");
        System.setProperty("webdriver.gecko.driver", "driver//geckodriver.exe");
        WebDriver driver = new FirefoxDriver();
        driver.get("https://www.irctc.co.in/eticketing/userSignUp.jsf");
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
    
        driver.findElement(By.xpath("//a[text()='Flights']")).click();
        waitForLoad(driver);
        Set<String> ids = driver.getWindowHandles();
        Iterator<String> iterator = ids.iterator();
        String parentID = iterator.next();
        System.out.println("Parent WIn id " + parentID);
        String childID = iterator.next();
        System.out.println("child win id " + childID);
    
        driver.switchTo().window(childID);
        List<WebElement> hyperlinks = driver.findElements(By.xpath("//a"));
    
        System.out.println("Total links in tabbed browser " + hyperlinks.size());
    
        Thread.sleep(3000);
    //  driver.close();
        driver.switchTo().window(parentID);
        List<WebElement> hyperlinksOfParent = driver.findElements(By.xpath("//a"));
    
        System.out.println("Total links " + hyperlinksOfParent.size());
    
    }
    
    public static void waitForLoad(WebDriver driver) {
        ExpectedCondition<Boolean> pageLoadCondition = new
                ExpectedCondition<Boolean>() {
                    public Boolean apply(WebDriver driver) {
                        return ((JavascriptExecutor)driver).executeScript("return document.readyState").equals("complete");
                    }
                };
        WebDriverWait wait = new WebDriverWait(driver, 30);
        wait.until(pageLoadCondition);
    }
    
    0 讨论(0)
  • 2020-11-22 13:02

    There is a difference how web driver handles different windows and how it handles different tabs.

    Case 1:
    In case there are multiple windows, then the following code can help:

    //Get the current window handle
    String windowHandle = driver.getWindowHandle();
    
    //Get the list of window handles
    ArrayList tabs = new ArrayList (driver.getWindowHandles());
    System.out.println(tabs.size());
    //Use the list of window handles to switch between windows
    driver.switchTo().window(tabs.get(0));
    
    //Switch back to original window
    driver.switchTo().window(mainWindowHandle);
    


    Case 2:
    In case there are multiple tabs in the same window, then there is only one window handle. Hence switching between window handles keeps the control in the same tab.
    In this case using Ctrl + \t (Ctrl + Tab) to switch between tabs is more useful.

    //Open a new tab using Ctrl + t
    driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"t");
    //Switch between tabs using Ctrl + \t
    driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"\t");
    

    Detailed sample code can be found here:
    http://design-interviews.blogspot.com/2014/11/switching-between-tabs-in-same-browser-window.html

    0 讨论(0)
提交回复
热议问题