В этой статье мы доступно разберем код на Python для автоматизации входа и захвата скриншотов.
Содержание:
- Импорт модулей
- Класс модели страницы (POM) – Login Page
- Настройка WebDriver и переход на страницу входа
- Создание экземпляра `LoginPage`
- Выполнение входа
- Явное ожидание сообщения об успехе (explicit wait)
- Закрытие браузера
Друзья, поддержите нас вступлением в наш телеграм канал QaRocks. Там много туториалов, задач по автоматизации и книг по QA.
Импорт модулей
Представьте, что мы создаем новый проект Selenium, и нам нужно импортировать необходимые модули для автоматизации браузера. Эти модули нужны для взаимодействия с браузерами и реализации явных ожиданий при автоматизации. Таким образом, они обеспечивают основные инструменты для веб-тестирования проекта.
Эти строки импортируют необходимые модули из библиотеки Selenium. Давайте рассмотрим, за что отвечают основные элементы кода:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC
webdriver
: этот модуль обеспечивает взаимодействие с веб-браузерами.By
: перечисления для определения местоположения элементов на веб-странице (например, по ID или по имени).WebDriverWait
: этот класс предоставляет методы ожидания для экземпляров WebDriver.expected_conditions
: условия, которые будут использоваться с WebDriverWait (например, проверка наличия элемента).
Класс модели страницы (POM) – Login Page
Теперь представим, что в нашем веб-приложении есть страница входа в систему, и мы хотим организовать свой код с помощью объектной модели страницы. Для этого можно использовать класс LoginPage
, который инкапсулирует локаторы и функциональность страницы входа в систему, способствуя повторному использованию кода и удобству сопровождения. Он полезен, когда есть несколько тестов, взаимодействующих с одной и той же страницей.
Рассмотрим часть кода, в которой определяется класс LoginPage
с использованием шаблона проектирования Page Object Model (POM):
class LoginPage: def __init__(self, driver): self.driver = driver self.username_locator = (By.ID, 'username') self.password_locator = (By.ID, 'password') self.login_button_locator = (By.XPATH, '//button[@type="submit"]') def login(self, username, password): self.driver.find_element(*self.username_locator).send_keys(username) self.driver.find_element(*self.password_locator).send_keys(password) self.driver.find_element(*self.login_button_locator).click()
__init__
: инициализирует класс с экземпляром WebDriver и локаторами для имени пользователя, пароля и кнопки входа.login
: метод для выполнения действия входа в систему путем поиска элементов и взаимодействия с ними.
Настройка WebDriver и переход на страницу входа
Далее нам необходимо начать новый тест, для чего нужно настроить WebDriver и перейти на страницу входа в систему. Давайте разберем следующую часть кода, которая инициализирует браузер для тестирования и направляет его на страницу входа в систему. Это классический шаг настройки для любого сценария веб-автоматизации.
# Set up the WebDriver driver = webdriver.Chrome() driver.get('https://example.com/login')
В этих строках создается экземпляр Chrome WebDriver и осуществляется переход на страницу входа на сайт примера.
Создание экземпляра `LoginPage`
Если мы хотим выполнить действие по входу в систему, нам нужен экземпляр LoginPage
класса. Создание такого экземпляра позволяет использовать инкапсулированные методы и локаторы для взаимодействия со страницей входа в систему.
# Create an instance of the LoginPage class login_page = LoginPage(driver)
Здесь мы создаём экземпляр класса LoginPage
, передавая экземпляр WebDriver.
Выполнение входа
Теперь представим, что нам необходимо автоматизировать процесс входа в систему с определенными учетными данными. Для этого мы можем использовать метод login
класса LoginPage
, который абстрагирует процесс входа в систему. Что, в свою очередь, позволяет легко выполнять это действие в различных тестах с разными учетными данными.
# Login with valid credentials login_page.login('your_username', 'your_password')
Эта строка вызывает метод login
экземпляра LoginPage
с указанными именем пользователя и паролем.
Явное ожидание сообщения об успехе
После входа в систему, как правило, появляется динамическое сообщение об успехе, на вывод которого может потребоваться некоторое время. В таком случае, полезно использовать явное ожидание (explicit wait) – оно гарантирует, что скрипт дождется сообщения об успехе. Это предотвращает возникновение состояния гонки и делает скрипт устойчивым к динамической загрузке контента.
# Explicitly wait for the login success message success_message_locator = (By.XPATH, '//div[@class="success-message"]') success_message = WebDriverWait(driver, 10).until( EC.presence_of_element_located(success_message_locator) )
В этих строках мы реализовали явное ожидание, которое задерживает выполнение кода на 10 секунд до появления элемента сообщения об успехе на странице.
Скриншот при успешном входе
После того, как мы выполнили успешный вход в систему, нам может понадобиться его визуальное подтверждение для дальнейшей ручной проверки или документирования. С этой целью мы можем использовать блок кода, который проверяет наличие сообщения об успехе, а затем делает снимок экрана. Таким образом, мы обеспечиваем визуальную запись результатов теста.
# Take a screenshot on successful login if success_message.text == 'Login successful': driver.save_screenshot('login_success.png') print('Screenshot saved successfully.')
Эти строки проверяют, является ли текст сообщения об успехе ‘Login successful’, и, если это так, делает снимок экрана и печатает сообщение об успехе.
Закрытие браузера
После завершения теста нам необходимо закрыть браузер. Закрытие браузера является хорошей практикой для освобождения памяти, закрытия сетевых соединений и освобождения других ресурсов, связанных с выполнением теста.
# Close the browser driver.quit()
Наконец, в этой строке мы закрываем окно браузера с помощью driver.quit()
, чтобы освободить ресурсы после завершения теста.
Перед использованием описанного в этой статье кода, обязательно настройте его, заменив значения placeholder на реальные имя пользователя, пароль и соответствующие локаторы для вашего веб-приложения.
Перевод статьи «Automated Login and Screenshot Capture with Selenium in Python».