2015-07-01 16 views
9

Ich habe ein Objekt wie:

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

Um dies zu debuggen, i in ers-Modus und versucht, zu sehen, was „Projekt“ hat. Wenn ich die Projektvariable wie folgt definiere und sie aufrufe, gibt sie mein Objekt zurück, aber wenn ich versuche, auf ihre Schlüssel (project.name) zuzugreifen, werde ich undefiniert. Wenn ich Object.keys (Projekt) mache, bekomme ich die Seitenobjektmethoden wie click, getAttribute, etc.

Irgendwelche Ideen, wie ich Zugang zu den ursprünglichen Objektschlüsseln haben kann?

anzeigen Seite:

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

Test-Seite:

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

Antwort

12

evaluate verwendet executeScript hinter den Kulissen. Es gibt ein ElementFinder, die auf das Objekt löst Sie suchen:

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

Die documentation sagt:

, die für jeden zugrundeliegenden Element der ausgewerteten Ausdruck aufgelöst wird. Das Ergebnis wird wie in webdriver.WebDriver.executeScript aufgelöst. Zusammenfassend - Primitive werden aufgelöst wie es ist, Funktionen werden in eine Zeichenfolge umgewandelt, und Elemente werden als WebElement zurückgegeben.

Überprüfen Sie auch Accessing Angular inside Protractor Test

Bearbeiten aus: Syntaxfehler

+1

scheint einige Syntaxfehler. Es sollte "element (by.id ('foo')) sein. Evaluate ('project'). Then (funktion (wert) { project = wert;});' –

+0

was symbolisiert 'wert'? – saruftw

+0

werte verwendet Versprechen. Der Wert sollte die zurückgegebenen Daten nach der Auswertung von "Projekt" geben – Sairam