在Cypress中关闭角度材料对话框

Tie*_*udt 5 angular cypress

我正在使用Angular Material将Cypress添加到我的Angular 6项目中。材质对话框(包含iFrame)欢迎新用户,并通过在对话框外部单击来关闭对话框。

我试图以多种方式在赛普拉斯中关闭此对话框,并引入了等待和超时,以确保它与网络加载问题无关:

cy.get('dialog-element', { timeout: 10000})
.wait(3000).click(-50, -50);
Run Code Online (Sandbox Code Playgroud)

失败是因为它被cdk-overlay-container覆盖。使用click(...,{force:true})没有帮助。试过了

cy.get('.cdk-overlay-container', { timeout: 10000})
.wait(3000).click(-50, -50, { force: true });
Run Code Online (Sandbox Code Playgroud)

这也没有帮助。对话框不会关闭,连续单击不会起作用,即,尝试进行例如以下操作时,它始终会失败

cy.get('[data-cy=element-on-page-beneath-dialog]').click();
Run Code Online (Sandbox Code Playgroud)

进行调试时,我可以在对话框外部看到点击的红点,因此鼠标的位置不是问题。

编辑:根据要求,材质对话框HTML(注意宽度和高度足够小,因此对话框不会填满页面,但周围留有足够的空间,并且src具有真实的Youtube视频链接)

<div style="overflow: hidden;">
    <iframe style="margin-top: 2px; overflow: hidden;" [width]="videoWidth" [height]="videoHeight" src="..." frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>
<div>
Run Code Online (Sandbox Code Playgroud)

Ric*_*sen 13

它可能只是选择器。以下测试似乎工作正常,使用选择器 of.cdk-overlay-backdrop而不是.cdk-overlay-container

describe('closing-an-angular-material-dialog-in-cypress', () => {

  it('closes the dialog', () => {
    cy.visit('https://material.angular.io/components/dialog/overview')
    cy.contains('button', 'Pick one').click()
    cy.get('.cdk-overlay-backdrop').click(-50, -50, { force: true });
  })

})
Run Code Online (Sandbox Code Playgroud)