In meinem index.html, ich sage ausdrücklich:Angular Protractor: Führen Sie Scripts in Browser-Kontext
window.myAppInstance = new MyApp.myAppConstructor();
In meiner To-do-spec.js, ich habe folgendes Setup:
describe('my web page', function() {
it('should have a "myAppInstance" object on the window', function() {
browser.get('https://my.web.page.com');
function myTest() {
return Object.keys(window.myAppInstance).sort();
};
var p = browser.driver.executeScript(myTest);
p.then(function(ret) {
console.log("yay");
console.log(ret);
}, function() {
console.log("error");
console.log(arguments);
});
});
});
Aber Winkelmesser findet meine App nicht. Stattdessen findet sie null oder nicht definiert:
error
{ '0':
{ [WebDriverError: unknown error: Cannot convert undefined or null to object
(Session info: chrome=50.0.2661.102)
... and more garbage
Aber von Chrome Konsole, ich
window.myAppInstance
ganz gut laufen kann, und er druckt richtig das Objekt aus.
Wie kann ich von meinem Winkelmesser-Test auf dieses Fensterobjekt zugreifen?
Edit 1: Ausführlicher über die Konstruktoren.
Edit 2: In meiner App verwende ich Winkel manual bootstrapping. Bei der weiteren Untersuchung, kann ich diese Zeile in meinem Test hinzufügen:
<snip>
browser.get('https://my.web.page.com');
**browser.pause()**
<snip>
Meine Schritte jetzt: 1) Hit F12 bringen Chrome Developer Tools 2) in der Konsole suchen. Notieren Sie einen Fehler. Meine App ist abgestürzt. 3) Drücken Sie die Aktualisierungsschaltfläche im Browser manuell. 4) Beachten Sie, wie die App aktualisiert wird und alles wunderbar lädt. Ich kratze verwirrt den Kopf. Schließen daraus, dass es wahrscheinlich, dass irgendwie ist, die Seite Start ist programmatisch mit
browser.get('https://my.web.page.com');
unterschiedlich genug von dem Browser bis zu öffnen und das Schreiben in dieser URL zu brechen.
Ich frage mich jetzt, Was wäre mit dem Ausführen der Tests mit Winkelmesser würde meine App fehlschlagen?
Danke für die Antwort! Es klingt vielversprechend. Ich werde es versuchen, wenn ich wieder an meinem Computer bin. – Bill
Lustig sollten Sie das Verb 'versprechen' verwenden. – targumon