赛普拉斯:子命令主题似乎不是要素

时间:2018-12-21 10:05:42

标签: javascript e2e-testing cypress

我有一个fillInput()函数,它使用一个选择器和一个值作为参数,然后:

  • 通过cy.get(selector).clear()

  • 清除输入
  • 然后通过cy.get(selector).type(value)

  • 填充输入值

据我所知,这实际上是某种反模式,a cypress command应该是解决之道。

因此,reading about child commands,我得出了该命令,该命令应该与我的fillInput()实用程序功能相同:

Cypress.Commands.add('fillInput', {prevSubject: 'element'}, (subject, value) => {
  subject.clear();
  subject.type(value);
});

但是,当我通过以下方式在规范中尝试此操作时:

cy.get('#my-selector').fillInput('my-value');

我在cypress浏览器控制台中收到此错误:

TypeError: subject.clear is not a function

在文档中,据说cy.get()会产生DOM元素,而{prevSubject: 'element'}应该使subject成为同一类型(据我所知)。

但是,subject似乎是一种不同的类型,并且处理type()或'clear()or ' should()之类的元素的方法不适用于子命令主题。

如何获得子命令的subject作为Dom元素?

2 个答案:

答案 0 :(得分:1)

在调查发布问题时,我想出了一个简单的解决方案。 subject是一个具有selector的对象,因此您可以将该选择器与cy.get()一起使用以获取Dom元素:

Cypress.Commands.add('fillInput', {prevSubject: 'element'}, (subject, value) => {
  const element = cy.get(subject.selector);
  element.clear();
  element.type(value);
});

我认为这还不是很清楚,可能会有更多的人遇到这个问题,所以我将解决方案留在这里。

答案 1 :(得分:0)

尝试使用

cy.wrap(subject)

对我来说这就是诀窍。