javascript 如何在cypress中处理随机弹出窗口?[副本]

fhity93d  于 2023-10-14  发布在  Java
关注(0)|答案(2)|浏览(117)

这个问题已经有答案了

Dialog that may or may not appear on page start(1个答案)
7个月前关闭。
我有一个应用程序,反馈弹出随机出现在一个页面;像弹出可能会或可能不会来在页面加载后,它为近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块。我如何在测试中做到这一点?

fcg9iug3

fcg9iug31#

您可以使用'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代码不会等待它执行,所以你可能会遇到一些与此同时发生的动作的问题)。

3hvapo4f

3hvapo4f2#

如果弹出窗口在一段时间后消失,请使用以下命令:
cy.get('random popup id').should('not. exist')
效果很好,因为它检查弹出窗口是否存在于DOM树中,如果您可以将testid添加到弹出窗口中,效果会更好

相关问题