点击下载链接并应用.wait(120000)会引发错误

时间:2019-03-08 13:37:31

标签: testing automated-tests e2e-testing web-testing testcafe

我正在创建一个测试,它将转到特定页面,然后单击,然后单击按钮以下载excel文件。

在开始下载之前,文件存放在很远的位置,通常需要1.5分钟才能从主机服务器上收集文件,完全下载只需要2-3秒。

从我单击提交按钮到下载开始之间的时间间隔为1.5分钟(如前所述)。

为了安全起见,我尝试应用.wait(120000)-2分钟。

测试给出错误(请参见下面的图像)。

Screenshot of the error

这是我的测试代码。

test('R03', async t => {
await t  
    .click(Selector('[data-bind^="css:{ \\\'dx-state-disabled\\\'].find('div').withText('Year_1'))
    .click(Selector('[data-bind^="css:{ \\\'dx-state-disabled\\\'].find('div').withText('Location_1'))
    .click(Selector('span').withText('SUBMIT'))
    .wait(120000); // in ms
});

调试测试显示以下错误:

 × R03

   1) Failed to complete a request to

   "http://example.com/Reports/ViewerPartial/DXXRDV.axd?actionKey=exportTo&arg=%7B%22documentId%22%3A%227c93875b0e0247e391d50759c00ef3a7%22%2C%22exportOptions%22%3A%22%7B%5C%22Html%5C%22%3A%7B%5C%22%40EmbedImagesInHTML%5C%22%3A%5C%22true%5C%22%7D%7D%22%2C%22format%22%3A%22xlsx%22%7D"
      within the timeout period. The problem may be related to local 
      machine's network or firewall settings, server outage, or network 
      problems that make the server inaccessible.

由于公司原因,我已将域名隐藏为example.com。
如果删除了.wait(120000),则测试完成并且显示成功。 任何建议,将不胜感激。试图摆脱困境(testcafe)

1 个答案:

答案 0 :(得分:1)

作为解决方法,您可以使用for循环等待文件到达下载文件夹:

import { join } from 'path';
import { existsSync } from 'fs';
import {t} from 'testcafe';

test("My Test", async (t) => {
    await t  
    .click(Selector('[data-bind^="css:{ \\\'dx-state- disabled\\\'].find('div').withText('Year_1'))
    .click(Selector('[data-bind^="css:{ \\\'dx-state-disabled\\\'].find('div').withText('Location_1'))
    .click(Selector('span').withText('SUBMIT'));

   await waitUntilFileIsDownloaded();
});

async function waitUntilFileIsDownloaded(){
    const downloadsFolder= `${process.env.HOME}/Downloads`;
    const expectedFile = join(downloadsFolder, 'data.csv');
    console.log(`waiting for file '${expectedFile}' ...`);
    for (let index = 0; index < 120; index++) {
        if (existsSync(expectedFile)) {
            console.log(`file downloaded after ${index} seconds`);
            return;
        }
        await t.wait(1000);
        console.log(`waiting for '${index}' seconds`);
    }
    console.log('File has not been downloaded in due time');
}