Ich versuche einen E2e-Test für meine Winkelanwendung zu schreiben, und insbesondere eine Form, die 3 Auswahleingänge hat. Der Test muss die Auswahl zufälliger Optionen aus diesen Auswahlmöglichkeiten beinhalten. Die erste Auswahl ist bereits mit Daten gefüllt, aber die anderen 2 wählen asynchron aus, wenn die zuvor ausgewählte ausgewählt wurde, so dass sie voneinander abhängig sind.Winkelmesser - Test einer Winkelform mit dynamisch bestückten Eingängen
Die Auswahleingänge verwenden auch ng-disabled und aktivieren nur, wenn Optionen gemäß ihren ng-repeat-Ausdrücken verfügbar sind.
Ich bin mit dem Seitenobjekt Ansatz mit meinen Tests, und so bin versucht, einige Utility-Funktionen zu machen, das zufällige Auswahl Verhalten in meinen Tests, die ich brauche zu erreichen:
Seite Objekt:
this.selectRandomCustomer = function() {
var option,
randomIndex;
this.customerSelect.click();
this.customerSelectOptions.count().then(function(count) {
randomIndex = Math.floor(Math.random() * count);
option = element(by.repeater('customer in vm.customers').row(randomIndex));
option.click();
});
};
this.selectRandomOrder = function() {
if(this.orderSelect.isEnabled()===true) {
var option,
randomIndex;
this.orderSelect.click();
this.orderSelectOptions.count().then(function(count) {
randomIndex = Math.floor(Math.random() * count);
option = element(by.repeater('order in vm.orders').row(randomIndex));
option.click();
});
}
};
Vorausgesetzt, dass die orderSelect
kann nur einmal mit Optionen nach der Auswahl einer Option aus der customerSelect
ausgewählt ausgewählt werden, fragte ich mich über das Versprechen in der Versprechen zurück, wenn aufgerufen, so this.selectRandomOrder
aufrufen, aber es scheint Dies ist undefiniert, da ich einen Fehler vom Winkelmesser bekomme, der sagt, dass er die selectRandomOrder
Funktion nicht finden kann.
Im Moment kann ich nur die erste Auswahl erhalten, um eine Option auszuwählen, da sie beim ersten Laden der Seite immer gefüllt ist.
Ich bin auch unsicher, ob die Verwendung von isEnabled()
tatsächlich für mich funktioniert, da ich sicher bin, dass dies für meine zweite Eingabe zurückgeben soll, aber wenn ich diese abmelde, sehe ich falsch. Funktioniert das nicht mit ng-disabled
?
Was sind die besten Verfahren für den Umgang mit Eingaben in einem Formular, das anfänglich nicht mit Daten gefüllt wird und darauf wartet, dass angular alle verfügbaren Optionen abruft und auffüllt?
Dank
UPDATE: Statt
Ich habe dies habe zu arbeiten um einen Anruf zu getAttribute()
für das Vorhandensein der disabled
Eigenschaft überprüfen verwenden.
Also aus meiner spec-Datei in einem it
Block kann ich
page.customerSelect.getAttribute('disabled').then(function(result){
if(!result) {
page.selectRandomCustomer();
}
});
page.orderSelect.getAttribute('disabled').then(function(result){
if(!result) {
page.selectRandomOrder();
}
});
Ideal nennen, was ich möchte in der Lage sein wird zu tun, um die selectRandomOrder aufzurufen, nachdem die Option im selectRandomCustomer klicken:
Ich habe versucht, this.selectRandomOrder
sofort nach der option.click()
aufrufen, aber ich bekomme einen Fehler, keine solche Funktion zu sagen, es scheint this
ist nicht zugänglich von innerhalb der zurückgegebenen Versprechen Funktion Rückruf .
Ah ja ok, Sie sagen mindestens ein Hauptproblem. Also, was sollte ich sonst noch tun? Danke – mindparse
@mindparse kommt drauf an..wie ist der aktuelle Stand des Problems? Hast du es geschafft? Vielen Dank. – alecxe
Danke, ich habe es funktioniert aber mit getAttribute() anstelle der isEnabled(). Ich glaube, ich habe gelesen, dass isEnabled nicht gut mit ng-disable funktioniert. Jedenfalls sehe ich mein Update so, dass ich im Idealfall weitere Funktionen von jedem Aufruf des Rückrufs zu Kettenaufrufen zu Funktionen in meinem Seitenobjekt aufrufen möchte. Auf diese Weise kann ich nur eine Hilfefunktion namens "selectOptions" haben, die ich aus meiner Testspezifikationsdatei aufrufen kann. – mindparse