赛普拉斯:子命令主题似乎不是元素
Cypress: child command subject seems not to be an element
我有一个 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 元素?
在调查 post 这个问题时,我想到了一个简单的解决方案。 subject
是一个具有 selector
的对象,因此您可以将该选择器与 cy.get(subject.selector)
一起使用以获得 Dom 元素:
Cypress.Commands.add('fillInput', {prevSubject: 'element'}, (subject, value) => {
cy.get(subject.selector).clear().type(value);
});
我认为这不是很清楚,更多人可能有这个问题,所以我把我的解决方案放在这里。
尝试使用
cy.wrap(subject)
对我来说这就是诀窍。
我有一个 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 元素?
在调查 post 这个问题时,我想到了一个简单的解决方案。 subject
是一个具有 selector
的对象,因此您可以将该选择器与 cy.get(subject.selector)
一起使用以获得 Dom 元素:
Cypress.Commands.add('fillInput', {prevSubject: 'element'}, (subject, value) => {
cy.get(subject.selector).clear().type(value);
});
我认为这不是很清楚,更多人可能有这个问题,所以我把我的解决方案放在这里。
尝试使用
cy.wrap(subject)
对我来说这就是诀窍。