Сбой при регистрации HTTP-запросов для загрузки тестового файла

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

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);

})

person SimoneB    schedule 10.07.2019    source источник
comment
Не могли бы вы предоставить текст ошибки, выданной на вашей стороне?   -  person Arseniy Rubtsov    schedule 10.07.2019


Ответы (1)


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

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

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

Параметр url в объекте фильтра соответствует странице, на которую отправляется запрос (documentation) и не обязательно должен совпадать с 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();
});
person Arseniy Rubtsov    schedule 10.07.2019