Javascript 柏树:打开窗户

Javascript 柏树:打开窗户,javascript,testing,window.open,stub,cypress,Javascript,Testing,Window.open,Stub,Cypress,在我的应用程序中,有一个建议列表,单击该列表将打开一个新窗口,其中包含一个动态地址: $window.open(_shopURL, '_blank'); 现在我正在尝试存根windows.open事件,如中所示 但它总是打开新选项卡,而日志是错误的: 有人知道为什么它不起作用吗? 干杯 我正在为每个要测试的页面使用页面对象。因此,在我的父页面对象中,当打开url时,我会执行以下操作,该对象由其他PO继承: public-navigateTo(url:string,defaultTimeou

在我的应用程序中,有一个建议列表,单击该列表将打开一个新窗口,其中包含一个动态地址:

$window.open(_shopURL, '_blank');
现在我正在尝试存根windows.open事件,如中所示

但它总是打开新选项卡,而日志是错误的:

有人知道为什么它不起作用吗?
干杯

我正在为每个要测试的页面使用页面对象。因此,在我的父页面对象中,当打开url时,我会执行以下操作,该对象由其他PO继承:

public-navigateTo(url:string,defaultTimeout:number=5000){
返回cy.visit(url{
onBeforeLoad:(赢:任何)=>{
cy.stub(win,“open”);
},
超时:默认超时
});

}
下面的代码将帮助您打开存根窗口,并进一步声明已触发该功能:

it('opens the about page', () => {
  cy.visit('/')
  cy.window().then(win => {
    cy.stub(win, 'open').as('Open')
  })
  cy.get('.your-selector').click()
  cy.get('@Open').should('have.been.calledOnceWithExactly', yourUrl)
})
您还可以存根窗口。在cy.on钩子中打开,这有助于您在每次重新加载页面后生成新的窗口对象。但是,如果您想在现有选项卡而不是新选项卡中实际打开新Url,可以通过传递“\u self”参数来使用下面的代码覆盖旧的“\u blank”

cy.window().then(win => {
          cy.stub(win, 'open').callsFake((url) => {
            return win.open.wrappedMethod.call(win, url, '_self');
          }).as('Open');
        });

callsFake函数动态提取已放置在原始窗口中的url。打开(url,“\u blank”),或者您可以在中手动更改url。调用(win,url,“\u self”)使用static one,因此无论您单击哪个链接或按钮,哪个触发window.open,它们都将打开相同的url。

您好,我正在尝试做完全相同的事情,但迄今为止没有成功。你找到解决这个问题的办法了吗?
cy.window().then(win => {
          cy.stub(win, 'open').callsFake((url) => {
            return win.open.wrappedMethod.call(win, url, '_self');
          }).as('Open');
        });