乐闻世界logo
搜索文章和话题

Cypress 如何关闭新窗口并返回主测试窗口

4 个月前提问
3 个月前修改
浏览次数27

1个答案

1

在Cypress中,原生地支持对同一窗口内的单页应用(SPA)进行操作和测试。但是,Cypress不支持直接打开新的浏览器窗口或标签页,也不支持在不同窗口间进行切换。这是因为Cypress设计之初就是为了避免多窗口之间的复杂性,保持测试的简单和控制性。

不过,如果你的应用在测试期间会打开新的窗口,有一种方法可以通过Cypress间接地处理这种情况:

  1. 拦截窗口打开的行为: 由于Cypress可以拦截和控制浏览器的行为,我们可以通过修改 window.open 函数来改变页面打开新窗口的默认行为。通常,当页面尝试打开新窗口时,我们可以将其重定向到同一个窗口内的一个新的URL。

    例如,如果有一个按钮点击后会打开新窗口,我们可以在测试脚本中这样写:

    javascript
    cy.window().then((win) => { cy.stub(win, 'open').callsFake((url) => { win.location.href = url; }); });

    这段代码会拦截任何尝试通过 window.open 打开新窗口的行为,并将当前窗口的 location.href 修改为新窗口应该打开的URL。

  2. 测试新打开的页面: 一旦将新窗口的URL重定向到当前窗口,Cypress就可以继续在同一个窗口中测试新页面的元素和行为。

  3. 返回主测试窗口: 如果需要返回到主页面,可以简单地通过Cypress的导航命令返回:

    javascript
    cy.go('back'); // 返回上一个页面,类似浏览器的后退按钮

    或者如果你知道主页面的URL,也可以直接设置:

    javascript
    cy.visit('主页面的URL');

通过这种方式,Cypress可以维持在单一窗口的环境下进行测试,同时也能间接地处理多窗口的情况。这样做的好处是保持了测试的一致性和控制性,避免了多窗口带来的复杂性和不确定性。

2024年6月29日 12:07 回复

你的答案