In der Dokumentation für Winkelmesser sehe ich folgendes Beispiel:
describe('by model', function() {
it('should find an element by text input model', function() {
var username = element(by.model('username'));
username.clear();
username.sendKeys('Jane Doe');
var name = element(by.binding('username'));
expect(name.getText()).toEqual('Jane Doe');
});
Was hier klar erscheint, ist, dass Sie "by.model" verwenden können, um Werte in einem Eingabefeld festzulegen. Wenn Sie jedoch ein Eingabefeld betrachten und sehen möchten, was darin enthalten ist, müssen Sie "by.binding" verwenden.
Ich habe eine Reihe von Codes, in denen ich (zusammenfassend) Folgendes tue:
element(by.model('risk.name')).sendKeys('A value');
expect(element(by.model('risk.name')).getText()).toEqual('A value');
(In meinem realen Code speichere ich die Entität und kehre dann im Bearbeitungsmodus zu ihr zurück. Ich überprüfe, ob mein Wert tatsächlich gespeichert wurde. Aber es läuft immer noch auf dasselbe hinaus, und dieser Beispielcode gibt das gleiche Problem.)
Dies gibt mir einen Fehler:
Error: Expected '' to equal 'A value'.
Theoretisch kann ich nach dem Beispiel aus den Dokumenten stattdessen Folgendes tun:
element(by.model('risk.name')).sendKeys('A value');
expect(element(by.binding('risk.name)).getText()).toEqual('A value');
Aber die by.binding scheint das vollqualifizierte Modell nicht zu mögen, ich erhalte eine Fehlermeldung:
Error: No element found using locator: by.binding("risk.name")
Es funktioniert (auf eine Art und Weise), wenn ich:
element(by.model('risk.name')).sendKeys('A value');
expect(element(by.binding('name')).getText()).toEqual('A value');
Dies findet ein Element, gibt aber auch eine Warnung aus, dass ich mehr als ein Element habe, das mit 'Name' übereinstimmt. Und leider ist der, den es auswählt, nicht der richtige.
Also zwei Fragen:
- Sollte das by.model in der Lage sein, ein getText () zurückzugeben, oder gibt es eine Entwurfsentscheidung, dass dies nicht der Fall ist und wir stattdessen by.binding verwenden müssen?
- Sollte ich in der Lage sein, eine vollständig qualifizierte Entität in by.binding zu verwenden, oder gibt es eine Entwurfsentscheidung, bei der by.binding den vollständigen Modellnamen nicht mag? Wenn ja, mit welchem anderen Qualifikationsmerkmal kann ich zwischen meinen verschiedenen Bindungen auswählen?
BEARBEITEN:
Ich habe auch die von vdrulerz vorgeschlagene Lösung ausprobiert und den Code wie folgt geändert:
element(by.model('risk.name')).getText().then(function(text) {
console.log(text);
expect(text).toEqual('A risk name');
});
Das console.log gibt einen leeren Wert zurück (kein Versprechen oder Objekt), und die Erwartung gibt die folgende Meldung nicht aus:
Expected '' to equal 'A risk name'.
Meines Wissens nach korrigiert der Winkelmesser bereits die Erwartung, das Versprechen zu erfüllen, und ich bin der Meinung, dass das zugrunde liegende Problem darin besteht, dass getText nicht in einem über ein Modell identifizierten Feld funktioniert (ich kann erfolgreich Text auf Etiketten und anderen Widgets abrufen).
Ich kann auch den folgenden Code mit getAttribute anstelle von getText () ausführen:
expect(element(by.model('risk.name')).getAttribute('autofocus')).toEqual('true');
element(by.model('risk.name')).getAttribute('autofocus').then(function(text) {
console.log(text);
expect(text).toEqual('true');
});
Der erste Teil geht vorbei - die Erwartung funktioniert. Der zweite Teil funktioniert ebenfalls und legt nahe, dass die Syntax von vdrulerz ebenfalls gültig ist und "true" in der Konsole protokolliert. Ich denke, es gibt möglicherweise einen Fehler mit getText?
quelle
getText()
Die Funktion funktioniert nicht mehr so wie früher für Webdriver. Damit sie für Winkelmesser funktioniert, müssen Sie sie in eine Funktion einbinden und den Text so zurückgeben, wie wir es für unser Winkelmesser-Framework getan haben, in dem wir ihn gespeichert haben gemeinsame Funktion wie -Auf diese Weise können Sie den Text eines Elements haben.
Lassen Sie mich wissen, wenn es noch unklar ist.
quelle
Ich hatte dieses Problem. Ich habe Jmrs Lösung ausprobiert, aber es hat bei mir nicht funktioniert. Da alle Eingabefelder ng-Modellattribute haben, könnte ich das Attribut abrufen und auswerten und den Wert erhalten.
HTML
Winkelmesser
quelle
Dieser Code funktioniert. Ich habe ein Datumseingabefeld, das so eingestellt ist, dass es schreibgeschützt ist, wodurch der Benutzer gezwungen wird, aus dem Kalender auszuwählen.
für ein Startdatum:
für ein Enddatum:
quelle
Der folgende Code funktioniert für mich, um Text von der Eingabe zu erhalten
quelle
Sie müssen Promise verwenden, um Werte von Elementen zu drucken oder zu speichern.
quelle
Sie können so etwas versuchen
Dann können Sie diese Funktion aufrufen, wo Sie den Wert erhalten möchten.
quelle
Sie können jQuery verwenden, um Text in das Textfeld abzurufen (funktioniert gut für mich). Überprüfen Sie die Bilddetails
Code:
Fügen Sie diese obige Abfrage in Ihren Code ein. Bilddetail:
quelle