Playwright предоставляет разработчикам удобные средства для тестирования веб-приложений, включая взаимодействие с браузером и управление скачиваемыми файлами. В процессе автоматизированных тестов часто возникает необходимость скачивания файлов, например, отчетов, изображений, документов и других материалов. Важно правильно обрабатывать скачивание, чтобы файл был сохранен в нужной директории и чтобы тесты могли продолжиться без ошибок.
Для начала, важно понять, как Playwright обрабатывает скачивание файлов. По умолчанию браузеры не позволяют скачивать файлы без подтверждения пользователя. Однако, с помощью Playwright можно настроить обработку скачиваний так, чтобы они происходили без вмешательства пользователя.
Для этого Playwright предоставляет метод
page.on('download', callback), который срабатывает, когда
начинается скачивание. Важно, что по умолчанию скачивание происходит в
папку, заданную настройками браузера. Однако можно изменить поведение
скачивания, указав пользовательскую директорию.
Если необходимо, чтобы файлы сохранялись в определенную папку, можно
использовать настройку download в контексте браузера.
Пример настройки:
const { chromium } = require('playwright');
(async () => {
const browser = await chromium.launch();
const context = await browser.newContext({
acceptDownloads: true,
downloadsPath: './downloads' // указываем путь к директории для сохранения файлов
});
const page = await context.newPage();
await page.goto('https://example.com');
const downloadPromise = page.waitForEvent('download');
await page.click('text=Download'); // кнопка для скачивания файла
const download = await downloadPromise;
await download.saveAs('./downloads/myfile.pdf'); // сохраняем файл под заданным именем
await browser.close();
})();
В этом примере мы указываем путь для сохранения скачанных файлов
через опцию downloadsPath. После этого скачивание файла
будет происходить в эту папку. Это позволяет избежать ручного
вмешательства и сохранить файлы в удобном месте.
Playwright предоставляет события, которые можно использовать для
отслеживания состояния скачивания. Например, для получения информации о
процессе скачивания можно использовать событие
download:
page.on('download', (download) => {
console.log('Файл начат загрузка:', download.suggestedFilename());
});
С помощью suggestedFilename() можно получить
предложенное имя файла. Это полезно, когда нужно проверить, что
скачанный файл имеет правильное имя или соответствующий формат.
Для ожидания завершения скачивания можно использовать метод
download.path():
const downloadPromise = page.waitForEvent('download');
const download = await downloadPromise;
const filePath = await download.path();
console.log('Файл сохранен в:', filePath);
Метод path() возвращает путь, по которому был сохранен
файл на диске. Это полезно, если нужно выполнить дополнительные
проверки, например, проверить размер файла или его содержимое.
const filePath = await download.path();
if (filePath.endsWith('.pdf')) {
console.log('Файл скачан правильно');
} else {
console.log('Ошибка: неверное расширение файла');
}
fs для чтения и анализа содержимого файла):const fs = require('fs');
const filePath = await download.path();
fs.readFile(filePath, 'utf8', (err, data) => {
if (err) {
console.log('Ошибка при чтении файла:', err);
} else {
console.log('Содержимое файла:', data);
}
});
waitForEvent позволяет задать тайм-аут:const downloadPromise = page.waitForEvent('download', { timeout: 60000 });
try {
const download = await page.waitForEvent('download', { timeout: 60000 });
} catch (error) {
console.log('Ошибка при скачивании файла:', error);
}
const downloadPromises = [];
page.on('download', (download) => {
downloadPromises.push(download.path());
});
await Promise.all(downloadPromises);
Когда скачивание завершено, важно убедиться, что файл был сохранен корректно. Для этого можно проверить размер файла, его содержимое или метаданные. Например, чтобы проверить, что файл не пустой, можно проверить его размер:
const filePath = await download.path();
const stats = fs.statSync(filePath);
if (stats.size > 0) {
console.log('Файл скачан успешно');
} else {
console.log('Ошибка: файл пустой');
}
Также можно проверить контрольную сумму файла (например, MD5 или SHA-256) для убедительности в том, что содержимое файла не было изменено в процессе скачивания.
Скачивание файлов — важная часть тестирования многих веб-приложений. Playwright предоставляет мощные инструменты для автоматизации этого процесса, позволяя не только отслеживать скачивание файлов, но и обрабатывать их в различных ситуациях. Правильная настройка директорий для скачивания, использование событий и методов для ожидания завершения скачивания, а также проверка содержимого файлов — все это помогает сделать тесты более надежными и точными.