赛普拉斯-使contains()以不区分大小写的方式工作的方法

时间:2018-11-16 15:48:07

标签: cypress

我有一个项目无法充分利用HTML的水平,并且HTML中的值的大小写不一致。

如果仅使用小写字符串作为contains()函数的参数,有什么方法可以迫使赛普拉斯匹配文本?

6 个答案:

答案 0 :(得分:8)

4.0.0起,赛普拉斯提供contains的{​​{3}}选项...

cy.get('div').contains('capital sentence', { matchCase: false })

答案 1 :(得分:2)

赛普拉斯包含的方法已经具有这种功能。您可以仅将matchCase作为options参数传递,并且cypress将处理区分大小写/不敏感的条件。下面的代码段将为您提供帮助。 如果您喜欢答案,请喜欢答案并放弃投票。

it('this will pass', () => {
    cy.visit('https://example.cypress.io');
    cy.contains('commands drive your tests', {matchCase: false})
  });

  it('this will fail', () => {
    cy.visit('https://example.cypress.io');
    cy.contains('commands drive your tests', {matchCase: true})
  })

答案 2 :(得分:0)

您可以使用正则表达式。

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

答案 3 :(得分:0)

您可以将一个不区分大小写的正则表达式添加到contains命令,尽管使用正则表达式时您需要注意转义任何特殊的正则表达式字符,
看到这个Escape string for use in 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);

答案 4 :(得分:0)

赛普拉斯包含lodash。因此,这是我当前对不区分大小写的文本匹配的解决方法,直到Cypress includes this feature for 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');
});

答案 5 :(得分:0)

contains()可以采用正则表达式,您可以使用i标志指定不区分大小写的匹配项:

其他答案已经提到了这一点,但这可能是使用它的最简单方法:

cy.get('.some-selector').contains(/match cAse-InSENsitiVE/i);