0

Im wokring on a tool development that tests various services on Chrome browser. For each service I would need to launch a new tab on Chrome. I use the below code,

enter image description here

The first 2 new tabs works fine, when the 3rd tab is launched, the 1st tab's url is navigated to the one used for 3rd tab.

Not sure what's messing up. Need assistance!

1 Answers1

1

I believe when your loop enters second iteration, your if statement executes to true.

You can just do following:

for(String actual: handles){
    driver.switchTo().window(actual);
}

After execution of the above loop, your script will always point to last window opened. Then you can do:

driver.get(URL + service + URL_);

outside the loop.

P.S.: If required, for more enhancement you can use below script:

private void switchToLatestBrowserWindow(WebDriver driver, Set<String> priorHandles)
{
  new WebDriverWait(driver, 60).until( // keep trying to switch for 60 seconds
                        d -> {
                            Set<String> newHandles = d.getWindowHandles();

                            if (newHandles.size() != priorHandles.size()) {
                                log.Info("NewHandles Size not equal to PriorHandles size.");
                                String lastWindowHandle = "";
                                for (String windowHandle : newHandles) {
                                    lastWindowHandle = windowHandle;
                                }
                                log.Info("LastWindowHandle Id: " + lastWindowHandle);
                                d.switchTo().window(lastWindowHandle);
                                log.Info("Switched window to " + lastWindowHandle);
                                return true;
                            } else {
                                return false;
                            }
                        });
}

priorHandles is set of window handles retrieved before opening new window. (the first line of code, in your case). So complete snippet would look like:

Set<String> priorHandles = driver.getWindowHandles();
((JavasriptExecutor) driver).executeScript( script: "window.open()");
switchToLatestBrowserWindow(driver, priorHandles);
driver.get(URL + service + URL_);