web-dev-qa-db-fra.com

Cypress - façon de faire que contient () fonctionne de manière insensible à la casse

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 ()?

10
Jar

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);
1
mfit

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);
1

Vous pouvez utiliser une expression régulière.

cy.get("#whatever").its("something").should("match", "[your regex here]")

0
Brendan

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');
});
0
wicky