48 lines
1.8 KiB
Python
48 lines
1.8 KiB
Python
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") |