[英]How to Skip a Test if an element is not present in Cypress
我正在編寫一個測試,如果我登陸一個頁面並且有任何記錄可用,我需要單擊記錄附近的三個點按鈕。 但是如果頁面上沒有可用的記錄,我應該跳過測試。
cy.get('body')
.then(($body) => {
if ($body.find('.ant-empty-description').length) {
cy.log('Element not found. Skip the Test')
}
else {
cy.xpath("//tbody[@class='ant-table-tbody']//tr[" + rowNumber + "]//td[4]//button//em").click()
}
})
我正在使用一種方法,如果出現“未找到記錄”消息,我需要跳過測試,否則單擊記錄附近的按鈕。
有時需要有條件地進行測試,但使用<body>
作為基本元素是一個錯誤 IMO。
<body>
始終在頁面上,但如果從 API 獲取表數據,則可能不會。
測試總是比 API 運行得快,總是看到空行占位符。
使用模式
添加一個intercept()
並等待 API 響應。
使用表格行作為條件檢查的基本元素 - 總會有至少一行(但它可能是“無記錄”行)。
cy.intercept(...).as('tableData')
...
cy.wait('@tableData')
cy.get('tbody tr').then($rows => { // may be only one "No record" row
const noData = $rows.text().includes('No Record found')
if (!noData) {
$rows.eq(rowNumber).find('td').eq(4]).find('button').click()
}
})
您可以使用mocha 的.skip()
功能。 請注意,您必須使用function()
而不是箭頭函數。
it('test', function() {
cy.get('body')
.then(function($body) {
if ($body.find('.ant-empty-description').length) {
cy.log('Element not found. Skip the Test')
this.skip()
} else {
cy.xpath("//tbody[@class='ant-table-tbody']//tr[" + rowNumber + "]//td[4]//button//em").click()
}
})
})
話雖如此,我同意@jjhelguero - 以這種方式使用跳過是測試的反模式。 理想情況下,您應該控制一個元素是否會出現在網頁上,並使用您的測試設置來操作頁面以使其具有/不具有該元素。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.