2012-08-15 3 views
6

Ich entwickle eine Anwendung, in der wir überprüfen müssen, ob die Webanwendung läuft und die URL die erwarteten Ergebnisse liefert.Gibt es eine Möglichkeit, einen bereits laufenden Browser an selen webdriver in Java anzuhängen?

Unsere Scheduler führen diese Anwendung 12 Mal pro Tag. Bei jedem Start wird der Firefox-Treiber ausgeführt und ein neues Browserfenster öffnet sich, um die Operationen auszuführen.

Ich möchte eine Technik, wo wir den Firefox-Browser 1 Mal öffnen und es bei jedem Aufruf von Selen-Treiber wiederverwenden.

Antwort

6

Ich bin eigentlich nicht ganz sicher, dass Sie in ein Fenster wechseln können, das nicht vom Treiber erzeugt wird. Ich denke, die Leute, die an dem selen 2-Projekt arbeiten, haben ein wenig daran gearbeitet, zu einem Fenster zu wechseln, das von einem anderen Treiber erzeugt wurde. Wenn Sie das tun:

driver.getWindowHandles() 

Alles, was Sie die Fenster durch den Fahrer Objekt hervorgebracht bekommen sind es aufgerufen wird.

Dies ist eine ziemlich alte Feature-Anforderung: Allow webdriver to attach to a running browser. Also ist es momentan nicht möglich.

+1

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

5

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.

Verwandte Themen