typescript Testcafe中的时区测试

ylamdve6  于 2023-03-31  发布在  TypeScript
关注(0)|答案(1)|浏览(163)

我有一个简单的问题。基本上,我希望能够在不使用任何外部库或包的情况下,在JavaScript中针对不同时区在Web应用程序上运行testcafe测试用例。动态更改浏览器时区的最佳方法是什么?例如,我可以测试datepickers?
我尝试了一些方法,使用下面的代码:

function changeTimezone(date, ianatz) {

var invdate = new Date(date.toLocaleString('en-US', {
timeZone: ianatz
}));

var diff = date.getTime() - invdate.getTime();

const tmz = new Date(date.getTime() - diff);
Date = function(){return tmz;}
return tmz;
}

const setTimeZones = () => {
 const myDate = new Date();
 var newDate = changeTimezone(myDate, "Pacific/Fiji");
};

当我运行上一个例子时,在选择日期选择器时,它不会在浏览器中更改日期。我已经尝试了几种方法,但都不起作用。我想提一下,我不想在我的机器上更改日期,而是模拟传感器,就像我们在开发工具中的行为一样。这是可能的吗?

nukf8bse

nukf8bse1#

TestCafe没有API来更改浏览器时区。但是,如果你想像在DevTools中一样模拟时区,你可以使用一个解决方案。测试代码:

fixture `f`
    .beforeEach(async t => {
        const browserConnection = t.testRun.browserConnection;
        const providerPlugin    = browserConnection.provider.plugin;
        const browserClient     = providerPlugin._getBrowserProtocolClient(providerPlugin.openedBrowsers[browserConnection.id]);
        const cdpClient         = await browserClient.getActiveClient();

        await cdpClient.Emulation.setTimezoneOverride({ timezoneId: 'Pacific/Fiji' });
    });
 
test('Check', async t => {
    await t.navigateTo('http://127.0.0.1:8081');

    await t.debug();
});

html页面:

<body>
    <div id="target"></div>
    <script>
        const div = document.querySelector('#target');

        div.innerHTML = (new Date()).toString();
    </script>
</body>

请注意,解决方法使用内部API,将来可能会更改,因此应谨慎使用。

相关问题