首页 > 解决方案 > Cypress.io - 使用 JavaScript window.prompt 保存价值

问题描述

我是赛普拉斯的新手,我有一个问题。

我的应用程序,我有一个“保存按钮”。单击按钮时,会触发 JS window.prompt()。在提示中输入保存的名称(如“从 John 保存”)并单击“确定” - 在提示中。

我需要通过 Cypress.io 中的 E2E 测试来介绍这个用户故事。

问题是,当我单击“保存按钮”时,当显示提示时,cypress 在 Click() 事件中冻结。

it('Make a new save with JS prompt', () => {
   cy.get('#save-changes-button')
   .should('be.visible')
   .click() //here the prompt is displayed, cypress stop and wait for click() event finish
})

我可以寻求帮助吗?我没有在 Cypress.io Docs 或其他地方找到合适的解决方案。

标签: javascripttestingintegration-testinge2e-testingcypress

解决方案


好的,事实上,当前版本的 Cypress.io 不支持与window事件的交互。如何欺骗它的方法就是cy.stub()方法。

这是我的解决方案。场景:

  1. 单击 GUI 中的“保存按钮”。
  2. window.prompt()被打开。
  3. 将保存名称(如“由 Thomas 保存”)写入提示。
  4. 在提示中单击“确定”并保存该值。

赛普拉斯中的代码:

    it('Save the value inside Prompt', () => {
            cy.window().then(win => {
                cy.stub(win, 'prompt').returns('The value you write inside prompt')
                cy.get('#save-changes-in-gui-button').click();
                //... Saved value assert
            })
    })

赛普拉斯默认window.pompt()通过存根更改事件并模拟单击“确定”。这个解决方案现在对我有用。希望,它可以帮助别人:)


推荐阅读