[英]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.