Нажатие на ссылку для скачивания и применение .wait (120000) выдает ошибку - PullRequest
3 голосов
/ 08 марта 2019

Я создаю тест, где он переходит на определенную страницу, нажимает на кнопку и загружает файл 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)

1 Ответ

1 голос
/ 08 марта 2019

В качестве обходного пути вы можете дождаться прибытия файла в папку загрузки, используя цикл 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');
}
...