我正在创建一个测试,它将转到特定页面,然后单击,然后单击按钮以下载excel文件。
在开始下载之前,文件存放在很远的位置,通常需要1.5分钟才能从主机服务器上收集文件,完全下载只需要2-3秒。
从我单击提交按钮到下载开始之间的时间间隔为1.5分钟(如前所述)。
为了安全起见,我尝试应用.wait(120000)-2分钟。
测试给出错误(请参见下面的图像)。
这是我的测试代码。
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)
答案 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');
}