我需要一个e2e测试工具,在我尝试过的那些工具中,我认为Cypress.io似乎是最好的。
我不明白的是为什么他们在这样的should()子句中使用字符串选择器(我需要我们的测试人员尽可能地轻松,并且我不认为容易出错的字符串是解决方法) :
cy.get('.trigger-input-range')
.invoke('val', 25)
.trigger('change')
.get('input[type=range]').siblings('p')
.should('have.text', '25')
我已经能够成功使用以下内容:
cy.get('.trigger-input-range')
.invoke('val', 25)
.trigger('change')
.get('input[type=range]').siblings('p')
.should((e) => {
expect(e).to.have.text('25')
});
这至少为我提供了一些安全性,因为IDE提供了诸如“ have.text”,“ have.value”之类的选项(我计划将Typescript用于这些测试,因此欢迎任何可能有所帮助的建议。这是否有一些建议?如果没有,我不会使用这些字符串选择器来理解它们。
还有其他选择吗? 我可以以某种方式修改赛普拉斯以使其具有类似功能吗?
cy.get('.trigger-input-range')
.invoke('val', 25)
.trigger('change')
.get('input[type=range]').siblings('p')
.shouldHaveText('25')
.shouldHaveValue('25');
答案 0 :(得分:2)
.should('have.text', '25');
与此类似:
.should(elem => {
expect(elem).to.have.text('25');
});
它们只是做同一件事的两种方式。较短的是使用Chai assertion的内联方式,而较长的使用custom command,但会产生相同的结果。
如果要使用.shouldHaveText('25')
之类的命令,应该可以通过创建自己的_.first is a alias of _.head来获得它:
Cypress.Commands.add('shouldHaveText', {
prevSubject: true
}, (subject, expectedText) => {
// Wrap the subject and use .should() to take advantage of automatic retries
cy.wrap(subject).should((elem) => {
expect(elem).to.have.text(expectedText);
});
});
用法:
cy.get('.someClass').shouldHaveText('25');