Selenium Python: первый автотест за 30 минут для QA
Работаешь Manual QA? Хочешь в автоматизацию? Не знаешь с чего начать?
Selenium + Python — популярный стек для автоматизации UI. Я покажу как написать первый автотест за 30 минут. С установкой. С объяснениями. С рабочим кодом.
После статьи запустишь свой первый автотест. И поймёшь как работает автоматизация.
Краткий ответ
Чтобы написать первый автотест на Selenium + Python:
Установи Python 3.8+
Выполни: pip install selenium
Скачай ChromeDriver
Напиши тест: открыть сайт → найти элемент → кликнуть
Запусти: python test.py
Займёт 20-30 минут.
Зачем нужен Selenium
Selenium — инструмент для автоматизации браузера. Пишешь код — он кликает кнопки, заполняет формы, проверяет результаты.
Для чего используют:
✅ Регрессионное тестирование (проверять одно и то же быстро)
# 9. Проверяем что вошли (ищем элемент личного кабинета) user_menu = driver.find_element(By.CLASS_NAME, "user-menu")
if user_menu: print("✅ Тест прошёл! Авторизация успешна.") else: print("❌ Тест упал! Не нашли user-menu.")
except Exception as e: print(f"❌ Ошибка: {e}")
finally: # 10. Всегда закрываем браузер driver.quit()
Запуск и результат
python test_login.py
Если всё ок:
Откроется Chrome
Заполнятся поля
Кликнется кнопка
В консоли: "✅ Тест прошёл!"
Локаторы подробнее
By ID
element = driver.find_element(By.ID, "email")
Когда использовать:
Когда у элемента есть уникальный ID.
HTML:
<input id="email" type="text">
By Class Name
element = driver.find_element(By.CLASS_NAME, "btn-primary")
Внимание: если классов несколько, найдёт первый.
By XPath
# Абсолютный XPath (плохо, ломается при изменениях) element = driver.find_element(By.XPATH, "/html/body/div/form/input")[1]
# Относительный XPath (лучше) element = driver.find_element(By.XPATH, "//input[@id='email']")
# По тексту button = driver.find_element(By.XPATH, "//button[text()='Войти']")
# По части текста link = driver.find_element(By.XPATH, "//a[contains(text(), 'Регистр')]")
Как получить XPath:
Открой DevTools (F12)
Найди элемент
ПКМ → Copy → Copy XPath
By CSS Selector
# По ID element = driver.find_element(By.CSS_SELECTOR, "#email")
# По классу element = driver.find_element(By.CSS_SELECTOR, ".btn-primary")
# По атрибуту element = driver.find_element(By.CSS_SELECTOR, "input[type='email']")
# Комбинация element = driver.find_element(By.CSS_SELECTOR, "form.login-form input#email")
CSS обычно быстрее и читабельнее XPath.
Ожидания: implicit и explicit wait
Проблема
driver.get("https://example.com") element = driver.find_element(By.ID, "slow-element") # ❌ Ошибка! Элемент ещё не загрузился
Implicit Wait (неявное ожидание)
Selenium ждёт до X секунд перед ошибкой.
driver.implicitly_wait(10) # Ждать до 10 секунд
driver.get("https://example.com") element = driver.find_element(By.ID, "slow-element") # ✅ Подождёт загрузки
Плюсы: настроил один раз, работает везде.
Минусы: ждёт каждый элемент, замедляет тесты.
Explicit Wait (явное ожидание)
Ждём конкретное условие для конкретного элемента.
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC
# Ждём до 10 секунд пока элемент станет кликабельным wait = WebDriverWait(driver, 10) element = wait.until(EC.element_to_be_clickable((By.ID, "button"))) element.click()
Популярные условия:
presence_of_element_located — элемент есть в DOM
visibility_of_element_located — элемент видим
element_to_be_clickable — элемент кликабельный
text_to_be_present_in_element — текст в элементе
Рекомендация: используй explicit wait для важных действий.
Pytest vs unittest для Selenium
unittest (встроенный в Python)
import unittest from selenium import webdriver
class TestLogin(unittest.TestCase):
def setUp(self): self.driver = webdriver.Chrome()
def test_successful_login(self): driver = self.driver driver.get("https://example.com/login") # ... тест self.assertTrue(condition)
# Используй webdriver-manager from selenium import webdriver from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.chrome.service import Service
service = Service(ChromeDriverManager().install()) driver = webdriver.Chrome(service=service)
Проблема: Элемент не найден, хотя вижу его на странице