2015-02-10 38 views
9

Mi imbatto in questo problema ogni volta che tento di attendere fino a quando un elemento DOM viene rimosso dall'albero DOM corrente sulla pagina Web che il test del goniometro sta testando. Ho già avuto un problema quando cerco di aspettare che un elemento DOM venga nascosto con questa bella tecnica offerta da user2912739 in un'altra discussione.Come aspettare quando un elemento viene rimosso dal DOM?

var el = element(by.css('.your-css-class')); 
return browser.wait(protractor.until.elementIsNotVisible(el)); 

Questo funziona abbastanza bene. Tuttavia, quando si tratta di aspettare che un elemento venga rimosso dall'albero DOM sia .isDisplayed() sia .isPresent() o le righe precedenti NON sembrano funzionare. Il test continuerebbe a essere eseguito ma sembra che stia cercando di ottenere quell'elemento ma non ha mai avuto successo, quindi alla fine è scaduto in base al timeout che imposta il file di configurazione. Per esempio. questo è il registro.

timeout: scaduta dopo 30.000 msec attesa di specifiche per completare

Il caso d'uso di questo può essere abbastanza frequente ogni volta che avete a che fare con i test se un elemento viene rimosso dalla struttura DOM, per istanza, una modale che viene chiusa e rimossa dalla pagina quando l'utente fa clic sulle azioni che chiudono quell'elemento modale o su un elemento che si desidera "eliminare" in modo che non esista più nella pagina. Quindi, nel test, si desidera solo continuare l'esecuzione del test non appena viene rimosso dall'albero DOM.

Ho cercato attraverso il goniometro e l'API del driver Web, e sembra che non ci sia api che fa questo lavoro.

+0

Sono nuovo di goniometro e questo è prima volta che ho visto come usare quello 'until'. no doc dice che è definito all'interno di 'goniometro' ... – llamerr

risposta

15

non sicuro dove hai ottenuto protractor.until dal momento che non fa parte della libreria principale. Questo è come si dovrebbe farlo con goniometro:

var el = element(by.css('.your-css-class')); 
return browser.wait(function() { 
    return el.isPresent().then(function(present) { 
    return !present; 
    }) 
}); 

volta feat(expectedConditions) è a (probabilmente goniometro 1.7), si può fare:

var EC = protractor.ExpectedConditions; 

var el = element(by.css('.your-css-class')); 
return browser.wait(EC.not(EC.presenceOf(el))); 
+0

Grazie, Hankduan, Questo era un approccio simile a quello che avevo nel mio precedente post http://stackoverflow.com/questions/26411574/protractor-wait-for -element-to-become-invisible-hidden – vichsu

+0

Ma quando si aspetta se l'elemento viene "rimosso" dal DOM, sia el.isPresent() che el.isDisplayed() non possono restituire una promessa non appena accade o non è già parte del DOM, perché non è mai soddisfatta. Il risultato è che il goniometro scatterebbe solo per questo blocco di codice nel blocco funzione Jasmine. Immagino che abbiamo a che fare con una condizione che non può mai essere soddisfatta. – vichsu

+0

Puoi chiarirlo? Non sono sicuro di cosa intendi. – hankduan