Comment tester si un élément a de la classe à l'aide de Rapporteur?
Je suis en train de sortir Rapporteur pour e2e test Angulaire de l'application et n'ont pas compris comment détecter si un élément a une classe spécifique ou pas.
Dans mon cas, le test clique sur le bouton soumettre et maintenant, je veux savoir si la forme[nom="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
});
});
Vous devez vous connecter pour publier un commentaire.
Un gotcha, vous avez à regarder dehors pour, avec l'aide de
toMatch()
, comme dans l'acceptation réponse, les correspondances partielles. Par exemple, disons que vous avez un élément qui pourrait avoir les classescorrect
etincorrect
, et vous voulez tester qu'il a la classecorrect
. Si vous utilisezexpect(element.getAttribute('class')).toMatch('correct')
, qui retourne vrai si l'élément a de laincorrect
classe.Ma suggestion:
Si vous voulez pour n'accepter que les correspondances exactes, vous pouvez créer une méthode d'assistance pour elle:
Vous pouvez l'utiliser comme ceci (en tirant parti du fait que
expect
résout automatiquement les promesses Rapporteur):expect(hasClass(element(by.name('getoffer')), 'ng-dirty')).toBe(true);
Si vous êtes en utilisant un Rapporteur d'angles avec le Jasmin, vous pouvez utiliser
toMatch
pour correspondre à une expression régulière...Notez également que
toContain
va correspondre les éléments de la liste, si vous avez besoin que.element
pour retourner un objet avec unhasClass
méthode, que vous pouvez 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 si il n'a pas la classe ou.toContain
pour vérifier si il existeLa plus simple est:
java.util.ArrayList cannot be cast to java.lang.String
sur Microsoft BordBasé sur la réponse de Sergey K, vous pouvez également ajouter une correspondance personnalisée pour ce faire:
(coffeescript)
Alors vous pouvez l'utiliser dans des tests de ce genre:
Et vous obtiendrez l'erreur suivante si elle n'est pas:
Avez-vous essayé...
ou une variation de la ci-dessus...
J'ai fait cette correspondance, j'ai eu l'envelopper dans une promesse et d'utilisation 2 renvoie
dans mon test, je peux maintenant faire stuf comme ceci:
cela fonctionne aussi quand un élément a plusieurs classes ou quand un élément n'a pas d'attribut de classe à tous.
Ici un Jasmin 1.3.x custom
toHaveClass
matcher avec la négation.not
support et attendre jusqu'à 5 secondes (ou ce que vous indiquez).Trouver une correspondance personnalisée pour être ajouté sur votre onPrepare bloc dans ce gist
Exemple d'utilisation:
C'est comment je le fais au moins, sans la nécessité d'utiliser la fonction d'attente. Cette fonction retourne true si la classe est à l'intérieur de l'élément, et false sinon. Cela utilise aussi les promesses de sorte que vous pouvez l'utiliser comme:
Edit: je viens de réaliser que cela est essentiellement la même que la réponse sommet
Une façon d'y parvenir serait d'utiliser xpath et l'utilisation
contains()
Exemple:
Vous pouvez utiliser le CSS analyseur de gérer cela en vérifiant si un élément avec la classe donnée existe: