Как нажать на кнопку с помощью Selenium

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

Скачивайте книги ТОЛЬКО на русском языке у нас в телеграм канале: PythonBooksRU

Содержание

Что такое Selenium?

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

Примечание редакции. Конечно, Selenium применяется не только в тестировании. О другом варианте применения можно почитать в статье “Парсинг при помощи Python и Selenium”.

Нажатие кнопки при помощи Selenium

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

Ниже приведен пример щелчка на кнопке с id “login-btn”:

# click on button with the id "login-btn"
button = driver.find_element(By.ID, "login-btn")
button.click()

Стратегии поиска кнопки

Но чтобы нажать на кнопку с помощью Selenium, ее еще нужно найти. Для поиска кнопок применяются различные стратегии, предполагающие использование локаторов. Локатор – это способ идентификации элемента на веб-странице. Также это аргумент, который передается в метод findElement.

Поиск кнопки по идентификатору

Если для кнопки задан ID, то для поиска элемента можно использовать стратегию локатора ID. Ниже приведен пример использования By.ID:

// click on button with the id "login-btn"
button = driver.find_element(By.ID, "login-btn")
button.click()

Поиск кнопки с использованием имени класса

Если для кнопки задан класс, то для ее поиска можно использовать локатор по имени класса. Ниже приведен пример использования By.CLASS_NAME:

// click on button that has the class "add-to-cart-btn"
button = driver.find_element(By.CLASS_NAME, "main-button")
button.click()

Поиск кнопки по тексту ссылки

Если кнопка, которую мы хотим нажать, является ссылкой, стилизованной под кнопку, то для ее поиска можно использовать поиск по тексту ссылки. Приведем пример использования By.LINK_TEXT:

// click on link with the text "Login"
button = driver.find_element(By.LINK_TEXT, "Login")
button.click()

Поиск кнопки с помощью CSS-селектора

CSS-селекторы – это выражения, которые обычно используются для определения элементов для стилизации.

Если вы знакомы с использованием CSS-селекторов, то для поиска кнопки в Selenium можете применить стратегию локатора CSS-селекторов. Вот пример использования By.CSS_SELECTOR:

// click on button that has the "data-test-id" attribute set to "login-btn"
button = driver.find_element(By.CSS_SELECTOR, "button[data-test-id='login-btn']")
button.click()

Поиск кнопки для нажатия с помощью XPATH

XPATH – это мощный язык запросов для навигации по XML-документам, включая веб-страницы HTML.

Если вы знакомы с использованием XPATH, то для поиска кнопки в Selenium вы можете применить локатор XPATH. Вот пример использования By.XPATH:

// click on button that has the "data-test-id" attribute set to "login-btn"
button = driver.find_element(By.XPATH, "//button[@data-test-id=login-btn]")
button.click()

Лучшие практики использования локаторов

Многие жалобы на часто ломающиеся Selenium-тесты связаны с использованием нестабильных стратегий поиска элементов при помощи локаторов.

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

Общепринятым является задание уникальных атрибутов data-test-id для элементов. Эти атрибуты используются вместо ID элемента или имен классов. Последние часто изменяются разработчиками фронтенда для привязки JavaScript-событий и стилизации. Благодаря уникальности атрибутов фронтендеры не забудут, что их нельзя удалять или переименовать, потому что на них ссылаются тестовые скрипты Selenium. Таким образом снизится вероятность случайного нарушения работы тестов.

Таргетирование кнопок с помощью пользовательских меток

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

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

Приведем пример нажатия на кнопку с использованием пользовательских меток с помощью команды I.click в UIlicious:

// Navigate to github.com login page
I.goTo("https://github.com/login")

// Fill in login email and password
I.fill("Email", "john@example.com")
I.fill("Password", "supersecretpassword")

// Click the "Sign in" button
I.click("Sign in")

// Validate that error message is shown to user
I.see("Incorrect username or password.")

Основная философия UIlicious – “Тестируйте путь пользователей, а не HTML”. Вы можете попробовать UIlicious и бесплатно протестировать свой сайт с помощью UIlicious Snippets.

Окно UIlicious Snippets

UIlicious Snippets – это бесплатная версия сообщества UIlicious Studio – облачной среды разработки для написания, выполнения и постоянного мониторинга кроссбраузерных тестов для веб-приложений.

Перевод статьи «How to click a button using Selenium».

3 комментария к “Как нажать на кнопку с помощью Selenium”

  1. Пингбэк: Поиск элемента в Selenium

  2. Пингбэк: Прокрутка страницы в Selenium

  3. Пингбэк: Скрапинг с помощью Python и Selenium

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *