Initial commit
This commit is contained in:
commit
9795660e1f
43 changed files with 2757 additions and 0 deletions
99
tests/ui/pages/base_page.py
Normal file
99
tests/ui/pages/base_page.py
Normal file
|
|
@ -0,0 +1,99 @@
|
|||
from selenium.webdriver import ActionChains
|
||||
from selenium.webdriver.chrome.webdriver import WebDriver
|
||||
from selenium.webdriver.support.ui import WebDriverWait
|
||||
from selenium.webdriver.support import expected_conditions as EC
|
||||
from selenium.common.exceptions import TimeoutException, NoSuchElementException
|
||||
import allure
|
||||
import logging
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class BasePage:
|
||||
def __init__(self, driver: WebDriver):
|
||||
self.driver = driver
|
||||
self.wait = WebDriverWait(driver, 10)
|
||||
self.logger = logger
|
||||
|
||||
@allure.step("Открыть URL: {url}")
|
||||
def open(self, url):
|
||||
self.driver.get(url)
|
||||
self.logger.info(f"Открыта страница: {url}")
|
||||
|
||||
@allure.step("Обновить страницу")
|
||||
def refresh(self):
|
||||
self.driver.refresh()
|
||||
self.logger.info("Страница обновлена")
|
||||
|
||||
@allure.step("Найти элемент: {locator}")
|
||||
def find_element(self, locator):
|
||||
try:
|
||||
element = self.wait.until(EC.visibility_of_element_located(locator))
|
||||
self.logger.debug(f"Элемент найден: {locator}")
|
||||
return element
|
||||
except TimeoutException:
|
||||
self.logger.error(f"Элемент не найден: {locator}")
|
||||
allure.attach(
|
||||
self.driver.get_screenshot_as_png(),
|
||||
name="element_not_found",
|
||||
attachment_type=allure.attachment_type.PNG
|
||||
)
|
||||
raise
|
||||
|
||||
@allure.step("Кликнуть на элемент: {locator}")
|
||||
def click(self, locator):
|
||||
element = self.find_element(locator)
|
||||
element.click()
|
||||
self.logger.info(f"Клик по элементу: {locator}")
|
||||
|
||||
@allure.step("Ввести текст '{text}' в элемент: {locator}")
|
||||
def type_text(self, locator, text):
|
||||
element = self.find_element(locator)
|
||||
element.clear()
|
||||
element.send_keys(text)
|
||||
self.logger.info(f"Введен текст '{text}' в элемент: {locator}")
|
||||
|
||||
@allure.step("Получить текст элемента: {locator}")
|
||||
def get_text(self, locator):
|
||||
element = self.find_element(locator)
|
||||
text = element.text
|
||||
self.logger.info(f"Получен текст '{text}' из элемента: {locator}")
|
||||
return text
|
||||
|
||||
@allure.step("Проверить, что элемент видим: {locator}")
|
||||
def is_visible(self, locator):
|
||||
try:
|
||||
element = self.find_element(locator)
|
||||
is_displayed = element.is_displayed()
|
||||
self.logger.info(f"Элемент {locator} видим: {is_displayed}")
|
||||
return is_displayed
|
||||
except (TimeoutException, NoSuchElementException):
|
||||
return False
|
||||
|
||||
@allure.step("Получить текущий URL")
|
||||
def get_current_url(self):
|
||||
url = self.driver.current_url
|
||||
self.logger.info(f"Текущий URL: {url}")
|
||||
return url
|
||||
|
||||
@allure.step("Сделать скриншот")
|
||||
def take_screenshot(self, name="screenshot"):
|
||||
screenshot = self.driver.get_screenshot_as_png()
|
||||
allure.attach(
|
||||
screenshot,
|
||||
name=name,
|
||||
attachment_type=allure.attachment_type.PNG
|
||||
)
|
||||
self.logger.info(f"Скриншот сохранен: {name}")
|
||||
|
||||
@allure.step("Ожидание загрузки элемента: {locator}")
|
||||
def wait_for_element(self, locator, timeout=10):
|
||||
wait = WebDriverWait(self.driver, timeout)
|
||||
element = wait.until(EC.visibility_of_element_located(locator))
|
||||
self.logger.info(f"Элемент загружен: {locator}")
|
||||
return element
|
||||
|
||||
@allure.step("Скролл до элемента")
|
||||
def scroll_to_element(self, locator):
|
||||
element = self.find_element(locator)
|
||||
self.driver.execute_script("arguments[0].scrollIntoView({block: 'center'});", element)
|
||||
Loading…
Add table
Add a link
Reference in a new issue