
Цель работы:
Получение практических навыков по тестированию веб-элементов с помощью Selenium Webdriver и Python.
Для достижения поставленной цели требуется решить следующие задачи:
1. Установить программное окружение проекта по автоматизированному тестированию.
2. Реализовать проект по запуску браузера под управлением Selenium и отобразить в нем страницу веб-системы.
3. Разработать индивидуальный проект по нахождению веб-элементов на учебном ресурсе с помощью программных методов Selenium.
4. Создать проект по заполнению полей формы регистрации с использованием явных и неявных ожиданий Selenium.
5. Зафиксировать результаты тестирования в отчете.
Ход работы:
Выполнена установка Pycharm и создан новый проект (Рисунок 1).
Рисунок 1 – Создание проекта в Pycharm
Установлены библиотеки pytest и selenium (Рисунок 2).
Рисунок 2 – Вывод списка установленных библиотек
Скачан и добавлен в файлы проекта chromedriver (Рисунок 3).
Рисунок 3 – Файлы проекта
Разработана программа на Python с использованием Selenium для открытия веб-приложения rivegauche.ru в браузере и его последующего закрытия (Рисунок 4, 5).
Рисунок 4 – Браузер работает под управлением webdriver
Рисунок 5 – Выполнение теста в PyCharm
Листинг 1 – Тест доступа к веб-приложению
from selenium import webdriver
import time
from selenium.webdriver.chrome.service import Service as ChromeService
# Путь к исполняемому файлу chromedriver.exe
chrome_driver_path = 'chromedriver-win64/chromedriver.exe'
# Создание сервиса Chrome
chrome_service = ChromeService(executable_path=chrome_driver_path)
# Создание экземпляра браузера
driver = webdriver.Chrome(service=chrome_service)
try:
# Открытие веб-системы
driver.get('https://rivegauche.ru/')
# Ждем некоторое время (в данном случае, 5 секунд)
time.sleep(5)
except Exception as e:
print(f"Произошла ошибка: {e}")
finally:
# Закрытие браузера
driver.quit()
Согласно варианту 21 написана программа по автоматизированному нахождению вебэлементов на странице (Рисунок 7, 8). На рисунках 9 – 14 представлены результаты поиска элементов средствами DevTools.
Рисунок 6 – Варианты
Листинг 2 – Автотест селекторов
from selenium import webdriver
Import time
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service as ChromeService
# Путь к исполняемому файлу chromedriver.exe
chrome_driver_path = 'chromedriver-win64/chromedriver.exe'
# Создание сервиса Chrome
chrome_service = ChromeService(executable_path=chrome_driver_path)
driver = webdriver.Chrome(service=chrome_service)
try:
# Открытие веб-страницы
driver.get('https://qa-test-selectors.netlify.app/')
# Выбор варианта
button = driver.find_element(By.XPATH, '/html/body/main/div[1]/div/section/button[17]')
button.click()
# Неявное ожидание для загрузки элементов страницы
driver.implicitly_wait(10)
# Элементы с тегом h1 (заголовки)
elements_by_tag = driver.find_elements(By.TAG_NAME, "h1")
print("Элементы с тегом h1:", len(elements_by_tag))
# Элементы с именем "cool-bang"
elements_by_name = driver.find_elements(By.NAME, "cool-bang")
print("Элементы с именем cool-bang:", len(elements_by_name))
# Элементы с классом imageContainer
elements_by_class = driver.find_elements(By.CLASS_NAME,
"imageContainer")
print("Элементы с классом imageContainer:",
len(elements_by_class))
# Элементы с ID goldy
elements_by_id = driver.find_elements(By.ID, "goldy")
print("Элементы с ID goldy:", len(elements_by_id))
# Элементы c data-type="penguins"
elements_by_selector = driver.find_elements(By.CSS_SELECTOR,
'[data-type="penguins"]')
print("Элементы с data-type penguins:", len(elements_by_selector))
except Exception as e:
print(f"Произошла ошибка: {e}")
finally:
# Задержка перед закрытием браузера
time.sleep(15)
# Закрытие браузера
driver.quit()
Рисунок 7 – Веб-страница под управлением chromedriver
Рисунок 8 – Результат работа программы
Рисунок 9 - Поиск элементов с тегом <h1> в браузере
Рисунок 10 - Поиск элементов с name= “cool-bang” в браузере
Рисунок 11 - Поиск элементов с class= “imageContainer” в браузере
Рисунок 12 - Поиск элементов с id= “goldy” в браузере
Рисунок 13 - Поиск элементов с data-type= “penguins” в браузере
Реализовано автозаполнению и отправке формы регистрации с использованием явного ожидания появления события (Рисунок 14).
Листинг 3– Автозаполнение и отправка формы регистрации с использованием явного ожидания появления события
Import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service as ChromeService
# Путь к исполняемому файлу chromedriver.exe
chrome_driver_path = 'chromedriver-win64/chromedriver.exe'
# Создание сервиса Chrome
chrome_service = ChromeService(executable_path=chrome_driver_path)
# Создание экземпляра браузера
browser = webdriver.Chrome(service=chrome_service)
URL = "https://qa-course.netlify.app/registration-form"
try:
# Открытие веб-страницы
browser.get(URL)
# Явное ожидание для загрузки элементов страницы
time.sleep(2)
# Выбор первого встреченного input по тегу
input1 = browser.find_element(By.TAG_NAME, "input")
input1.send_keys("Ivan")
# Выбор элемента по имени "lastName"
input2 = browser.find_element(By.NAME, "lastName")
input2.send_keys("Petrov")
# Выбор третьего элемента, найденного по названию класса
"formControl"
input3 = browser.find_elements(By.CLASS_NAME, "formControl")[2]
input3.send_keys("Russia")
# Выбор элемента ввода, найденного по XPath
"//input[@name='city']"
input4 = browser.find_element(By.XPATH,
"//input[@name='city']")
input4.send_keys("Moscow")
# Явное ожидание для появления кнопки
time.sleep(5)
# Выбор элемента, найденного по CSS-селектору
'button[type="submit"]'
button = browser.find_element(By.CSS_SELECTOR, 'button[type="submit"]')
button.click() # Нажатие кнопки
except Exception as e:
print(f"Произошла ошибка: {e}")
finally:
# Задержка перед закрытием браузера
time.sleep(5)
# закрываем браузер после всех манипуляций
browser.quit()
Рисунок 15 – Успешная регистрация с использованием явного ожидания появления события
Заполнены поля формы регистрации с использованием неявного ожидания (Рисунок 16).
Листинг 4 – Автозаполнение и отправка формы регистрации с использованием неявного ожидания появления события