簡體   English   中英

文件下載超時

[英]Timeout while file download

在我的 Fixture 中,我有一個操作將開始使用瀏覽器下載文件。 在服務器直接響應之前,這工作得很好。

.expect(fs.existsSync(downloadsFolder()+'/export.xml')).ok()

但是現在我有一些服務器需要創建的文件,所以會出現等待時間。 我嘗試擴展 function:

.expect(fs.existsSync(downloadsFolder()+'/export.xml')).ok('War wohl nicht erfolgreich',{ timeout: 300000 })

但是第一次試用的結果是一樣的。 我做了一些研究,發現:

async function CheckFileExistsWithTimeDelay(t, timeDelay, fileNameAndPath) {
    for (var i = 0; i < timeDelay; i++) {
        console.log('Waited for a total of ' + i.toString() + ' microseconds');
        await t.wait(1);
        if (fs.existsSync(fileNameAndPath)) {
            // break;
            return;
        }
    }
};

這也行不通。 我認為手表文件 function 會阻止 Fs,因此瀏覽器無法下載文件(寫入文件)。 此外,這不起作用:

        async function waitForFile (path) {
            for (let i = 0; i < 300; i++) {
                if (fs.existsSync(path))
                    return true;

                await t.wait(1000);
            }

            return fs.existsSync(path);
        }

        await t.expect(await waitForFile(downloadsFolder()+'/export.xml')).ok("War wohl nicht erfolgreich", { timeout: 300000 });

看起來文件下載將失敗,直到 testcafe 等待一段時間。 如果文件是直接下載的,一切都很好。

有沒有什么好的例子可以等待下載的文件而不阻塞 fs?

它被要求所以我在這里添加它:testcafe will get the command to download 的行)

        await t
            .click(Selector('button').withText('Aktionen'))
            .click(Selector('a').withText('Xml Exportieren'));

正如我所寫。 立即下載作品完美。 直到下載延遲它才會失敗。 看起來文件上掛了一些鈎子,因此 chrome 無法下載。

新信息 1 服務器將在點擊下載鏈接后 38.7 秒准確響應。 使用 testcafe 完成此操作后,我將進入瀏覽器 window

錯誤

如果我使用一個真實的案例,這意味着我將在38秒后點擊物理網站上的鏈接文件下載好。 沒有錯誤。

新信息 2 我還嘗試將 long.wait(150000) 添加到夾具,然后檢查文件是否存在。 瀏覽器在等待 inside.wait(150000) 循環時嘗試在后台下載文件。 這也是失敗的。

所以我認為這證明這是一個 Testcafe 問題而不是節點問題。

這是另一個如何在測試中等待下載文件的示例:

import { Selector } from 'testcafe';
import fs from 'fs';

const waitForFileDownloaded = (filePath, timeDelay) => new Promise(resolve => {
        let i = 1; 
        const intervalId = setInterval(() => {
            if (fs.existsSync(filePath)) {
                clearInterval(intervalId);
                resolve(true);
            }
            i++;
            if (i > timeDelay) {
                clearInterval(intervalId);
                resolve(false);
            }
        }, 1000);
    });

fixture `Downloading`
    .page `https://github.com/DevExpress/testcafe`;

test('Test', async t => {
    await t
        .click(Selector('a').withText('218 releases'))
        .click(Selector('a').withText('Source code'))
        .expect(await waitForFileDownloaded('c:\\Users\\username\\Downloads\\testcafe-1.6.0.zip', 60)).ok();
});

您還能否澄清一下在 TestCafe 單擊鏈接后是否開始下載過程(例如,僅使用await t.wait()並有很大的超時)?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM