Angenommen, Sie eine aktuelle Version von Protractor verwenden, lassen Sie uns sagen,> = 1.1.0, hoffentlich> = 1.3.1
den Zugriff auf Browser-Seite JS-Code Der Versuch, direkt von Protractor wird nicht funktionieren, weil Protractor in läuft NodeJS und jeder Browser-Side-Code wird durch Selenium JsonWireProtocol ausgeführt.
Ohne weiteres Detail, ein funktionierendes Beispiel:
browser.get('https://angularjs.org/');
Einzeiler Versprechen, dass, wie von heute, zu '1.3.0-rc.3'
browser.executeScript('return window.angular.version.full;');
lösen Sie können es direkt in einer erwarten Anweisung gegeben Protractor des erwarten löst Versprechungen für Sie:
expect(browser.executeScript('return window.angular.version.full;')).
toEqual('1.3.0-rc.3');
Lange Beispiel: Übergeben einer Funktion anstelle einer Zeichenfolge plus ohne expect
Lösen des Versprechens für Sie. d. h. für mehr Kontrolle und um etwas Fantastisches mit dem Ergebnis zu machen.
browser.driver.executeScript(function() {
return window.angular.version.full;
}).then(function(result) {
console.log('NodeJS-side console log result: ' + result);
//=> NodeJS-side console log result: 1.3.0-rc.3
});
Eigentlich mit der Transporteur Version ich verwende, hatte ich 'browser.executeScript zu verwenden ('return myvar;'), dann (function (myvar) {...});.' Aber funktionierte perfekt , Vielen Dank! – hilnius
Wenn ich nur das Fenster-Objekt mit dieser Methode zurückgebe, bekomme ich "Maximale Call-Stack-Größe überschritten" :( – chrismarx
Ist wahrscheinlich eine schlechte Idee sowieso @chrismarx, nur das zurückgeben, was Sie wirklich brauchen;) –