Кукловод получает ответ от ссылки на скачивание PDF - PullRequest
0 голосов
/ 18 октября 2018

Я автоматизирую регрессионное тестирование для веб-сайта, и одной из задач является проверка загрузок 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() также пытается перейти к URL-адресу PDF, который отклоняется в режиме без заголовка.Что мне нужно сделать, это получить URL и проверить ответ от него.

1 Ответ

0 голосов
/ 25 октября 2018

Я нашел решение.Я опубликую это здесь для любого, кто столкнется с подобной проблемой в ближайшие дни.Идея заключается в том, чтобы создать прослушиватель событий для прослушивания любых ответов.Поскольку я заботился только об ответах со страниц, заканчивающихся на .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());
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...