Search code examples
javaseleniumawtrobot

How to open new tab


Robot rb =new Robot();

rb.keyPress(KeyEvent.VK_CONTROL);

rb.keyPress(KeyEvent.VK_T);

rb.keyRelease(KeyEvent.VK_CONTROL);

rb.keyRelease(KeyEvent.VK_T);

ArrayList<String> tabs = new ArrayList<String> (driver.getWindowHandles());

driver.switchTo().window(tabs.get(1)); 

Solution

  • Just add a pause after creating new tab as follows:

    Robot rb = new Robot();
    rb.keyPress(KeyEvent.VK_CONTROL);
    rb.keyPress(KeyEvent.VK_T);
    rb.keyRelease(KeyEvent.VK_CONTROL);
    rb.keyRelease(KeyEvent.VK_T);
    // add a pause
    Thread.sleep(1000);
    ArrayList<String> tabs = new ArrayList<String> (driver.getWindowHandles());
    driver.switchTo().window(tabs.get(1)); 
    // open website in a new tab
    driver.get("https://stackoverflow.com");
    

    or even better use WebDriverWait:

    Robot rb =new Robot();
    rb.keyPress(KeyEvent.VK_CONTROL);
    rb.keyPress(KeyEvent.VK_T);
    rb.keyRelease(KeyEvent.VK_CONTROL);
    rb.keyRelease(KeyEvent.VK_T);
    new WebDriverWait(driver, 10).until(ExpectedConditions.numberOfWindowsToBe(2));
    ArrayList<String> tabs = new ArrayList<String> (driver.getWindowHandles());
    driver.switchTo().window(tabs.get(1));
    driver.get("https://stackoverflow.com");
    

    this will wait at least 10 seconds until number of tabs will be 2.

    Note: you have to add some imports:

    import org.openqa.selenium.support.ui.ExpectedConditions;
    import org.openqa.selenium.support.ui.WebDriverWait;