我有一个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元素?
答案 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)
对我来说这就是诀窍。