QA The Other WayОбеспечение качества в эпоху AI-автоматизации. QA The Other Way.
Практическое QA

Два совпадения требуют решения о продукте.

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

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

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

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

На странице настроек две кнопки Apply. Одна относится к еженедельным обновлениям, другая к уведомлениям безопасности. Созданный тест получает ошибку строгого выбора. Добавление first() позволяет нажать кнопку, но теперь порядок документа выбирает изменяемую настройку. Тесту нужна конкретная запись.

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

Рассмотрите оба совпадения

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

Наш вымышленный пример содержит две именованные области. У каждой кнопка Apply и локальный статус. Нет сервера, аккаунта или сохранённой настройки. Проверяем изменение нужной области и неизменность соседней.

const weekly = page.getByRole('region', { name: 'Weekly updates' });
const apply = weekly.getByRole('button', { name: 'Apply', exact: true });
await expect(apply).toHaveCount(1);
await apply.click();
await expect(weekly.getByRole('status')).toHaveText('Applied');

Нужны раннер Playwright и импорт expect. Фикстура задаёт имя области и обработчик кнопки. Статус доказывает локальный эффект интерфейса, не сохранение или отправку уведомления.

Обоснуйте область

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

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

Локатор разрешается при использовании. Страница может измениться между наблюдениями: количество не блокирует DOM-узел. Клик Playwright по-прежнему выполняет собственные проверки. Не описывайте предварительный подсчёт как защиту от всех дальнейших обновлений.

Позиция требует контракта порядка

Документация предупреждает: first(), last() и nth() после изменения страницы могут выбрать другой элемент. Позиция допустима, если требование прямо касается порядка, например первого результата рейтинга. Проверяйте порядок и идентичность. Исчезновение ошибки не обосновывает позицию.

Локальный тест подтверждает два глобальных совпадения и перехватывает ошибку строгого клика, не меняя статусы. Затем ограничивает действие областью Weekly updates и проверяет неизменность безопасности. Это воспроизводимая проверка границы, не диагноз любой ошибки строгости.

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

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

Различает ли точный текст одинаковые подписи?

Нет. Ограничьте также нужную область или запись.

Всегда ли first() ошибочен?

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

Источники