J'ai un projet qui ne capitalise pas sur le niveau de HTML et les valeurs en HTML ont une capitalisation incohérente.
Existe-t-il un moyen de forcer Cypress à faire correspondre le texte si j'utilise uniquement des chaînes minuscules comme arguments de la fonction contains ()?
contains()
peut prendre une expression régulière, pour laquelle vous pouvez spécifier une correspondance insensible à la casse avec l'indicateur i
:
D'autres réponses le mentionnent déjà, mais cela pourrait être le moyen le plus simple de l'utiliser:
cy.get('.some-selector').contains(/match cAse-InSENsitiVE/i);
Vous pouvez ajouter une expression régulière insensible à la casse à la commande contains, bien qu'en utilisant l'expression régulière, vous devez faire attention à échapper tous les caractères spéciaux d'expression régulière,
voir ceci Chaîne d'échappement pour une utilisation dans Javascript regex
const escapeRegExp = (string) => {
return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
}
const expected = 'mYtEXTtO*tEST?';
const regex = new RegExp(escapeRegExp(expected), 'i');
cy.contains(regex);
cy.contains('MySelector', regex);
Vous pouvez utiliser une expression régulière.
cy.get("#whatever").its("something").should("match", "[your regex here]")
Cypress a lodash inclus. C'est donc ma solution de contournement actuelle pour la correspondance de texte non sensible à la casse, jusqu'à ce que Cypress inclut cette fonctionnalité pour cy.contains ()
cy.get('p.heading').then( $headings => {
let texts = $headings.map( (_, el) => (Cypress._.toUpper(el.textContent)));
expect(texts.get()).to.include('INCONSISTENT CAPITALIZED TITLE 1');
//If you have more to match
expect(texts.get()).to.include('INCONSISTENT CAPITALIZED TITLE 2');
});