我正在处理一个 cypress 项目,我正在尝试创建一个自定义命令,该命令解析承诺并在传递的定位器上返回文本。export default class QuickRegisterPage { emailAddressText() { return cy.get('#emailAddress'); }public createNewUser() { cy.getQuickRegisterUrl().then(url => { cy.visit(url); text = cy.getText(this.emailAddressText()); cy.log(text); });}Cypress.Commands.add( 'getText', (element: Cypress.Chainable<JQuery<HTMLElement>>) => { element.scrollIntoView(); element.then(ele => { const text = ele.text(); return text; }); });declare namespace Cypress { interface Chainable<Subject = any> { getText(element: Cypress.Chainable<JQuery<HTMLElement>>): string; }}当我打电话时cy.getText()什么也没发生,它只是坐在那里而不返回文本。有人可以帮我解决这个问题吗?
1 回答
鸿蒙传说
TA贡献1865条经验 获得超7个赞
cy 命令是异步的,所以你应该在then块中访问它的结果。从技术上讲,您可以从 cy 自定义命令返回字符串,但由于 api 一致性,不建议这样做。
我会把它写成一个子自定义命令
declare namespace Cypress {
interface Chainable {
getText(): Chainable<string>;
}
}
Cypress.Commands.add('getText', { prevSubject: 'element' },
($element: JQuery<HTMLElement>) => {
cy.wrap($element).scrollIntoView()
return cy.wrap($element).invoke('text')
}
)
如何使用
cy.get('#emailAddress')
.getText()
.then(text => console.log('Email Address ', text))
添加回答
举报
0/150
提交
取消