我有一个项目无法充分利用HTML的水平,并且HTML中的值的大小写不一致。
如果仅使用小写字符串作为contains()函数的参数,有什么方法可以迫使赛普拉斯匹配文本?
答案 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);