Сбой при ведении журнала HTTP-запросов для проверки загрузки файла - PullRequest
1 голос
/ 10 июля 2019

Я пытаюсь повторить это:

https://devexpress.github.io/testcafe/documentation/test-api/intercepting-http-requests/

Моя целевая страница имеет target="_blank" Есть ли способ, как изменить атрибут, удалив это target?

Итак, тест не пройден.

Не очень понятно, что делает код в примере.Должен ли быть URL страницы, на которой есть ссылка для скачивания?

import { ClientFunction, t, Selector, RequestLogger } from 'testcafe'
import * as fs from 'fs';
import * as path from 'path';
...
const forInvoice = new ForInvoice()
const client = 'STRV s.r.o.'

const url = urlFor('?/timers/unbilledOverview')
const logger = RequestLogger({ url, method: 'post' }, {
logResponseHeaders: true,
logResponseBody:    true
});

fixture.only `For Invoicing`
   .requestHooks(logger);

test('Verify download of .xls and .pdf', async t => {
    await t.useRole(ADMIN_INVOICE)
    await forInvoice.navigateToForInvoicing()
    await forInvoice.filterClient(client)
    await t
        .click(Selector('a').filter('.sc-mini-icon-file.excel-file'))
        .expect(logger.contains(r => r.response.statusCode === 200)).ok();

    const filePath = path.join(__dirname, 'STRV-s-r-o-Attachment');

    console.log(filePath);
    console.log(logger.requests[0].response.headers);

    fs.writeFileSync(filePath, logger.requests[0].response.body);

})

1 Ответ

1 голос
/ 10 июля 2019

Я заметил, что в приведенном примере вы не указали стартовую страницу для прибора или теста. Это может быть причиной ошибки.

Пример TestCafe, который вы упомянули, делает следующее:

  1. Создает экземпляр RequestLogger, который отслеживает запросы (заголовки и тело) к той же странице, на которой начинается тест.
  2. Нажмите кнопку, чтобы начать загрузку файла.
  3. Ожидание ответа сервера об успешном выполнении.
  4. Сохраняет тело ответа в файл.

Параметр url в объекте фильтра соответствует странице, на которую отправляется запрос ( документация ), и не должен совпадать с URL тестируемой страницы.

Вы можете изменить элемент на странице, используя ClientFunction со стандартным веб-API. Для начала вы можете взять следующий код:

import { Selector, ClientFunction } from 'testcafe'

const link = Selector('a');

const removeTarget = ClientFunction(() => {
    link().removeAttribute('target');
}, { dependencies: { link } })

fixture`Fixture name`
    .page`https://your_page.com/`;

test('Remove target', async t => {
    await removeTarget();
});
...