2015-07-01 15 views
9

ho ottenuto un oggetto come:

$scope.project = {name: 'whatever', description: 'blabla', another: 'another'}; 

Per eseguire il debug di questo, io entro in modalità repl e provare a vedere che cosa "progetto" ha. Quando definisco la variabile di progetto come sotto, e la chiamo, restituisce il mio oggetto, ma quando provo ad accedere alle sue chiavi (project.name), ottengo undefined. Se faccio Object.keys (progetto) sto ottenendo i metodi di oggetto di pagina come click, getAttribute, ecc.

Qualche idea su come posso avere accesso alle chiavi dell'oggetto originale?

Vista laterale:

<h1 id="foo">{{project.name}}</h1> 

lato di prova:

var project = element(by.id('foo')).evaluate('project'); 

risposta

12

evaluate utilizza executeScript dietro le quinte. Restituisce un ElementFinder che risolve l'oggetto che si sta cercando:

var project; 
element(by.id('foo')).evaluate('project').then(function(value) { 
    project = value; 
}); 

Il documentation dice:

che risolve l'espressione valutata per ogni sottostante elemento. Il risultato sarà risolto come in webdriver.WebDriver.executeScript. In sintesi, le primitive saranno risolte come , le funzioni verranno convertite in stringa e gli elementi verranno restituiti come WebElement.

Inoltre, controllare Accessing Angular inside Protractor Test

Edit: errore di sintassi

+1

sembra un po 'di errore di sintassi. Dovrebbe essere 'element (by.id ('foo')) .value ('project'). Then (function (value) { project = value;});' –

+0

cosa rappresenta 'value'? – saruftw

+0

valutare usa Promise. il valore dovrebbe restituire i dati restituiti dopo aver valutato il "progetto" – Sairam