从 Cypress 页面对象返回布尔值

我想了解如何从 cypress 页面对象返回布尔值?


使用案例:


我正在尝试检查页面上是否存在某个元素。如果是,则返回一个布尔值。


代码:


class DataTable {

  constructor() {

     return this;

  }


  has(fieldName) {

    // HOW DO I RETURN A BOOLEAN HERE?

    return cy.get('.view-and-field-name').contains(fieldName)

  }

}

Mainpage.spec.js


const dataTable = new DataTable();

expect(dataTable.has(field.fieldName)).to.be.true;

我希望能对我做错的事情有一些见解。


谢谢你的时间。


摇曳的蔷薇
浏览 126回答 3
3回答

杨__羊羊

on expect()Mainpage 已经在内部执行过了cy.get('.view-and-field-name').contains(fieldName),所以是多余的。如果dataTable.has(field.fieldName)失败,测试将停止 - 它永远不会传递错误值。如果你想has(fieldName)传递一个布尔值,你需要切换到jquery里面,例如has(fieldName) {  const jquerySelector = `.view-and-field-name:contains(${fieldName})`;  return Cypress.$(jquerySelector);}但使用 Cypress 命令和使用要简单得多const dataTable = new DataTable();dataTable.has(field.fieldName);就我个人而言,我会放弃页面对象,而直接在测试中使用该命令。

宝慕林4294392

我建议下一个自定义命令:Cypress.Commands.add("validateIfElementExistsInDom", (selector) => {    cy.get('body')        .then($body => {            expect($body.find(selector).length > 0).to.be.true        })    })您可以在测试中使用它,例如:cy.validateIfElementExistsInDom(fieldName)    以及一般返回布尔函数示例:Cypress.Commands.add("validateIfElementExistsInDomAsBoolean", (selector) => {   return cy.get('body')        .then($body => {            return cy.wrap($body.find(selector).length > 0) //Cy wrap is needed so the function is chainable        })})//in test codecy.validateIfElementExistsInDomAsBoolean(fieldName)    .then(boolean => expect(boolean).to.be.true)

FFIVE

cy.get由于可重试策略,它不是同步函数,因此无法Boolean直接返回。如有必要,您可以将should的变体与回调一起使用。对于您的情况,更简单的变体exist是合适的(或者be.visible,可能更适合您的情况):class DataTable {  has(fieldName) {    return cy.get('.view-and-field-name').contains(fieldName);  }}const dataTable = new DataTable();dataTable.getField(field.fieldName).should('exist');
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript