2012-08-15 11 views
6

Sto sviluppando un'applicazione in cui è necessario verificare se l'applicazione Web è in esecuzione e l'url che fornisce i risultati previsti.C'è un modo per collegare un browser già in esecuzione al web driver selenio in java?

Il nostro programma di pianificazione esegue questa applicazione 12 volte al giorno. Ad ogni avvio viene eseguito il driver firefox e viene aperta una nuova finestra del browser per eseguire le operazioni.

Voglio una tecnica in cui apriamo il browser Firefox 1 volta e lo riusiamo in ogni chiamata con selenio-driver.

risposta

6

In realtà non sono del tutto sicuro che sia possibile passare a una finestra non generata dal driver. Penso che le persone che lavorano sul progetto del selenio 2 abbiano lavorato un po 'per passare a una finestra generata da un driver diverso. Quando si esegue:

driver.getWindowHandles() 

Tutto ciò che si ottiene sono le finestre generate dall'oggetto driver che viene chiamato.

Questa è una richiesta di funzionalità piuttosto vecchia: Allow webdriver to attach to a running browser. Quindi non è possibile adesso.

+1

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

5

È 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.

Problemi correlati