QA The Other WayОбеспечение качества в эпоху тестов, написанных искусственным интеллектом. QA The Other Way.
Практичный QA

Следуйте всплывающему окну, которое открылось в результате вашего действия.

Привяжите новое окно к его инициирующему действию, а затем проверьте нужную страницу вместо произвольной вкладки.

7 мин. чтенияQA The Other Way
Созданное родительское окно, соединенное с предполагаемым всплывающим окном.
Авторская редакционная иллюстрация.
Иллюстративное видео к этой статье. английский экранный текст; выберите субтитры для этого языка.

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

Привяжите новое окно к его инициирующему действию, а затем проверьте нужную страницу вместо произвольной вкладки.
Иллюстративная локальная демонстрация с придуманными входами, а не интерфейсом клиента или поставщика.

Кнопка помощи открывает новое окно. Тест продолжает читать исходную страницу или выбирает вкладку, которая оказывается последней. Он может пройти, когда присутствует другое окно, и завершиться неудачей, когда изменится среда. Недостающий контракт – это право собственности: какая страница была создана этим действием?

Это руководство следует за документацией страниц Playwright с местным окном поддержки. Это не вход в учетную запись или внешний поток платежей. Цель состоит в том, чтобы прикрепить всплывающее окно к его инициирующему действию, проверить фактически полученную страницу и не превратить порядок табуляции в доказательство.

Ожидание на странице, которой принадлежит действие

Запустите всплывающее окно, прежде чем щелкнуть элемент управления, который его открывает. Затем дождитесь того же обещания и сохраните возвращенную ссылку на страницу. Быстрое новое окно не должно ускользнуть от ожидания, а другая существующая вкладка не должна стать случайной целью.

const pendingPopup = page.waitForEvent('popup');
await page.getByRole('button', { name: 'Open demo help' }).click();
const popup = await pendingPopup;
await expect(popup.getByRole('heading', { name: 'Demo help' })).toBeVisible();

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

Руководство по страницам также описывает прослушивание новой страницы в контексте браузера. Это более широкое событие полезно, когда исходная страница неизвестна. Когда оно известно, всплывающее событие на уровне страницы дает более четкую связь. Ограничьте ожидание поведением вместо того, чтобы по умолчанию использовать самый широкий прослушиватель.

Новая страница еще не является правильным местом назначения

Получение объекта Page подтверждает, что окно было создано. Это не доказывает, что загружен предполагаемый контент или что навигация завершилась в разрешенном источнике. Всплывающее окно может отображать ошибку, перенаправление или другой документ. Проверьте значимый URL-адрес или состояние страницы на соответствие фактическим требованиям к продукту.

Для демонстрации достаточно заголовка, чтобы продемонстрировать право собственности. Для реального потока используйте утвержденный ожидаемый пункт назначения и информацию, которую человек должен получить. Не считайте видимый заголовок успешным. Не вводите учетные данные на неожиданную страницу, потому что она открылась в нужный момент.

Используйте возвращенную ссылку на всплывающее окно для утверждений и действий. Не полагайтесь на порядок context.pages(). Контекст может уже содержать вкладку уведомления, более раннее окно справки или страницы, созданные приложением. Предположение последней вкладки - это предположение, скрытое в читаемом в противном случае коде.

Разделяйте навигацию и завершение бизнеса

Документ, появляющийся в другом окне, может быть лишь одним шагом на пути. Статья поддержки должна содержать обещанное руководство. Сформированный отчет должен соответствовать выбранной записи. Окно подтверждения должно отражать фактическую операцию. Новое событие само по себе не может доказать ни один из этих бизнес-результатов.

При разработке теста используйте изобретенные или одобренные промежуточные записи. Если всплывающее окно попадает в стороннюю службу, установите разрешенную границу тестирования, прежде чем действовать там. Удобная ссылка в браузере не является разрешением отправить форму, потратить деньги или раскрыть данные аккаунта другому сайту.

Для рабочих процессов, которые завершаются в исходном окне, сохраните обе ссылки и назовите их. Проверьте следующее состояние исходной страницы после одобренного действия всплывающего окна. Не закрывайте случайно родительскую страницу, чтобы упростить очистку. Тест должен сохранять отношения, которые испытывает человек.

Решите, как будет сообщаться об отсутствии всплывающих окон

Продукт может намеренно повторно использовать одну и ту же вкладку на мобильном устройстве или в другой конфигурации. Подтвердите это поведение, прежде чем требовать всплывающее окно повсюду. Если спецификация обещает всплывающее окно, но оно не появляется, ограниченное ожидание события должно завершиться неудачей с этой четкой границей, а не зависать на неопределенный срок.

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

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

AnyTest описывает исследование приложений и сквозные тесты, которые проверяют люди. Рецензент может спросить, какое окно на самом деле нацелено на созданное путешествие и как оно доказывает эту взаимосвязь. Никакой конкретной реализации всплывающих окон в AnyTest не заявлено. Полезным результатом является явная проверка владельца страницы и места назначения, а не большая коллекция вкладок.

Общие вопросы

Должен ли тест использовать последнюю вкладку?

Не тогда, когда инициирующее действие может быть привязано к событию всплывающего окна. Сохраните возвращенную ссылку на страницу.

Является ли всплывающее окно конечным результатом?

Нет. Проверьте предполагаемое место назначения/содержание и бизнес-результат отдельно.

Источники