Testcafe 关闭窗口

Posted

技术标签:

【中文标题】Testcafe 关闭窗口【英文标题】:Testcafe close window 【发布时间】:2022-01-13 20:01:47 【问题描述】:

我有一个可以打开新窗口的简单页面。

<html>
    <body>
        <button id="open">Open window</button>
    </body>

    <script>
        var windowObjectReference;

        function openRequestedPopup() 
        windowObjectReference = window.open("http://www.cnn.com/", "CNN");
        
        document.querySelector("#open").addEventListener("click", openRequestedPopup);
    </script>
</html>

我也有这个测试:

import Selector from 'testcafe';

fixture `Close window`
    .page('http://127.0.0.1:8080/');

test('Close window', async t => 
    await t.click("#open");
    await t.switchToWindow(f => f.url.host==="www.cnn.com").closeWindow();
);

当尝试根据谓词查找窗口时,测试失败

PS C:\work\New folder> testcafe edge .\test.js
 Running tests in:
 - Microsoft Edge 96.0.1054.43 / Windows 10

 Example page
 × Close the current window

   1) Cannot find the window specified in the action parameters.

      Browser: Microsoft Edge 96.0.1054.43 / Windows 10



 1/1 failed (5s)

我不明白我应该怎么做才能获得从 js 代码打开的窗口。

如何获取窗口并检查其中的一些元素?

【问题讨论】:

【参考方案1】:

我们已修复与“多个浏览器窗口”模式相关的问题。请安装当前的 alpha 版本 (npm i testcafe@alpha / npm i testcafe@1.17.2-alpha.2)。此外,您需要修复谓词的 host 值。这个 CNN 页面的实际主机名是 edition.cnn.com(您可以通过在浏览器控制台中观察 window.location.hostname 属性来查看不使用 TestCafe 的主机名):

await t.switchToWindow(f => f.url.host === 'edition.cnn.com').closeWindow();

或者,您可以使用t.getCurrentWindow 代替谓词:

await t.click("#open");

const cnnWindow = await t.getCurrentWindow();

await t.closeWindow(cnnWindow);

【讨论】:

以上是关于Testcafe 关闭窗口的主要内容,如果未能解决你的问题,请参考以下文章

在mfc中 为啥关闭子窗口连带把主窗口关闭了??

关闭窗口的四种操作方法 关闭窗口的四种操作方法介绍

Java登录窗口关闭 打开新窗口

c# 通过窗口名字关闭窗口

ubuntu怎么关闭窗口

WINFORM如何关闭主窗口?