3 回答
TA贡献1854条经验 获得超8个赞
柏树包裹柴断言,所以从如何做一个“或”在柴应该.should()
以下 html 片段
<div id="1" class="class1"></div>
<div id="2" class="class2"></div>
<div id="3" class="class1 class2"></div>
<div id="4" class="class3"></div>
可以像这样测试
it('finds either class1 or class2', () => {
cy.get('div#1')
.should('satisfy', ($el) => {
const classList = Array.from($el[0].classList);
return classList.includes('class1') || classList.includes('class2') // passes
})
cy.get('div#2')
.should('satisfy', ($el) => {
const classList = Array.from($el[0].classList);
return classList.includes('class1') || classList.includes('class2') // passes
}) // passes
cy.get('div#3')
.should('satisfy', ($el) => {
const classList = Array.from($el[0].classList);
return classList.includes('class1') || classList.includes('class2') // passes
})
cy.get('div#4')
.should('satisfy', ($el) => {
const classList = Array.from($el[0].classList);
return classList.includes('class1') || classList.includes('class2') // fails
})
})
笔记
函数的参数是一个jquery对象,因此用于引用元素$el[0]
$el[0].classList返回一个类似数组的 DomTokenList,因此请使用将 Array 方法应用于它。Array.from().includes()
您还可以通过提取函数使事情变得更加通用,
it('finds either class1 or class2', () => {
const hasAtLeastOneClass = (expectedClasses) => {
return ($el) => {
const classList = Array.from($el[0].classList);
return expectedClasses.some(expectedClass => classList.includes(expectedClass));
}
}
cy.get('div#1').should('satisfy', hasAtLeastOneClass(['class1', 'class2'])); //passes
cy.get('div#2').should('satisfy', hasAtLeastOneClass(['class1', 'class2'])); //passes
cy.get('div#3').should('satisfy', hasAtLeastOneClass(['class1', 'class2'])); //passes
cy.get('div#4').should('satisfy', hasAtLeastOneClass(['class1', 'class2'])); //fails
})
TA贡献1893条经验 获得超10个赞
Cypress应该提供和方法,它采用以前的主题(定位器),您可以应用尽可能多的条件和方法。
cy.get('locator')
.should('have.class', 'validClassname')
.and('not.have.class', 'invalidClassname');
我希望这将解决您的问题...投票这个答案以吸引更多人。
添加回答
举报