2015-02-28 18 views
9

Cerchi un aiuto su come dovrei ottenere una nuova finestra "pop-up" che viene attivata per la visualizzazione dopo aver fatto clic su un pulsante "login".Passaggio a una nuova finestra con selenio/goniometro Javascript

Sono in grado di arrivare a quando la finestra viene visualizzata ma non credo che il codice che sto attualmente utilizzando per afferrare la finestra "handle" funzioni correttamente. La mia situazione è un po 'diversa in quanto utilizzo il goniometro all'interno delle mie pagine, ma la nuova finestra non è basata su angolare, quindi devo passare a utilizzare solo selenio WebDriver mentre sono in quella finestra. (Qualcuno ha qualche idea se ci potrebbero essere problemi con questo approccio?)

Di seguito puoi trovare il frammento di codice che sto usando per creare il driver del selenio, oltre a quello che prova a "passare a/gestire l'handle" della nuova finestra che sta spuntando. So che non funziona correttamente perché continuo a ricevere errori "No Such Element" nel codice che segue cercando di trovare un modulo nella pagina.

// Create selenium webdriver/driver 
    var webdriver = require('selenium-webdriver'); 

    var driver = new webdriver.Builder(). 
     withCapabilities(webdriver.Capabilities.chrome()). 
     build(); 

    // Now make sure that the new window is popping up and we are navigating correctly to it 
     var handlePromise = browser.driver.getAllWindowHandles(); 
     handlePromise.then(function (handles) { 
     // parentHandle = handles[0]; 
     var popUpHandle = handles[1]; 

     // Change to new handle 
     browser.driver.switchTo().window(popUpHandle); 

     var popUpHandleFinal = browser.driver.getWindowHandle(); 
     expect(popUpHandleFinal).toEqual(popUpHandle); 
    }); 

paio di cose su questo:

  1. Se rimuovo il "browser" in linea "browser.driver.switchTo() finestra (popUpHandle)" in modo che si legge come "autista. switchTo(). window (popUpHandle) "Ricevo indietro e errore che legge come" UnknownError: unknown error: 'name' deve essere una stringa non vuota "Dopo aver effettuato una ricerca su questo è perché il metodo" switchTo() "sul driver non può essere nullo Questo errore viene risolto se utilizzo il codice mostrato sopra.

  2. Non sono sicuro al 100% se dovrei usare il goniometro (globale "browser" var) o utilizzare il "driver" dritto (selenio) che ho impostato prima come modo per ottenere le finestre.

Grazie per il vostro aiuto

+0

Può essere correlato dovrebbe occupare: http://stackoverflow.com/questions/28511013/non-angular-page- aperto-dopo-un-click. – alecxe

+1

Se si è già nel contesto di un driver del goniometro funzionante, non è necessario avviare internamente un'istanza di webdriver separata. (Questo probabilmente confonderà il browser con due controller remoti). Il goniometro espone il suo webdriver crudo tramite 'browser.driver', quindi dovrebbe essere corretto da usare. –

+0

Questo era il mio problema principale. Grazie. Una volta che ho eliminato l'impostazione dell'altro driver, sono tornato a utilizzare browser.driver dopo alcune iterazioni riuscendo a farlo funzionare. – parchambeau

risposta

12

partire dalla versione più recente del goniometro (v2.2) non ci dovrebbe essere un problema nel usando le maniglie delle finestre goniometro, che restituisce una serie di finestre che sono attualmente visualizzato . Come ha sottolineato P.T, non è necessario richiamare un'istanza driver separata ma una variabile globale browser funzionerà. La finestra che richiama il popup ha un indice di array di 0 e la finestra popup avrà un indice di array di 1. Di seguito è riportato un esempio di passaggio alla finestra a comparsa per lavorarci sopra.

browser.getAllWindowHandles().then(function(handles){ 
    browser.switchTo().window(handles[1]).then(function(){ 
     //do your stuff on the pop up window 
    }); 
}); 

Spero che questo aiuti.

+0

Grazie, questo mi aiuta davvero – lonewarrior556

+0

Ciao Ho provato il codice ma ottenendo lo stesso errore: UnknownError: errore sconosciuto: 'name' deve essere una stringa non vuota " below è il codice var handlePromise = browser.driver.getAllWindowHandles(); \t \t handlePromise.then (function (maniglie) {// parentHandle = maniglie [0]; var popUpHandle = maniglie [1];. // Passare alla nuova maniglia browser.driver.switchTo() finestra (popUpHandle); \t \t}); –

+0

@anuvratsingh puoi eseguire il debug di un po 'di più e dirmi su quale linea ti trovi di fronte errore s? Puoi anche controllare la lunghezza dell'array 'handles'? Penso che tu non abbia due finestre lì, ma solo una e quindi non puoi passare a 'handles [1]'. Grazie –

1

Se si fa clic su un collegamento o un pulsante per aprire una finestra a comparsa, aggiungere un po 'di attesa dopo clic utilizzando browser.sleep(ms).

questo ha funzionato per me e sono liberato di un errore " 'manico' parametro mancante"

element(by.className("name")).click(); 
browser.sleep(10000); //This line is important 
var winHandles=browser.getAllWindowHandles(); 
winHandles.then(function(handles) 
{ 
    var parentWindow=handles[0]; 
    var popUpWindow=handles[1]; 
    browser.switchTo().window(popUpWindow); 
    browser.switchTo().window(parentWindow); 
}) 
Problemi correlati