Проверьте загрузку, а не только кнопку.
Событие загрузки - это начало доказательства артефакта. Проверьте сохраненный контент на соответствие небольшому явному контракту.

Переведенное издание. Технические идентификаторы остаются в своей первоначальной форме.

Кнопка "Экспорт" реагирует. Начнется загрузка. Тест станет зеленым. Позже кто-то открывает файл и находит вчерашние строки, неправильные столбцы или страницу входа, сохраненную под именем электронной таблицы. Взаимодействие с браузером сработало, но полезного результата не произошло.
В этом руководстве создается проверка артефактов на основе документации по загрузке Playwright. В примере используется крошечный CSV-файл из местной демо-версии. Это не финансовый отчет, экспорт поставщика или заявление о том, что какой-либо продукт предоставляет этот формат. Цель состоит в том, чтобы связать щелчок со свидетельством о полученных байтах.
Зарегистрируйте ожидание перед действием
Быстрая загрузка может начаться сразу после клика. Сначала начните ждать, затем выполните действие и ждите того же обещания. Это сохранит событие в основном потоке тестирования, а не оставит неотслеживаемый обратный вызов после завершения сценария.
import { readFile } from 'node:fs/promises';
const pendingDownload = page.waitForEvent('download');
await page.getByRole('button', { name: 'Export demo' }).click();
const download = await pendingDownload;
const output = testInfo.outputPath('demo-export.csv');
await download.saveAs(output);
const text = await readFile(output, 'utf8');
expect(text).toBe('name,status\nDemo task,ready\n');Этот фрагмент принадлежит тесту Playwright, который получает страницу и testInfo, а ожидаемое значение импортировано из тестового пакета. Явный путь вывода позволяет избежать рассмотрения предложенного имени файла как надежного места назначения. В документации сказано, что saveAs ожидает завершения. Чтение файловой системы после этого шага проверяет сохраненный артефакт, а не просто обещание пользовательского интерфейса.
Выбирайте контракт на содержание, а не удобное утверждение
Точные байты подходят для этой намеренно исправленной демонстрации. Реальный экспорт может содержать временные метки, сгенерированные идентификаторы или порядок строк, который законно изменяется. Решите, какие поля должны быть стабильными, и проанализируйте фактический формат с помощью подходящей библиотеки. Не делайте тест нестабильным, требуя равенства значений, которые продукт никогда не обещал.
Для CSV контракт может потребовать именованные столбцы, ожидаемую контролируемую запись и допустимое количество строк. Настоящий CSV-файл может включать запятые в кавычках, разрывы строк и кодировки; наивное разделение по запятым - это не общий синтаксический анализатор. Для PDF-файла используйте соответствующую проверку текста или структуры и визуальный просмотр, когда макет имеет значение. Успешное сохранение не доказывает, что какой-либо формат действителен.
Оставьте валидность формата, деловое содержание и презентацию отдельными вопросами. Имя файла, заканчивающееся на .csv, говорит о том, что предложил вызывающий абонент, а не о том, что содержит файл. Заголовок может быть правильным, тогда как каждая строка данных неверна. Парсер может принять документ, страницы которого обрезаны. Выберите проверки, соответствующие риску экспорта.
Обеспечьте тестовой записи безопасное место для жизни
Playwright отмечает, что загрузки, принадлежащие контексту, удаляются при закрытии этого контекста. Сохраняйте артефакт перед демонтажем, когда он понадобится тесту позже. Используйте контролируемый каталог вывода тестов и укажите причину его сохранения. Не полагайтесь на временный путь браузера, сохранившийся в пакете.
Сохраненный экспорт может содержать более конфиденциальный материал, чем снимок экрана. Тестируйте с помощью изобретенных или одобренных промежуточных записей и проверяйте неудачные загрузки перед их распространением. Редактирование снимка экрана не приводит к редактированию прикрепленного к нему CSV-файла. URL-адрес загрузки также может содержать информацию о личном доступе; избегайте копирования его в общедоступные заметки по отладке.
Если утверждение не выполнено, сохраняйте только те доказательства, которые разрешены политикой хранения вашей команды. Запишите действие, контролируемый ввод, результат синтаксического анализа и неудачный контракт. Общая трассировка нажатия кнопки является полезным контекстом, но она не может заменить артефакт, который фактически получает пользователь.
Намеренно проверяйте пустые и отклоненные пути
Хорошая проверка экспорта включает в себя ожидаемое поведение при отсутствии записей и отклонении запроса. Правильным ответом может быть пустой файл с заголовками, четкое сообщение или отсутствие загрузки. Это продуктовое решение, которое необходимо установить, прежде чем писать утверждение. Не заставляйте каждое состояние создавать файл только потому, что помощник счастливого пути ожидает его.
Используйте отдельные тесты с контролируемыми входными данными. Если приложение сообщает об ошибке, проверьте объяснение и выберите безопасное следующее действие. Если неожиданный файл все же приходит, проверьте его, а не слепо принимайте предложенное расширение. Документ с ошибкой HTML не является успешным экспортом данных.
AnyTest описывает исследование на основе URL-адресов и сквозные тесты, проверяемые человеком. Рецензент может спросить, проверяется ли предлагаемая процедура экспорта артефакт или только контроль. В этом руководстве не говорится о конкретной функции анализатора загрузки или хранилища в AnyTest. Для команд с ограниченным временем QA эта одна граница не позволяет обнадеживающему щелчку превратиться в ложное обещание о доставленных данных.
Общие вопросы
Достаточно ли предложенного имени файла?
Нет. Проверьте сохраненный формат и бизнес-контент; используйте контролируемый путь вывода.
Выдержит ли временный файл закрытие контекста?
В документации говорится, что загрузки контекста удаляются при закрытии. Сохраните необходимые доказательства перед демонтажем.