J'essaie Protractor to e2e tester l'application Angular et je n'ai pas compris comment détecter si un élément a une classe spécifique ou non.
Dans mon cas, le test clique sur le bouton Soumettre et maintenant je veux savoir si le formulaire [name = "getoffer"] a la classe .ngDirty. Quelles peuvent être les solutions?
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
});
});
la source
expect(hasClass(element(by.name('getoffer')), 'ng-dirty')).toBe(true);
Si vous utilisez Protractor avec Jasmine, vous pouvez utiliser
toMatch
pour faire correspondre comme une expression régulière ...Notez également que
toContain
cela correspondra aux éléments de la liste, si vous en avez besoin.la source
element
à renvoyer un objet avec unehasClass
méthode, que vous pourriez envelopper à l'intérieur d'unexpect
appel ...toContain
pourrait être un meilleur choix quetoMatch
dans ce cas./(^|\s)ngDirty($|\s)/
..not.toContain
pour vérifier s'il n'a pas la classe particulière ou.toContain
pour vérifier si elle existeLe plus simple est:
la source
java.util.ArrayList cannot be cast to java.lang.String
sur Microsoft EdgeSur la base de la réponse de Sergey K, vous pouvez également ajouter un matcher personnalisé pour ce faire:
(coffeescript)
Ensuite, vous pouvez l'utiliser dans des tests comme celui-ci:
Et vous obtiendrez l'erreur suivante si ce n'est pas le cas:
la source
As-tu essayé...
ou une variante de ce qui précède ...
la source
J'ai fait ce matcher, j'ai dû l'envelopper dans une promesse et utiliser 2 retours
dans mon test, je peux maintenant faire des trucs comme ceci:
cela fonctionne également lorsqu'un élément a plusieurs classes ou lorsqu'un élément n'a aucun attribut de classe.
la source
Voici un
toHaveClass
matcher personnalisé Jasmine 1.3.x avec.not
support de négation et attendez jusqu'à 5 secondes (ou ce que vous spécifiez).Trouvez le matcher personnalisé complet à ajouter à votre bloc onPrepare dans cet article
Exemple d'utilisation:
la source
C'est ainsi que je le fais au moins, sans avoir besoin d'utiliser la fonction expect. Cette fonction renvoie simplement true si la classe est à l'intérieur de l'élément et false dans le cas contraire. Cela utilise également des promesses afin que vous l'utilisiez comme:
Edit: Je viens de réaliser que c'est essentiellement la même chose que la première réponse
la source
Une façon d'y parvenir serait d'utiliser xpath et d'utiliser
contains()
Exemple:
la source
Vous pouvez utiliser l'analyseur CSS pour gérer cela en vérifiant si un élément avec la classe donnée existe:
la source