我有一个应用程序,其中反馈出现在一个页面随机;比如,在加载了近3000毫秒后,弹出窗口可能会出现,也可能不会出现。如何处理这个弹出在柏树。
我试过下面的代码:
cy.get("div.QSIFeedbackButton").then(($body)=> {
if($body.find('.QSIWebResponsiveDialog-Layout1-SI_0rEzRx2V9yqm1Yq_close-btn > img')){
cy.get('.QSIWebResponsiveDialog-Layout1-SI_0rEzRx2V9yqm1Yq_content').contains('Help us improve our portal!')
cy.get('.QSIWebResponsiveDialog-Layout1-SI_0rEzRx2V9yqm1Yq_close-btn > img').click()
}
else {
cy.log('feed back pop up not found')
}
})
但是这个总是在IF块中失败,当弹出框不出现时。我想优雅地运行测试,这样即使弹出窗口没有出现,测试也不应该失败。它应该去else块。我怎样在考试中做到这一点呢?
你可以使用'MutationObserver',这是一个事件监听器,当一个节点被添加或从DOM中删除时触发。然后你可以检查是否显示模态(或者直接关闭模态按钮):
cy.document().then((document) => {
new MutationObserver(function () {
const closeModelBtn = Cypress.$('button');
if (closeModelBtn.length) {
closeModelBtn.trigger('click');
}
}).observe(document.body, { childList: true, subtree: true });
});
注意:这是异步的,独立于cypress(你的cypress代码不会等待这个执行,所以你可能会面临一些与此同时发生的动作的问题)。
如果一段时间后弹出窗口消失,使用:
cy。Get ('random popup id').should('not.exist')
工作得很好,因为它检查该弹出窗口是否存在于DOM树中,如果您可以在弹出窗口
中添加test则更好。