Switch tabs using Selenium WebDriver with Java

前端 未结 21 1146
野性不改
野性不改 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:50
    protected void switchTabsUsingPartOfUrl(String platform) {
        String currentHandle = null;
        try {
            final Set<String> handles = driver.getWindowHandles();
            if (handles.size() > 1) {
                currentHandle = driver.getWindowHandle();
            }
            if (currentHandle != null) {
                for (final String handle : handles) {
                    driver.switchTo().window(handle);
                    if (currentUrl().contains(platform) && !currentHandle.equals(handle)) {
                        break;
                    }
                }
            } else {
                for (final String handle : handles) {
                    driver.switchTo().window(handle);
                    if (currentUrl().contains(platform)) {
                        break;
                    }
                }
            }
        } catch (Exception e) {
            System.out.println("Switching tabs failed");
        }
    }
    

    Call this method and pass parameter a substring of url of the tab you want to switch to

    0 讨论(0)
  • 2020-11-22 12:51
        psdbComponent.clickDocumentLink();
        ArrayList<String> tabs2 = new ArrayList<String> (driver.getWindowHandles());
        driver.switchTo().window(tabs2.get(1));
        driver.close();
        driver.switchTo().window(tabs2.get(0));
    

    This code perfectly worked for me. Try it out. You always need to switch your driver to new tab, before you want to do something on new tab.

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

    Simple Answer which worked for me:

    for (String handle1 : driver1.getWindowHandles()) {
            System.out.println(handle1); 
            driver1.switchTo().window(handle1);     
    }
    
    0 讨论(0)
  • 2020-11-22 12:51

    Please see below:

    WebDriver driver = new FirefoxDriver();
    
    driver.manage().window().maximize();
    driver.get("https://www.irctc.co.in/");
    String oldTab = driver.getWindowHandle();
    
    //For opening window in New Tab
    String selectLinkOpeninNewTab = Keys.chord(Keys.CONTROL,Keys.RETURN); 
    driver.findElement(By.linkText("Hotels & Lounge")).sendKeys(selectLinkOpeninNewTab);
    
    // Perform Ctrl + Tab to focus on new Tab window
    new Actions(driver).sendKeys(Keys.chord(Keys.CONTROL, Keys.TAB)).perform();
    
    // Switch driver control to focused tab window
    driver.switchTo().window(oldTab);
    
    driver.findElement(By.id("textfield")).sendKeys("bangalore");
    

    Hope this is helpful!

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

    With Selenium 2.53.1 using firefox 47.0.1 as the WebDriver in Java: no matter how many tabs I opened, "driver.getWindowHandles()" would only return one handle so it was impossible to switch between tabs.

    Once I started using Chrome 51.0, I could get all handles. The following code show how to access multiple drivers and multiple tabs within each driver.

    // INITIALIZE TWO DRIVERS (THESE REPRESENT SEPARATE CHROME WINDOWS)
    driver1 = new ChromeDriver();
    driver2 = new ChromeDriver();
    
    // LOOP TO OPEN AS MANY TABS AS YOU WISH
    for(int i = 0; i < TAB_NUMBER; i++) {
       driver1.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "t");
       // SLEEP FOR SPLIT SECOND TO ALLOW DRIVER TIME TO OPEN TAB
       Thread.sleep(100);
    
    // STORE TAB HANDLES IN ARRAY LIST FOR EASY ACCESS
    ArrayList tabs1 = new ArrayList<String> (driver1.getWindowHandles());
    
    // REPEAT FOR THE SECOND DRIVER (SECOND CHROME BROWSER WINDOW)
    
    // LOOP TO OPEN AS MANY TABS AS YOU WISH
    for(int i = 0; i < TAB_NUMBER; i++) {
       driver2.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "t");
       // SLEEP FOR SPLIT SECOND TO ALLOW DRIVER TIME TO OPEN TAB
       Thread.sleep(100);
    
    // STORE TAB HANDLES IN ARRAY LIST FOR EASY ACCESS
    ArrayList tabs2 = new ArrayList<String> (driver1.getWindowHandles());
    
    // NOW PERFORM DESIRED TASKS WITH FIRST BROWSER IN ANY TAB
    for(int ii = 0; ii <= TAB_NUMBER; ii++) {
       driver1.switchTo().window(tabs1.get(ii));
       // LOGIC FOR THAT DRIVER'S CURRENT TAB
    }
    
    // PERFORM DESIRED TASKS WITH SECOND BROWSER IN ANY TAB
    for(int ii = 0; ii <= TAB_NUMBER; ii++) {
       drvier2.switchTo().window(tabs2.get(ii));
       // LOGIC FOR THAT DRIVER'S CURRENT TAB
    }
    

    Hopefully that gives you a good idea of how to manipulate multiple tabs in multiple browser windows.

    0 讨论(0)
  • 2020-11-22 12:56
    Set<String> tabs = driver.getWindowHandles();
    Iterator<String> it = tabs.iterator();
    tab1 = it.next();
    tab2 = it.next();
    driver.switchTo().window(tab1);
    driver.close();
    driver.switchTo().window(tab2);
    

    Try this. It should work

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