Esse mecanismo de controlar múltiplas janelas é uma parte um pouquinho mais complexa do WebDriver.
Se o seu teste clicar em um elemento que abra uma nova janela do browser, e você quiser interagir com essa nova janela, você precisa dizer ao WebDriver para mudar (switch) para a nova janela. Isso é feito através do comando driver.switchTo().window("<nome da janela>").
O problema é quando a janela não tem id (ou name), aí temos que pegar o windowHandle da janela. Esse windowHandle é uma String única que identifica a janela. Imagine que quero fazer o seguinte teste:
1 - Clicar num elemento que abre uma nova janela
2 - Mudar para a nova janela
3 - Fechar a nova janela e mudar para a janela inicial
O teste ficaria assim:
//Guardando o windowHandle da janela inicial, porque vou precisar mudar pra ela no final do teste e, além disso, vou usar esse valor para descobrir o windowHandle da nova janela
String windowHandleJanelaInicial = driver.getWindowHandle();
//Clico no elemento que abre a nova janela
WebElement elementoQueAbreNovaJanela = driver.findElement(...);
elementoQueAbreNovaJanela.click();
//Qual é o windowHandle da nova janela? Não sei. Vamos pegar então todos os windowHandles e guardar numa lista. Se só temos a janela inicial e a nova abertas, essa lista vai ter apenas 2 elementos. Para descobrir o windowHandle da janela nova, basta percorrer a lista e achar o elemento que NÃO seja o windowHandle da janela inicial.
List<String> windowHandles = driver.getWindowHandles();
//Para cada windowHandle dentro da lista de windowHandles...
for(String windowHandle : windowHandles) {
//Se o windowHandle NÃO é igual ao windowHandle da janela inicial, eu sei que é o da nova janela, então mando o WebDriver mudar para ela
if( !windowHandle.equals(windowHandleJanelaInicial) ) {
driver.switchTo().window(windowHandle);
}
}
//Agora estou na nova janela e posso interagir com os elementos dela
//Fecho a janela atual (nova) e mudo para a janela inicial
driver.close();
driver.switchTo().window(windowHandleJanelaInicial);