2015-10-30 10 views
8

Sto utilizzando un'applicazione Angolare e quando eseguo il test sul goniometro a click(), non so quando dovrei risolvere il problema con un then().Goniometro, quando dovrei usare poi() dopo un clic()

Ho trovato questo su Goniometro API:

Una promessa che sarà risolto quando il comando click è stata completata.

Quindi, dovrei usare click().then() in ogni click?

risposta

7

Quindi, dovrei usare click() e poi() in ogni clic?

Decisamente no.

Non è necessaria perché goniometro/WebDriverJS ha questo meccanismo chiamato "Control Flow" che è fondamentalmente una coda di promesse che devono essere risolti:

WebDriverJS mantiene una coda di promesse in sospeso, chiamato il flusso di controllo , a mantenere l'esecuzione organizzata.

e goniometro attende angolare naturalmente e out-of-the-box:

Non è più necessario aggiungere attese e dorme per il test. Il rapportatore può eseguire automaticamente il passaggio successivo nel test nel momento in cui la pagina web termina le attività in sospeso, quindi non devi preoccuparti di in attesa che il test e la pagina web vengano sincronizzati.

che porta ad un codice di test abbastanza straight-forward:

var elementToBePresent = element(by.css(".anotherelementclass")).isPresent(); 

expect(elementToBePresent.isPresent()).toBe(false); 
element(by.css("#mybutton")).click(); 
expect(elementToBePresent.isPresent()).toBe(true); 

A volte, però, se si verificano problemi di sincronizzazione/temporizzazione, o la vostra applicazione in prova non è angolare, si può risolverlo risolvendo il click() esplicitamente then() e continuare all'interno del click callback:

expect(elementToBePresent.isPresent()).toBe(false); 
element(by.css("#mybutton")).click().then(function() { 
    expect(elementToBePresent.isPresent()).toBe(true); 
}); 

In questi casi ci sono anche Explicit Waits in soccorso, ma qui non è rilevante.

+1

Il futuro di Control Flow è in questione. "In futuro, il flusso di controllo viene rimosso" [Il flusso di controllo di WebDriver] (https://github.com/angular/protractor/blob/master/docs/control-flow.md#disabling-the-control -flow) –

1

Sì, dovresti. Forse al momento non è necessario, ma forse nelle prossime versioni lo è. Quindi, se click restituisce una promessa, dovresti usarla.

http://www.protractortest.org/#/api?view=webdriver.WebElement.prototype.click

+0

Il futuro di Control Flow è in questione. "In futuro, il flusso di controllo viene rimosso" [Flusso di controllo di WebDriver] (https: // github.com/angolare/goniometro/blob/master/docs/control-flow.md # disabilitazione-the-control-flow) –

Problemi correlati