Скачать XML с крепежом - PullRequest
       20

Скачать XML с крепежом

1 голос
/ 16 октября 2019

Я хочу сохранить файл XML с сервера на локальный компьютер для последующей проверки. Поскольку TestCafe не допускает загрузку файлов из коробки, я провел некоторое исследование и обнаружил:

import fs from 'fs';

const downloadLocation = './downloads/saved.xml'; //downloadlocation on macOS
const fileDLUrlBase = 'https://example.com/downloads/xml/mytest'; //dynamic generated xml

fixture('download test fixture');
test('download test', async t => {
  await t.navigateTo(fileDLUrlBase);
  await t.wait(30000);
  // Wait 30 seconds
  await t.expect(fs.fileExistsSync(downloadLocation));
});

Я прочитал много комментариев и сообщений здесь о переполнении стека, но я действительно запутался. ВСЕ, действительно ВСЕ решение, помеченное как решение, здесь не работает.

В качестве примера: Пример Testcafe для подтверждения загрузки файла

Я клонирую этот прибор, но TestCafe вылетает. Но этот вопрос помечен как решенный. На мой взгляд, НЕТ решение о загрузке файла работает, и это смущает меня.

Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 17 октября 2019

Я проверил простой сценарий, и он работает без каких-либо ошибок на моей стороне.

server.js

var express = require('express');
var fs      = require('fs');
var app     = express();

app.get('/', function (req, res) {
    res.send('<html>\n' +
         '<head>\n' +
         '</head>\n' +
         '<body>\n' +
         '<a href="/download/">Download file</a>\n' +
         '</body>\n' +
         '</html>');
});

app.get('/download/', (req, res) => {
    var files = fs.createReadStream("text-document.txt");
    res.writeHead(200, {'Content-disposition': 'attachment; filename=text-document.txt'});
    files.pipe(res)
})

app.listen(3000, function () {
    console.log('http://localhost:3000/');
});

test.js

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

fixture `fixture`;

test
    .page('http://localhost:3000/')
    ('download', async t => {
        await t.click(Selector('body > a'));

        await t.wait(1000);

        await t.expect(fs.existsSync('path-to-file\\text-document.txt')).ok();

});

Команда:

testcafe chrome test.js

Результат:

 fixture
 √ download


 1 passed (2s)

Не могли бы вы уточнить вашидетали системного окружения? Будет здорово, если вы сможете представить свой собственный простой проект, подобный приведенному выше. Это поможет нам воспроизвести проблему.

...