为什么Cypress.io使用字符串断言类型选择器,有哪些替代方法?

为什么Cypress.io使用字符串断言类型选择器,有哪些替代方法?,cypress,Cypress,我需要一个e2e测试工具,在我尝试过的工具中,我认为Cypress.io似乎是最好的 我不明白的是,为什么他们在should()子句中使用字符串选择器(我需要我们的测试人员尽可能地轻松,我不认为容易出错的字符串是一种方式): 我成功地使用了这样的东西: cy.get('.trigger-input-range') .invoke('val', 25) .trigger('change') .get('input[type=range]').siblings('p') .shoul

我需要一个e2e测试工具,在我尝试过的工具中,我认为Cypress.io似乎是最好的

我不明白的是,为什么他们在should()子句中使用字符串选择器(我需要我们的测试人员尽可能地轻松,我不认为容易出错的字符串是一种方式):

我成功地使用了这样的东西:

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');
.should('have.text','25');
与此类似:

.should(元素=>{
expect(elem).to.have.text('25');
});
它们只是做同一件事的两种方法。较短的方法是使用较长方法的内联方法,但会产生相同的结果

如果您需要类似于
.shouldHaveText('25')
的命令,您应该能够通过创建自己的:

Cypress.Commands.add('shouldHaveText'{
主题:对
},(主题,预期文本)=>{
//包装主题并使用.should()以利用自动重试
cy.wrap(主题)。应((元素)=>{
expect(elem).to.have.text(expectedText);
});
});
用法:

cy.get('.someClass').shouldHaveText('25');

这是一个有趣的问题,我自己也经常想知道。但是我还是比较喜欢CyPress。很有趣。你的新命令会有智能吗?也许添加TypSercPT会有帮助。我只记得所有的魔法字符串。但是我会考虑你的答案…我不知道。我怀疑像VS代码之类的东西需要一个EX。这是我的荣幸。
cy.get('.trigger-input-range')
  .invoke('val', 25)
  .trigger('change')
  .get('input[type=range]').siblings('p')
  .shouldHaveText('25')
  .shouldHaveValue('25');