# test_alert_accept.py
import pytest
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
@pytest.fixture
def driver():
driver = webdriver.Chrome()
driver.maximize_window()
yield driver
driver.quit()
def test_alert_accept(driver):
driver.get("https://bonigarcia.dev/selenium-webdriver-java/dialog-boxes.html")
wait = WebDriverWait(driver, 10)
# Нажать кнопку, вызывающую alert
driver.find_element(By.ID, "my-alert").click()
# Дождаться появления alert
alert = wait.until(EC.alert_is_present())
# Прочитать текст и принять
text = alert.text
print(f"Alert text: {text}")
alert.accept()
assert driver.find_element(By.ID, "my-alert").is_displayed()
Пример 2: Confirm — отмена диалога
# test_confirm_dismiss.py
def test_confirm_dismiss(driver):
driver.get("https://bonigarcia.dev/selenium-webdriver-java/dialog-boxes.html")
wait = WebDriverWait(driver, 10)
# Нажать кнопку confirm
driver.find_element(By.ID, "my-confirm").click()
# Нажать "Отмена"
alert = wait.until(EC.alert_is_present())
alert.dismiss()
# Проверить результат
result = driver.find_element(By.ID, "confirm-text").text
assert "false" in result.lower() or "cancel" in result.lower()
Пример 3: Переключение между вкладками
# test_tabs.py
import pytest
from selenium import webdriver
from selenium.webdriver.common.by import By
@pytest.fixture
def driver():
driver = webdriver.Chrome()
driver.maximize_window()
yield driver
driver.quit()
def test_switch_tabs(driver):
driver.get("https://example.com")
# Открыть новую вкладку через JavaScript
driver.execute_script("window.open('https://google.com', '_blank');")
# Получить список всех вкладок
tabs = driver.window_handles
assert len(tabs) == 2
# Переключиться на вторую вкладку (Google)
driver.switch_to.window(tabs[1])
assert "google" in driver.current_url.lower()
# Закрыть вторую вкладку и вернуться на первую
driver.close()
driver.switch_to.window(tabs[0])
assert "example.com" in driver.current_url
Пример 4: Hover (наведение курсора)
# test_hover.py
import pytest
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
@pytest.fixture
def driver():
driver = webdriver.Chrome()
driver.maximize_window()
yield driver
driver.quit()
def test_hover_menu(driver):
driver.get("https://bonigarcia.dev/selenium-webdriver-java/mouse-over.html")
wait = WebDriverWait(driver, 10)
# Найти элемент, на который нужно навести курсор
element = driver.find_element(By.ID, "menu")
# Создать цепочку действий и выполнить hover
actions = ActionChains(driver)
actions.move_to_element(element).perform()
# Дождаться появления подменю
submenu = wait.until(
EC.visibility_of_element_located((By.ID, "submenu"))
)
assert submenu.is_displayed()
Пример 5: Drag and Drop
# test_drag_and_drop.py
import pytest
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
@pytest.fixture
def driver():
driver = webdriver.Chrome()
driver.maximize_window()
yield driver
driver.quit()
def test_drag_and_drop(driver):
driver.get("https://jqueryui.com/droppable/")
# Переключиться в iframe, где находится drag-and-drop виджет
driver.switch_to.frame(driver.find_element(By.TAG_NAME, "iframe"))
source = driver.find_element(By.ID, "draggable")
target = driver.find_element(By.ID, "droppable")
# Выполнить перетаскивание
actions = ActionChains(driver)
actions.drag_and_drop(source, target).perform()
# Проверить текст в зоне drop
result_text = target.find_element(By.TAG_NAME, "p").text
assert "Dropped" in result_text
Пример 6: iframe — поиск текста внутри фрейма
# test_iframe.py
import pytest
from selenium import webdriver
from selenium.webdriver.common.by import By
@pytest.fixture
def driver():
driver = webdriver.Chrome()
driver.maximize_window()
yield driver
driver.quit()
def test_iframe_text(driver):
driver.get("https://bonigarcia.dev/selenium-webdriver-java/iframes.html")
# Найти iframe и переключиться в него
iframe = driver.find_element(By.ID, "my-iframe")
driver.switch_to.frame(iframe)
# Найти параграфы внутри iframe
paragraphs = driver.find_elements(By.TAG_NAME, "p")
# Проверить наличие нужного текста
expected_text = "semper posuere integer et senectus justo curabitur."
found = any(expected_text in p.text for p in paragraphs)
assert found, f"Текст '{expected_text}' не найден в iframe"
# Вернуться в основной контекст
driver.switch_to.default_content()
Пример 7: Загрузка файла
# test_file_upload.py
import pytest
import os
from selenium import webdriver
from selenium.webdriver.common.by import By
@pytest.fixture
def driver():
driver = webdriver.Chrome()
driver.maximize_window()
yield driver
driver.quit()
def test_file_upload(driver):
driver.get("https://the-internet.herokuapp.com/upload")
# Найти input[type=file]
file_input = driver.find_element(By.ID, "file-upload")
# Передать абсолютный путь к файлу
file_path = os.path.abspath("test_data/sample.txt")
file_input.send_keys(file_path)
# Нажать кнопку Upload
driver.find_element(By.ID, "file-submit").click()
# Проверить успешную загрузку
header = driver.find_element(By.TAG_NAME, "h3")
assert "File Uploaded!" in header.text