Sie können an example I wrote sehen, die beweist, dass die Verwendung von Browsern in WebDriver einwandfrei funktioniert. Solange ein Browser-Fenster von WebDriver instanziiert wird, können Sie die getWindowHandles() verwenden, um immer auf sie zuzugreifen. Wenn Sie mehrere Fenster geöffnet haben, verfolgen Sie sie einfach mithilfe einer Liste. Sie können Fenster identifizieren, die auf eine bestimmte Weise angezeigt werden oder bestimmte Informationen enthalten, indem Sie verschiedene WebDriver-Methoden verwenden.
Mit anderen Worten, wenn WebDriver kein Browserfenster geöffnet hat, kann WebDriver nicht darauf zugreifen.
Ein grobes Beispiel:
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 einem Projekt, das ich habe, habe ich eine Methode, die bestimmte int-Statuscodes zurückgibt, je nach meiner Anordnung der Fenster. Wenn der Statuscode ist, was ich erwarte, dann weiß ich, dass der nächste Test fortfahren kann, ohne sich erneut einzuloggen oder ohne ein neues Fenster zu öffnen.
Natürlich, wenn Ihr Testframework, wie Surefire oder TestNG, Threads nach Klasse verzweigt, dann benötigen Sie eine Webdriver-Instanz pro Klasse. Wenn sich Ihr Testframework nach Methode verzweigt, müssen Sie die Webdriver-Instanz als Argument an die Testmethode übergeben, damit der Thread darauf zugreifen kann.
Das ist richtig. Solange alle Fenster von derselben Treiberinstanz gestartet wurden, ist es kein allzu großes Problem, Fenster wiederzuverwenden. Sie müssen nur eine Methode entwickeln, um untergeordnete Fenster zu schließen und ein übergeordnetes Fenster geöffnet zu lassen. – djangofan