2016-03-11 7 views
11

Sono nuovo nello scrivere casi di test usando il goniometro per l'applicazione non angolare. Ho scritto un caso di test esemplificativo. Il browser si chiude automaticamente dopo aver eseguito il test case. Come posso impedirlo. Ecco il mio codiceCome smettere di chiudere automaticamente il browser durante la scrittura dei casi di test del goniometro

var submitBtnElm = $('input[data-behavior=saveContribution]'); 

     it('Should Search', function() { 
     browser.driver.get('http://localhost/enrollments/osda1.html'); 
     browser.driver.findElement(by.id('contributePercentValue')).sendKeys(50); 
     submitBtnElm.click().then(function() { 

     }); 
     }); 
+0

puoi spiegare la tua domanda un po 'di più? Cosa intendi per browser si chiude automaticamente? Il tuo browser non dovrebbe chiudersi una volta completato l'esecuzione del tuo script? Grazie –

+0

@GirishSortur Voglio eseguire un'azione clic. Ma il browser si chiude prima di attivare il clic. Ho aggiornato il codice nella domanda. – Balu

+0

C'è qualche registro nella console dopo la chiusura della finestra? Cosa riporta il goniometro/gelsomino alla fine? – Gunderson

risposta

4

Ti suggerisco di utilizzare browser.driver.sleep(500); prima dell'operazione di clic.

Vedere questo.

browser.driver.sleep(500); 

element(by.css('your button')).click(); 
browser.driver.sleep(500); 
+0

ho un problema simile, io uso browser.sleep (1000); ma non ha risolto il mio problema, ho persino cambiato DEFAULT_TIMEOUT_INTERVAL = 120000; ma nessun risultato sempre vengono passati tutti i miei test prima ancora di caricare la pagina! – Emna

+2

L'aggiunta di posti letto come questo non è una buona pratica. Vedere sotto la soluzione se si utilizzano le funzioni di callback per mantenere aperta la finestra del browser – AdityaReddy

4

aggiungere una funzione di callback in It blocco e la finestra del browser non si chiude fino a quando lo si chiama. Quindi eseguire l'azione che avete bisogno e posizionare la richiamata a vostro piacimento

var submitBtnElm = $('input[data-behavior=saveContribution]'); 
    it('Should Search', function(callback) { 
    browser.driver.get('http://localhost/enrollments/osda1.html'); 
    browser.driver.findElement(by.id('contributePercentValue')).sendKeys(50); 
    submitBtnElm.click().then(function() { 
     // Have all the logic you need 
     // Then invoke callback 
     callback(); 
    }); 
    }); 
2

Sono sicuro che c'è un cambiamento innescato sulla tua pagina dal clic del pulsante. Potrebbe essere qualcosa di così sottile come un cambio di classe su un elemento o ovvio come un elemento <p></p> con il testo "Salvato" visualizzato. Quello che vorrei fare è, dopo il test, attendere esplicitamente questo cambiamento.

[...] 
return protractor.browser.wait(function() { 
    return element(by.cssContainingText('p', 'Saved')).isPresent(); 
}, 10000); 

Si potrebbe aggiungere un tale meccanismo di attesa per il metodo del file spec afterEach(), in modo che i test sono separati anche senza il goniometro angolare attese implicite.

2
var submitBtnElm = $('input[data-behavior=saveContribution]'); 

    it('Should Search', function() { 
    browser.driver.get('http://localhost/enrollments/osda1.html'); 
    browser.driver.findElement(by.id('contributePercentValue')).sendKeys(50); 
    submitBtnElm.click().then(function() { 

    }); 
    browser.pause(); // it should leave browser alive after test 
    }); 

browser.pause() dovrebbe lasciare il browser attivo fino a quando non lo si lascia andare.

@Edit Un altro approccio è impostare browser.ignoreSynchronization = true prima di browser.get (...). Il goniometro non avrebbe aspettato che Angular fosse caricato e potevi usare la sintassi dell'elemento usuale (...).

5

Aggiungi browser.pause() alla fine della funzione. All'interno della funzione stessa.

+0

Non sembra funzionare, sia all'interno della funzione che all'esterno – SomeoneElse

2

Il modo migliore per rendere il browser non per chiudere per qualche tempo, Usare browser.wait(). All'interno della funzione di attesa scrivere la logica per controllare o visibleOf() o invisibilityOf() di un elemento, che non è visibile o ci vorrà del tempo prima che diventi invisibile sull'interfaccia utente. In questo caso wait() continua a controllare la logica fino a quando non viene soddisfatta una delle condizioni o il timeout. È possibile aumentare il timeout se si desidera che il browser sia visibile più tempo.

var EC=protractor.ExpectedConditions; 
var submitBtnElm = $('input[data-behavior=saveContribution]'); 

it('Should Search', function() { 
    browser.driver.get('http://localhost/enrollments/osda1.html'); 
    browser.driver.findElement(by.id('contributePercentValue')).sendKeys(50); 
    submitBtnElm.click().then(function() { 
    browser.wait(function(){ 
      EC.invisibilityOf(submitBtnElm).call().then(function(isPresent){ 
       if(isPresent){ 
        return true; 
       } 
      }); 
     },20000,'error message'); 
    }); 
    }); 
0

ero anche alle prese con un problema simile in cui ho avuto un caso flusso di collaudo, dove siamo stati interagire con applicazioni multiple e quando si utilizza goniometro il browser è stato di chiusura dopo l'esecuzione di un file conf.js. Ora, quando ho esaminato la risposta precedente, è stato come aggiungere un ritardo che dipende dalla rapidità con cui la prossima azione mi sono esibita o è stato un caso da mancare. Anche se pensiamo dal punto di vista del debug, la maggior parte degli utenti eseguirà le corse notturne e vorrebbe avere il browser attivo per un paio d'ore prima di analizzare il problema. Così ho iniziato a esaminare il codice base del goniometro e ho trovato una soluzione generica in grado di aggirare questo problema, indipendentemente da qualsiasi browser. Attualmente la soluzione è specifica per il requisito che il browser non dovrebbe chiudersi dopo l'esecuzione di un file conf.js, quindi potrebbe essere migliorato se qualcuno potesse aggiungere un parametro di configurazione chiedendo all'utente se desidera chiudere il browser dopo la sua esecuzione.

Il browser può essere riutilizzato per il futuro file conf.js eseguito utilizzando tag --seleniumSessionId nella riga di comando.

Soluzione:

  • Vai a .. \ AppData \ Roaming \ npm \ node_modules \ goniometro \ costruito cui è installato il goniometro.
  • Aprire il file driverProvider.js e andare a funzionare quitDriver
  • Sostituire ritorno driver.quit() da ritorno 0

quanto riguarda il mio uso corrente non sembra esserci nessun lato effetto della modifica del codice, verrà aggiornato se mi sono imbattuto in qualsiasi altro problema a causa di questa modifica. Istantanea dello snippet di codice qui sotto.

Grazie Gleeson

Snapshot of frammento di codice: Snapshot of code snippet

+0

Ciao Gleeson: si dovrebbe prendere in considerazione l'inserimento del codice direttamente nella risposta. Renderà più facile l'indicizzazione e il riferimento. –

Problemi correlati