from playwright.sync_api import Page, Locator, expect from tools.logger import get_logger logger = get_logger("BASE_COMPONENT") class BaseComponent: """Базовый компонент для работы с элементами страницы.""" def __init__(self, page: Page): self.page = page def get_locator(self, locator: str | Locator) -> Locator: if isinstance(locator, Locator): return locator elif isinstance(locator, str): return self.page.locator(locator) else: raise TypeError("locator value should be string type or Locator type") def check_presence(self, locator: str | Locator, msg: str): loc = self.get_locator(locator) expect(loc).to_be_visible(visible=True, timeout=12000), msg def is_scrollable_vertically(self, locator: str | Locator) -> bool: loc = self.get_locator(locator) return loc.evaluate("el => el.scrollHeight > el.clientHeight") def is_scrollable_horizontally(self, locator: str | Locator) -> bool: loc = self.get_locator(locator) return loc.evaluate("el => el.scrollWidth > el.clientWidth") def scroll_up(self, locator: str | Locator): loc = self.get_locator(locator) loc.evaluate("el => el.scrollTo(0, 0)") def scroll_down(self, locator: str | Locator): loc = self.get_locator(locator) loc.evaluate("el => el.scrollTo(0, el.scrollHeight)") def scroll_left(self, locator: str | Locator): loc = self.get_locator(locator) width = loc.evaluate("el => el.scrollWidth") def scroll_right(self, locator: str | Locator): loc = self.get_locator(locator) width = loc.evaluate("el => el.scrollWidth")