Всем привет! Чтение электронных писем в автоматических тестах — это трюк, который вам может понадобиться во многих проектах. Вот почему и как с этим бороться… Почему это важно? Что ж, если система отправляет электронные письма — вы можете проверить, что они отправляются и что их содержимое правильное, включая кликабельные ссылки. Итак, это обычные сценарии, когда вам это нужно: Зарегистрироваться. Многие платформы отправляют электронное письмо с подтверждением после создания учетной записи, и вам нужно щелкнуть ссылку подтверждения в электронном письме. Счета-фактуры. Если ваше приложение осуществляет какие-либо платежи, они обычно отправляют чек или счет-фактуру по электронной почте, поэтому вам также может потребоваться проверить правильность их содержимого. Полученные результаты. Например, результаты медицинских анализов. По моему опыту, некоторые больницы отправляют электронное письмо с результатами анализов после их завершения (или, по крайней мере, ссылкой на личную страницу, где вы можете просмотреть отчет). … Конечно, это не полный список — это лишь те варианты использования, с которыми я встречался чаще всего за свою карьеру. Если не проверить эти сценарии, пользователи могут не получать электронные письма или получать в них неверную информацию. В одном из проектов это помогло нам досрочно найти просроченный токен . SendGrind Каковы сложности при чтении электронных писем в тестах? Чтение электронных писем — дело непростое, но не невозможное. Ранние почтовые клиенты использовали для получения электронной почты с сервера, но есть небольшая проблема: электронные письма удаляются с сервера после их загрузки. POP3 Позже появился протокол — он позволяет просто читать электронную почту с сервера. IMAP Проблема в - или при первом подключении (например, при перезапуске автоматического теста). некоторые сервисы запрещают эти протоколы заставить тебя подтвердить свою личность С другой стороны, некоторые сервисы, такие как предоставляют для управления вашей электронной почтой, но есть еще одна проблема — документация и ее библиотеки не очень удобны для пользователя (особенно для тех, кто мало занимается тестированием электронной почты). Gmail, REST API Здесь на помощь приходит — библиотека , которая позволяет вам читать электронные письма и даже открывать их в браузере, если вы используете инструменты автоматизации браузера, такие как . gmail-getter npm Playwright Чтение писем Gmail с помощью Gmail-Getter Первым делом — вам необходимо установить пакет в свой проект: npm install gmail-getter Создайте проект Google Cloud Console и получите учетные данные. Чтобы войти в вам необходимо получить учетные данные: , и . Эти учетные данные позволяют вам получить токен доступа, который необходим для дальнейших запросов (например, для получения списка электронных писем или одного электронного письма и т. д.). Gmail API, идентификатор клиента секрет клиента токен обновления Шаги: Создайте проект в . Google Cloud Console Создайте в разделе ( ) и загрузите его. учетные данные OAuth API и службы желательно выберите там приложение, если оно вам нужно для автоматических тестов настольное Включите . API Gmail Получите токен обновления. Чтобы получить токен обновления, просто выполните команду в корне проекта: npx gmail-getter get-refresh-token (или где-нибудь еще, если пакет установлен глобально) get-refresh-token Вы должны поместить файл в место, где вы будете выполнять команду. credentials.json ⚠️ имя файла учетных данных чувствительно к регистру ⚠️ Получить токен доступа После завершения настройки вы должны получить токен доступа в своих автоматических тестах. Я бы сказал, что лучшее место для этого — глобальная настройка (функция, которая выполняется до начала тестового запуска). Итак, это будет примерно так: import {getToken} from 'gmail-getter' export default async function globalSetup() { process.env['ACCESS_TOKEN'] = await getToken( process.env.CLIENT_ID!, process.env.CLIENT_SECRET!, process.env.REFRESH_TOKEN! ) } В приведенном выше примере используются переменные среды, для которых вам обязательно потребуется также установить пакет . dotenv Но если вы хотите упростить задачу, вы можете использовать этот фрагмент везде, где вам нужен доступ к токену: const accessToken = await getToken( '<put-your-client-id-here>', '<put-your-client-secret-here>', '<put-your-refresh-token-here>' ) Получать электронные письма Прямо сейчас использует для поиска нужного письма: REST API Gmail собственный язык запросов const email = await checkInbox(accessToken!, 15000, 1500, 'from:squier7 subject:Test!') Приведенная выше команда возвращает объект электронной почты, но вам все равно нужно получить либо его содержимое, либо ссылку. Заменить на ваш собственный запрос, следуя синтаксису из ссылки выше ☝️ from:squier7 subject:Test! Вы можете проанализировать ссылку, используя : регулярное выражение const link = parseLinkFromHtml(email!, /(https:\/\/)(\S*)(gmail-getter)([\w\/\?\=\-]*)/im) Замените своим собственным регулярным выражением ☝️ /(https:\/\/)(\S*)(gmail-getter)([\w\/\?\=\-]*)/im ИЛИ получите все HTML-содержимое письма и отобразите его в браузере: import {getToken, parseHtml} from 'gmail-getter' import {test} from '@playwright/test' test('Render an email', async ({page}) => { const accessToken = await getToken( '<put-your-client-id-here>', '<put-your-client-secret-here>', '<put-your-refresh-token-here>' ) const email = await checkInbox(accessToken!, 15000, 1500, 'from:squier7 subject:Test!') // get an email const html = parseHtml(email!) // parse HTML from the email await page.setContent(html) // render the email in the browser }) Общий Я думаю, теперь совершенно очевидно, что работать с электронными письмами в автоматических тестах может быть непросто! Но знание этих трюков значительно упрощает задачу. Вы все равно можете использовать другие почтовые сервисы или попробовать , но я вам гарантирую — это будет не так просто, как в этом руководстве, поскольку вам нужно будет создать собственный помощник, например, предоставленный здесь. IMAP gmail-getter. вы можете найти на . тоже. Пример Playwright GitHub Пример кипариса