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');
添加回答
舉報