2015-06-10 5 views
7

Ho un problema con cucumberjs. Non riesco a trovare un modo per garantire quell'elemento con il selettore dato è presentato in DOM. Sto usando cucumberjs con Chai. https://github.com/cucumber/cucumber-js Oggetto restituisce isPresent - non importa se l'elemento esiste o meno. Quindi la domanda è come verificare se l'elemento è presente in DOM.cetriolo-js e Chai come aspettarsi se l'elemento con un selettore dato esiste in DOM

Modifica la domanda per condividere una lezione appresa. Ho letto anche la documentazione, voglio ringraziare Nathan Thompson. isPresent() restituisce una promessa che risolverà se l'elemento è presente nella pagina.

http://angular.github.io/protractor/#/api?view=Protractor.prototype.isElementPresent

Gli esempi di codice è un po 'fuorviante. Quindi, se si vuole aspettare se elemento con una data di selezione esiste nel DOM è necessario utilizzare qualcosa di simile:

element(by.id('someId')).isPresent().then(function(isElementVisible) { 
    expect(isElementVisible).to.be.true; 
}); 

O uso chai con promesse.

expect(element.isPresent()).to.eventually.be.false 

Tuttavia, la parola "alla fine" sembra sgradevole. Vogliamo essere sicuri non alla fine certo. :)

Here possono essere visualizzati articolo su questa domanda nel mio blog personale.

+1

Dove è definito il metodo 'isPresent'? CucumberJS o Chai? –

+0

isPresent è il metodo dell'API del goniometro. –

+0

In base alla documentazione [isPresent] (http://angular.github.io/protractor/#/api?view=ElementFinder.prototype.isPresent), verifica solo se l'elemento esiste o meno nell'albero del documento. Stai cercando di rilevare se invece l'elemento è visibile? Un elemento può essere invisibile, ma sempre "presente" nell'albero del documento. –

risposta

10

Quasi tutte le funzioni in Protractor restituiscono promesse che si risolvono nei valori che si desidera testare. Quindi, se si sta solo cercando di fare qualcosa di simile alla seguente, sarà sempre esito negativo perché è affermare sull'oggetto promessa restituito da isPresent:

expect(element.isPresent()).to.be.false 

mi consiglia di utilizzare il plugin chai-as-promised per Chai per gestire situazioni come questa . Fornisce la catena eventually che risolverà le promesse per te e asserirà sul valore risultante. L'esempio sopra sarebbe simile a questo:

expect(element.isPresent()).to.eventually.be.false 
0

Perché quando ci si aspetta la promessa di restituire elemento usiamo "false"? Forse intendi: expect(element.isPresent()).to.be.true?

+0

Questo non fornisce una risposta alla domanda. Per criticare o richiedere chiarimenti da un autore, lascia un commento sotto il loro post. Se [guadagni] (// meta.stackoverflow.com/q/146472/169503) sufficiente [reputazione] (// stackoverflow.com/help/whats-reputation) sarai in grado di [commentare qualsiasi post] (/ /stackoverflow.com/help/privileges/comment). –

Problemi correlati