È possibile vedere an example I wrote che dimostra che il riutilizzo dei browser funziona correttamente in WebDriver. Fondamentalmente, fintanto che una finestra del browser viene istanziata da WebDriver, puoi usare getWindowHandles() per agguantarti sempre. Se hai più finestre aperte, tieni traccia di loro usando una lista. È possibile identificare finestre che appaiono in un determinato modo o contenere determinate informazioni in esse utilizzando vari metodi di WebDriver.
In altre parole, se una finestra del browser non è stata aperta da WebDriver, WebDriver non è in grado di collegarsi.
Un esempio di massima:
public static boolean selectWindow(WebDriver driver, String windowTitle){
//Search ALL currently available windows
for (String handle : driver.getWindowHandles()) {
String newWindowTitle = driver.switchTo().window(handle).getTitle();
if(newWindowTitle.equalsIgnoreCase(windowTitle))
//if it was found break out of the wait
return true;
}
return false;
}
In un progetto che ho realizzato, ho creato un metodo che restituisce alcuni codici di stato int, a seconda del mio disposizione delle finestre. Se il codice di stato è quello che mi aspetto, so che il prossimo test può procedere senza accedere nuovamente o senza aprire una nuova finestra.
Ovviamente, se il framework di test, come Surefire o TestNG, forchetta i thread per classe, è necessaria un'istanza di webdriver per classe. Se il framework di test esegue il fork in base al metodo, è necessario passare l'istanza di webdriver come argomento al metodo di test in modo che il thread possa accedervi.
Proprio così. Finché tutte le finestre sono state avviate dalla stessa istanza di driver, non è troppo difficile riutilizzare Windows. Hai solo bisogno di trovare un metodo per chiudere finestre secondarie e lasciare aperta una finestra genitore. – djangofan