Кукловод получает ответ от ссылки на скачивание PDF

1

Я автоматизирую регрессионное тестирование для веб-сайта, и одной из задач является проверка загрузки PDF файлов. Для этого я использую Puppeteer и Chromium. Я обнаружил, что довольно сложно загружать файлы в режиме безглавых. Вместо того, чтобы загружать файл, я подумал, что было бы разумно искать ответ со страницы и размер файла. Моя проблема: когда я пытаюсь перейти на страницу, ничего не происходит. Я получаю ошибку тайм-аута. Вот код, который я пытаюсь использовать:

const filename = new RegExp('\S*(\.pdf)');
await page.waitForSelector('#download-pdf', {timeout: timeout});
console.log('Clicking on "Download PDF" button');
const link = await page.$eval('#download-pdf', el => el.href);
await Promise.all([
    page.goto(link),
    page.on('response', response => {
        if(response._headers['content-disposition'] === 'attachment;filename=${filename}'){
            console.log('Size: ', response._headers['content-length']);
        }
    })
]);

РЕДАКТИРОВАТЬ

Если кто-то понимает, как page.goto() игнорирует страницы .pdf, это будет очень полезно для меня.

Позвольте мне лучше определить проблему. После нажатия кнопки download pdf на веб-странице запускается событие, которое генерирует файл PDF и отправляет пользователя по уникальному URL-адресу. Этот URL-адрес уничтожается через короткий период. Чтобы дойти до этого момента, я считаю, что я должен использовать page.click() для запуска события и создания URL- page.click(). Однако page.click() также пытается перейти к URL-адресу pdf, который отклоняется в режиме безглавых. Что мне нужно сделать, это получить URL-адрес и проверить на него ответ.

  • 0
    Насколько большой файл PDF? Также кажется, что эта проблема находится в стадии разработки в течение нескольких месяцев. bugs.chromium.org/p/chromium/issues/detail?id=831887
  • 0
    @Md В большинстве тестовых случаев размер файла составляет 279 КБ, однако другие тестовые случаи связаны с другими файлами PDF. Наличие сообщенного размера больше для проверки того, что файл не пустой.
Теги:
puppeteer

1 ответ

0
Лучший ответ

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

page.on('response', intercept=>{
    if(intercept.url().endsWith('.pdf')){
        console.log(intercept.url());
        console.log('HTTP status code: %d', intercept.status());
        console.log(intercept.headers());
    }
});

Ещё вопросы

Сообщество Overcoder
Наверх
Меню