Ich probiere Protractor aus, um die Angular-App e2e zu testen, und habe nicht herausgefunden, wie ich feststellen kann, ob ein Element eine bestimmte Klasse hat oder nicht.
In meinem Fall klickt der Test auf die Schaltfläche "Senden" und jetzt möchte ich wissen, ob form [name = "getoffer"] die Klasse .ngDirty hat. Was können die Lösungen sein?
describe('Contact form', function() {
beforeEach(function(){
browser.get('http://localhost:9000');
element(by.linkText('Contact me')).click();
});
it('should fail form validation, all fields pristine', function() {
element(by.css('.form[name="getoffer"] input[type="submit"]')).click();
expect(element(by.name('getoffer'))).toHaveClass('ngDirty'); // <-- This line
});
});
quelle
expect(hasClass(element(by.name('getoffer')), 'ng-dirty')).toBe(true);
Wenn Sie Protractor mit Jasmine verwenden, können Sie es
toMatch
als regulären Ausdruck verwenden ...Beachten Sie auch, dass
toContain
die Listenelemente übereinstimmen, wenn Sie dies benötigen.quelle
element
, ein Objekt mit einerhasClass
Methode zurückzugeben, die Sie in einenexpect
AufruftoContain
könnte eine bessere Wahl sein alstoMatch
in diesem Fall./(^|\s)ngDirty($|\s)/
..not.toContain
zu überprüfen, ob es nicht die bestimmte Klasse hat, oder.toContain
um zu überprüfen, ob es existiertAm einfachsten ist:
quelle
java.util.ArrayList cannot be cast to java.lang.String
auf Microsoft EdgeBasierend auf der Antwort von Sergey K können Sie dazu auch einen benutzerdefinierten Matcher hinzufügen:
(Kaffeeskript)
Dann können Sie es in Tests wie diesen verwenden:
Andernfalls wird der folgende Fehler angezeigt:
quelle
Hast du es versucht...
oder eine Variation der oben genannten ...
quelle
Ich habe diesen Matcher gemacht, ich musste ihn in ein Versprechen einwickeln und 2 Retouren verwenden
In meinem Test kann ich jetzt so etwas machen:
Dies funktioniert auch, wenn ein Element mehrere Klassen hat oder wenn ein Element überhaupt kein Klassenattribut hat.
quelle
Hier ein Jasmine 1.3.x Custom
toHaveClass
Matcher mit Negationsunterstützung.not
und einer Wartezeit von bis zu 5 Sekunden (oder was auch immer Sie angeben).In dieser Übersicht finden Sie den vollständigen benutzerdefinierten Matcher, der Ihrem onPrepare-Block hinzugefügt werden soll
Beispielnutzung:
quelle
So mache ich es zumindest, ohne die Expect-Funktion verwenden zu müssen. Diese Funktion gibt einfach true zurück, wenn sich die Klasse innerhalb des Elements befindet, und false, wenn nicht. Dies verwendet auch Versprechen, so dass Sie es wie folgt verwenden würden:
Bearbeiten: Ich habe gerade festgestellt, dass dies im Wesentlichen die gleiche wie die Top-Antwort ist
quelle
Eine Möglichkeit, dies zu erreichen, wäre die Verwendung von xpath und use
contains()
Beispiel:
quelle
Sie können den CSS-Parser verwenden, um dies zu handhaben, indem Sie überprüfen, ob ein Element mit der angegebenen Klasse vorhanden ist:
quelle