javascript - 如何等待我的自定义命令完成,然后执行剩余的赛普拉斯命令
问题描述
我遇到了赛普拉斯异步机制的问题。我有一个放置在此文件中的自定义命令
class HeaderPage {
shopLink = 'a[href="/angularpractice/shop"]'
homeLink = ''
navigateToShopPage() {
cy.get(this.shopLink).click()
}
sshToServer() {
setTimeout(() => {
console.log('Connecting')
}, 5000)
console.log('Connected')
}
}
export default HeaderPage
函数 sshToServer 模拟暂停 5000ms。所以我希望赛普拉斯剩余的测试将被保持并等待这个功能完成。我怎样才能做到这一点?提前致谢。
import HeaderPage from "../support/pageObjects/HeaderPage"
describe('Vefiry Alert and Confirm box', () => {
const headerPage = new HeaderPage()
it('Access home page', () => {
cy.visit(Cypress.env('url') + 'AutomationPractice/')
});
it('SSH to server', () => {
headerPage.sshToServer()
});
it('Verify content of Alert', () => {
cy.get('#alertbtn').click()
cy.on('window:alert', (alert) => {
expect(alert).to.equal('Hello , share this practice page and share your knowledge')
})
});
解决方案
您可以发出cy.wrap
带有值的新命令并null
在函数中调用异步.then
函数。赛普拉斯将自动解决该异步功能,然后继续进行下一个测试。
首先,您应该将您的sshToServer
方法转换为 async(promise) 函数:
sshToServer() {
console.log('Connecting');
return new Promise((resolve) => {
setTimeout(() => {
console.log('Connected');
resolve();
}, 5000);
});
}
然后,在您的规范中:
it('SSH to server', { defaultCommandTimeout: 5000 }, () => {
cy.wrap(null).then(() => headerPage.sshToServer());
});
请注意,我还为规范使用了更大的defaultCommandTimeout
超时时间,因为默认超时时间为 4 秒,这比您的sshToServer
方法短,如果不使用更大的超时时间,将导致测试失败。
推荐阅读
- mysql - 错误 1055,SELECT 列表的表达式 #1 不在 GROUP BY 子句中
- javascript - javascript | 单击提交按钮后如何显示成功消息
- sql - 仅使用 SELECT、FROM 和 WHERE 命令从多个表中进行选择?
- django - 引发异常并返回响应
- c# - 有没有办法将字段设置为“StoreGeneratedPattern=Computed”的值
- mysql - How can I output a column twice and with different values based on another table's reference?
- python-3.x - 如何在 Python 中编辑文件的一行?
- r - 如何在R中四舍五入到下一个一百
- multithreading - 如何返回包含在单独线程中计算的值的未来?
- c# - UpdateMessageAsync 不更新可见性超时