测试咖啡馆关闭 window

Testcafe close window

我有这个简单的页面,可以打开一个新的 window。

<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();
});

尝试根据谓词查找 window 时,测试失败

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 代码打开的 window。

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

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

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);