Тестирование с Playwright
Теория: События
Playwright эмулирует работу пользователя, позволяя выполнять все любые типовые действия, такие как клики, заполнение форм, вызов горячих клавиш и фокус элементов.
Действия Playwright очень похожи на события браузера, но не являются ими. Когда пользователь взаимодействует со страницей, то его действия, часто представляют собой цепочку событий. Возьмем для примера набор текста в полях формы. Во время этого процесса вызывается множество событий разделенных во времени. В том числе потому, что человек, обычно, набирает текст постепенно. За это время вызывается череда событий, таких как keydown, keypress, input, keyup, причем для каждого символа индивидуально с определенной задержкой. А в Playwright мы используем действие "нажимать последовательно":
Все действия асинхронны. В момент их вызова происходит реальный поиск элемента внутри локатора и непосредственно выполнение действия. Но завершение действия не гарантирует что события в браузере выполнились. Нельзя ожидать что после этой строчки, на странице выполнилось все что должно было произойти в каждом конкретном случае. К счастью, в большинстве случаев, нам не нужно об этом думать за счет механизма автоматического ожидания при поиске элементов с помощью локаторов.
Ниже мы разберем несколько самых популярных действий, которые встречаются в тестах. К ним относятся клики, взаимодействие с формами и спец клавиши.
Клики
Основных видов кликов два: одинарный и двойной
В дополнении к этому, одинарный клик может быть сделан правой кнопкой мыши или с зажатыми управляющими клавишами. Все это настраивается параметрами:
Во время клика, Playwright выполняет множество действий под капотом. Вот их список:
- Поиск элемента в DOM. Если элемент не найден, то локатор ожидает его появление в рамках заданного в конфигурации timeout.
- Ожидание появления, то есть того, что у элемента не установлены стили
display:noneиvisibility:hidden. - Ожидание остановки элемента, например, ожидание завершения css-трансформации.
- Скролинг до элемента, чтобы он оказался в видимой части экрана.
- Ожидание получения pointer events в точке действия, например, ожидание того, что элемент не будут перекрывать другие элементы.
- Повтор этих действий, если во время проверок элемент пропал из DOM.
Взаимодействие с формами
Заполнение текстовых полей
В большинстве ситуаций для заполнения текстовых полей достаточно метода fill(), который фокусируется на нужном элементе и генерирует событие input.
Если текстовое поле обрабатывается посимвольно, то понадобится метод pressSequentially(), который вводит символы по одному с задержкой, порождая такие события как keypress, keyup и т.д.
Чекбоксы и радиобатоны
Поля ввода с типами checkbox или radio отмечаются методом check(). Поведение метода на 100% совпадает с тем как это происходит со стороны пользователя, например, двойной check() на чекбоксе возвращает его в исходное состояние, которое было до первого check().
Селекты
Значения в селектах выбираются методом selectOption(). Этот метод поддерживает выбор по значению и по лейблу.
Горячие клавиши
Для горячих клавиш используется метод press(), который фокусируется на выбранном элемент и производит одновременное одиночное нажатие всех перечисленных клавиш:


