3 回答
TA贡献1943条经验 获得超7个赞
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);
就我个人而言,我会放弃页面对象,而直接在测试中使用该命令。
TA贡献2021条经验 获得超8个赞
我建议下一个自定义命令:
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 code
cy.validateIfElementExistsInDomAsBoolean(fieldName)
.then(boolean => expect(boolean).to.be.true)
TA贡献1797条经验 获得超6个赞
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');
添加回答
举报