创建用于在打字稿中获取文本的 cypress 自定义命令

我正在处理一个 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()什么也没发生,它只是坐在那里而不返回文本。


有人可以帮我解决这个问题吗?


斯蒂芬大帝
浏览 198回答 1
1回答

鸿蒙传说

cy 命令是异步的,所以你应该在then块中访问它的结果。从技术上讲,您可以从 cy 自定义命令返回字符串,但由于 api 一致性,不建议这样做。我会把它写成一个子自定义命令declare namespace Cypress {&nbsp; interface Chainable {&nbsp; &nbsp; getText(): Chainable<string>;&nbsp; }}&nbsp; Cypress.Commands.add('getText', { prevSubject: 'element' },&nbsp;&nbsp; &nbsp; ($element: JQuery<HTMLElement>) => {&nbsp; &nbsp; &nbsp; cy.wrap($element).scrollIntoView()&nbsp; &nbsp; &nbsp; return cy.wrap($element).invoke('text')&nbsp; &nbsp; }&nbsp; )如何使用cy.get('#emailAddress')&nbsp; &nbsp; &nbsp; .getText()&nbsp; &nbsp; &nbsp; .then(text => console.log('Email Address ', text))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript