Проверка содержимого файлов в автоматизированных тестах является важным аспектом работы с Playwright, так как позволяет убедиться в корректности данных, загружаемых и обрабатываемых на веб-странице. В Playwright можно эффективно взаимодействовать с файловой системой и анализировать содержимое файлов, что помогает при тестировании функций загрузки, сохранения и обработки данных на клиентской стороне.
В Playwright нет прямой поддержки чтения файлов, однако можно использовать Node.js для работы с файловой системой. Playwright позволяет вам легко взаимодействовать с файлами, загруженными в браузер, и сравнивать их содержимое с ожидаемым.
Для начала следует использовать стандартные возможности Node.js для
работы с файловой системой, такие как модуль fs (File
System), чтобы читать и проверять файлы в тестах. Например, если
приложение позволяет пользователю загрузить файл, можно проверить его
содержимое после загрузки.
const fs = require('fs');
const path = require('path');
async function checkFileContent(filePath, expectedContent) {
const fileContent = fs.readFileSync(filePath, 'utf8');
if (fileContent !== expectedContent) {
throw new Error(`Содержимое файла не соответствует ожидаемому.`);
}
}
В этом примере используется метод readFileSync для
синхронного чтения содержимого файла. Этот способ подходит для небольших
файлов и когда не требуется выполнение других асинхронных операций,
однако в большинстве случаев лучше использовать асинхронные методы для
работы с файлами.
Когда тестируется функциональность загрузки файлов через браузер, Playwright позволяет перехватывать файлы, отправляемые пользователем на сервер. Это можно сделать с помощью функционала API загрузки файлов. Например, при загрузке файла с помощью формы можно отслеживать, какой именно файл был загружен.
Пример кода для проверки файла, загружаемого через форму:
test('Загрузка файла', async ({ page }) => {
const filePath = path.join(__dirname, 'tests/sample.txt');
const input = await page.locator('input[type="file"]');
await input.setInputFiles(filePath);
// Перехватываем файл, отправленный на сервер
page.on('filechooser', async (fileChooser) => {
const selectedFile = await fileChooser.selectedFiles();
const uploadedFilePath = selectedFile[0].path();
// Читаем файл и проверяем его содержимое
const fileContent = fs.readFileSync(uploadedFilePath, 'utf8');
expect(fileContent).toBe('Ожидаемое содержимое файла');
});
});
Этот пример демонстрирует, как Playwright может быть использован для автоматической загрузки файла в форму, а затем проверять, что файл был выбран и его содержимое соответствует ожиданиям.
Часто необходимо не только прочитать содержимое файла, но и сравнить
его с заранее подготовленным эталоном. В таких случаях можно
использовать библиотеку для работы с файловыми данными, например,
diff или deep-diff. В случае простого
текстового сравнения можно ограничиться стандартным методом
JavaScript.
Пример сравнения содержимого двух файлов:
const fs = require('fs');
const path = require('path');
async function compareFileContent(file1, file2) {
const content1 = fs.readFileSync(file1, 'utf8');
const content2 = fs.readFileSync(file2, 'utf8');
if (content1 !== content2) {
throw new Error(`Файлы не совпадают: ${file1} и ${file2}`);
}
}
Этот код помогает убедиться, что два файла содержат одинаковые данные, что может быть полезно при тестировании процессов генерации отчетов или сохранения файлов.
При работе с файловой системой важно учитывать различные сценарии ошибок: файл может быть не найден, поврежден или содержать некорректные данные. Для предотвращения сбоев в тестах необходимо правильно обрабатывать ошибки.
Пример обработки ошибок при чтении файла:
const fs = require('fs');
const path = require('path');
async function safeReadFile(filePath) {
try {
const fileContent = fs.readFileSync(filePath, 'utf8');
return fileContent;
} catch (error) {
console.error(`Ошибка при чтении файла: ${filePath}`, error);
throw new Error('Не удалось прочитать файл.');
}
}
Здесь при возникновении ошибки чтения файла будет выведено подробное сообщение, а тест не завершится неожиданным образом. Это повышает надежность тестов.
При тестировании загрузки или сохранения больших файлов важно
использовать асинхронные методы для предотвращения блокировки главного
потока выполнения программы. В таких случаях рекомендуется использовать
fs.promises для асинхронной работы с файлами.
Пример асинхронного чтения файла:
const fs = require('fs').promises;
const path = require('path');
async function readLargeFile(filePath) {
try {
const fileContent = await fs.readFile(filePath, 'utf8');
return fileContent;
} catch (error) {
console.error(`Ошибка при чтении файла: ${filePath}`, error);
throw new Error('Не удалось прочитать файл.');
}
}
Этот код выполняет чтение файла асинхронно, что особенно полезно при работе с большими объемами данных, не блокируя основной поток выполнения.
Для тестирования процессов сохранения файлов на клиенте, например, при сохранении отчетов или данных, Playwright предоставляет возможности для проверки, что файл был успешно сохранен в нужной директории.
Пример тестирования сохранения файла на диск:
test('Сохранение файла', async ({ page }) => {
// Перехватываем скачивание файла
const [download] = await Promise.all([
page.waitForEvent('download'),
page.click('button#save-report')
]);
// Получаем путь сохраненного файла
const downloadPath = await download.path();
// Читаем содержимое сохраненного файла
const fileContent = fs.readFileSync(downloadPath, 'utf8');
expect(fileContent).toContain('Ожидаемое содержимое файла');
});
Здесь используется событие download для перехвата
процесса скачивания файла, и затем файл проверяется на соответствие
ожидаемым данным.
Проверка содержимого файлов с помощью Playwright и Node.js позволяет автоматизировать тестирование приложений, работающих с загрузкой, обработкой и сохранением данных. Используя возможности Node.js и Playwright, можно легко реализовать различные сценарии тестирования для обеспечения корректности работы с файлами в реальных приложениях.