javascript - 创建用于在 typescript 中获取文本的 Cypress 自定义命令

标签 javascript typescript ui-automation cypress

我正在开发一个 Cypress 项目,我正在尝试创建一个自定义命令 它解析 promise 并在传递的定位器上返回文本。

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() 时什么也没有发生,它只是坐在那里而不返回文本。

谁能帮我解决这个问题。

最佳答案

cy 命令是异步的,因此您应该在 then block 中访问它的结果。从技术上讲,您可以从 cy 自定义命令返回一个字符串,但由于 api 一致性,不推荐这样做。

我会写成 a child custom command

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))

关于javascript - 创建用于在 typescript 中获取文本的 Cypress 自定义命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58650317/

相关文章:

javascript - CKEDITOR - 在行文本编辑器中禁用

javascript - 异步函数是 JavaScript 中函数的子集吗?

javascript - Typescript - 导入带有路径别名的类失败

html - 如何在 Angular 5 中防止 html 注入(inject)

android - 在@Before 中清除应用程序数据后测试用例失败

javascript - 如何根据单独的回调而不是用户输入更新 knockout View 模型

javascript - 替换 youtube iframe src 会破坏自动播放

javascript - Typescript 类型转换现有变量

testing - Ranorex 8.3.0,当尝试创建新记录时,它不显示选择网络、桌面或移动应用程序的选项

automated-tests - 如何在远程 headless ESXi 虚拟机上运行自动化 GUI 测试?