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

Войдите во фрейм, прежде чем выбирать элемент управления.

Проверяйте встроенную форму в её документе, не превращая порядок DOM в требование продукта.

6 мин. чтенияQA The Other Way
Авторская схема вложенных документов: встроенная форма и неизменённая внешняя страница.
Авторская редакционная иллюстрация.
Иллюстративное видео к этой статье. английский экранный текст; выберите субтитры для этого языка.

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

Проверяйте встроенную форму в её документе, не превращая порядок DOM в требование продукта.
Локальный пример с вымышленными данными, не интерфейс клиента или поставщика.

На странице две кнопки сохранения. Одна относится к настройкам страницы, другая к встроенной форме. Назвать кнопку недостаточно: ещё не определено, какой документ получает действие. Более длинный селектор вне встроенного документа не устраняет эту нехватку области поиска.

В этом руководстве используется документация фреймов Playwright и вымышленная локальная форма. Встроенная настройка должна измениться, внешняя страница остаться прежней. Это не платёжный виджет, интеграция поставщика или проверка безопасности. Вопрос один: тест действует внутри нужного фрейма?

Сначала определите документ, затем элемент

Локаторы страницы работают в главном фрейме. У iframe отдельный документ. Войдите через локатор фрейма, затем найдите элемент по доступному имени. Эти две области делают тест понятным без привязки к экранным координатам.

const preferences = page.frameLocator('iframe[title="Demo preferences"]');
await preferences.getByLabel('Display name').fill('Demo reader');
await preferences.getByRole('button', { name: 'Save', exact: true }).click();
await expect(preferences.getByRole('status')).toHaveText('Saved: Demo reader');
await expect(page.getByRole('status')).toHaveText('Outer page unchanged');

Пример предполагает указанный iframe, доступное поле и статус в каждом документе. Импортируйте expect из тестового раннера Playwright. Последняя проверка делает случайное действие на внешней странице заметным, вместо того чтобы считать успехом любое сохранение.

Заголовок iframe здесь является договорённостью локального примера, а не универсальным советом. Выберите идентификатор, смысл которого продукт сохраняет. Если несколько компонентов имеют одинаковый заголовок, уникальный владелец всё ещё не определён. Обсудите это с командой, а не выбирайте первый фрейм.

Пусть неоднозначность даёт ясную ошибку

API FrameLocator описывает ошибку, когда селектор соответствует нескольким фреймам. Это полезная информация: возможно, добавили компонент или исходный селектор никогда не был уникальным.

Не добавляйте first() или nth() автоматически. Положение иногда является требованием, но сначала установите это. Постоянный выбор первого фрейма может давать зелёный результат после появления другого компонента перед нужной формой.

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

Проверяйте результат в пределах доказательства

Заполненное поле доказывает действие браузера. Сообщение статуса доказывает ответ интерфейса. Ни одно само по себе не доказывает сохранение удалённым сервисом. У нашего примера нет сервера. Скриншот показывает механизм, а не завершённую интеграцию.

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

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

Оставьте конкретную заметку для проверки

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

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

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

Входит ли локатор страницы во все iframe?

Действия страницы работают в главном фрейме. Сначала войдите в нужный iframe.

Нужно ли выбирать первый фрейм при неоднозначности?

Только если положение является установленным требованием. Иначе исправьте правило принадлежности.

Источники